From e0a6d84a9f4e26e76fcfaea046fedc48609aa8b5 Mon Sep 17 00:00:00 2001 From: Jonny007-MKD Date: Mon, 26 May 2014 10:07:04 +0000 Subject: [PATCH] include/ModbusFunctions.cin Write values to struct MakeConfig.can Detect devices via IP port scan Analyze devices and generate sysVars appropriately ModbusClientUDP.can Don't analyze devices because this has to be done in MakeConfig.can --- Modbus/MakeConfig.can | 393 ++++++++++++++------ Modbus/MakeConfig.cfg | 56 +-- Modbus/ModbusClientUDP.can | 203 +++++----- Modbus/generated.vsysvar | 48 +-- Modbus/include/ModbusClientCommon.cin | 4 +- Modbus/include/ModbusFunctions.cin | 28 +- Modbus/modbus.cfg | 513 ++++++++++++++++++-------- Modbus/modbus.dbc | 51 --- Modbus/modbus.vsysvar | 28 -- 9 files changed, 825 insertions(+), 499 deletions(-) delete mode 100644 Modbus/modbus.dbc delete mode 100644 Modbus/modbus.vsysvar diff --git a/Modbus/MakeConfig.can b/Modbus/MakeConfig.can index 96515be..b9f268b 100644 --- a/Modbus/MakeConfig.can +++ b/Modbus/MakeConfig.can @@ -2,10 +2,21 @@ includes { #include "include/ModbusUdpClientCommon.cin" + #include "include/ModbusFunctions.cin" } variables { + struct device + { + char Ip[16]; + char IpLsb[4]; + char IpNet[4]; + word SerialCode; + word DeviceCode; + struct deviceIOs DeviceIOs; + }; + char[16] gIps[long]; char gScanFirstIp[16]; char gScanLastIp[16]; @@ -14,13 +25,14 @@ variables char fnSysvar[20]; // Filename of Sysvars char fnDbc[20]; // Filename of DBC char name[20]; // Name of project + dword ips[50]; // detected IPs + file f; byte gIpNets[long]; - char[16] gIpsSorted[long]; - + struct device gIpsSorted[long]; dword gScanFirst, gScanLast; - //long i, ipN; + word ADi, ADn, ADl; } on preStart @@ -42,37 +54,221 @@ on start if (gIps.Size() == 0) DetectDevices(); else - MakeFiles(); + MakeIpNets(); } void PutString(file f, char str[]) { f.PutString(str, strlen(str)); } +void PutString(file f, word d) +{ + char str[6]; + ltoa(d, str, 10); + f.PutString(str, strlen(str)); +} +void PutString(file f, byte d) +{ + char str[4]; + ltoa(d, str, 10); + f.PutString(str, strlen(str)); +} +// Step 1: Detect active devices and collect IP addresses +/// +void DetectDevices() +{ + write("Scanning from %s to %s with timeout of %d ms", gScanFirstIp, gScanLastIp, @sysvar::Config::Modbus::RequestTimeout); + gScanFirst = ipGetAddressAsNumber(gScanFirstIp); + gScanLast = ipGetAddressAsNumber(gScanLastIp); + ModbusConnectTo(gScanFirst, 502); + ModbusReadBits(0, 1); +} +/// +void DetectDevicesNext() +{ + // next IP + // 0xFE...... --> Skip xxx.xxx.xxx.255 which is broadcast address in 192.168.xxx.0 nets + if ((gScanFirst & 0xFFFFFF00) == 0xFEFFFF00) + { + gScanFirst &= 0x000000FF; + gScanFirst += 0x00000001; + } + else if ((gScanFirst & 0xFFFF0000) == 0xFEFF0000) + { + gScanFirst &= 0x0000FFF; + gScanFirst += 0x00000100; + } + else if ((gScanFirst & 0xFF000000) == 0xFE000000) + { + gScanFirst &= 0x00FFFFFF; + gScanFirst += 0x00010000; + } + else + { + gScanFirst += 0x01000000; + } + if (gScanFirst == gScanLast) + { + MakeIpNets(); + return; + } + gRemoteIP = gScanFirst; // Don't open new socket, it takes too much time. + ModbusReadBits(0, 1); +} +/// +void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + DetectDevicesNext(); +} +/// +void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbr, byte bitStatus[], word numBits) +{ + ipGetAddressAsString(gScanFirst, gIps[gScanFirst], 16); + DetectDevicesNext(); +} + +// Step 2: Sort into subnets +// Sort the IPs from gIps to gIpsSorted and add their subnet to gIpNets +/// +void MakeIpNets() +{ + long ipNum; + + if (gIps.Size() == 0) + { + stop(); + return; + } + + for (long i : gIps) + { + ipNum = ipGetAddressAsNumber(gIps[i]); // convert IP to dword + + gIpNets[(ipNum >> 16) & 0xFF] = 1; // add subnet + ips[gIpsSorted.size()] = ipNum; // add ip to array + strncpy(gIpsSorted[ipNum].IP, gIps[i], 16); // copy to new array + ltoa((ipNum >> 16) & 0xFF, gIpsSorted[ipNum].IpNet, 10); // add .IpNet + ltoa((ipNum >> 24) & 0xFF, gIpsSorted[ipNum].IpLsb, 10); // add .IpLsb + + gIps.Remove(i); + } + + AnalyzeDevices(); +} + + +// Step 3: Retreive configuration of devices +/// +void AnalyzeDevices() +{ + ADn = 0; + ADi = 0; + ADl = gIpsSorted.Size(); + write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip); + if (gRemoteIP != INVALID_IP) + gRemoteIP = ips[ADi]; + else + ModbusConnectTo(ips[ADi], gRemotePort); + ModbusReadRegisters(0x2011, 1); + ModbusReadRegisters(0x2012, 1); + ModbusReadRegisters(0x2030, 65); + ModbusReadRegisters(0x2031, 64); + ModbusReadRegisters(0x2032, 64); + ModbusReadRegisters(0x2033, 63); +} + +/// +void AnalyzeDevicesNext() +{ + if (++ADi >= ADl) // we have analyzed all devices + { + MakeFiles(); + return; + } + + ADn = 0; + gRemoteIP = ips[ADi]; + write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip); + ModbusReadRegisters(0x2011, 1); + ModbusReadRegisters(0x2012, 1); + ModbusReadRegisters(0x2030, 65); + ModbusReadRegisters(0x2031, 64); + ModbusReadRegisters(0x2032, 64); + ModbusReadRegisters(0x2033, 63); +} + +/// +void OnModbusReadRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + switch (error) + { + case FinalTimeout: + writeLineEx(0, 3, "Error while analyzing %s! The device did not respond! Ignoring...", gIpsSorted[ips[ADi]].IP); + gQueueAck.Clear(); + gQueuePending.Clear(); + gQueueSent.Clear(); + gIpsSorted.Remove(ips[ADi]); + AnalyzeDevicesNext(); + break; + case Exception: + writeLineEx(0, 3, "Error while analyzing %s! The device respond with exception code %d! Ignoring...", gIpsSorted[ips[ADi]].IP, ex); + gQueueAck.Clear(); + gQueuePending.Clear(); + gQueueSent.Clear(); + gIpsSorted.Remove(ips[ADi]); + AnalyzeDevicesNext(); + break; + } +} + +/// +void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbr, word numRegs) +{ + byte i; + struct ModbusReqRead mbrq; + + if (!gQueueAck.ContainsKey(mbr.Header.TxID)) + return; + + memcpy_n2h(mbrq, gQueueAck[mbr.Header.TxID].Buffer); + + switch (mbrq.Address) + { + case 0x2011: + gIpsSorted[ips[ADi]].serialCode = mbr.Data[0]; + break; + case 0x2012: + gIpsSorted[ips[ADi]].deviceCode = mbr.Data[0]; + break; + case 0x2030: + case 0x2031: + case 0x2032: + case 0x2033: + for (i = 0; i < 65; i++) + { + if (mbr.Data[i] == 0x0000) + break; + ParseDeviceCode(mbr.Data[i], gIpsSorted[ips[ADi]].DeviceIOs); + } + break; + } + + if (++ADn == 6) + AnalyzeDevicesNext(); +} + +// Step 4: Create the files with the queried data +/// void MakeFiles() { - MakeIpNets(); GenSysvars(); GenDbc(); stop(); } -// Sort the IPs from gIps to gIpsSorted and add their subnet to gIpNets -void MakeIpNets() -{ - long ipN; - for (long i : gIps) - { - ipN = ipGetAddressAsNumber(gIps[i]); // convert IP to dword - strncpy(gIpsSorted[ipN], gIps[i], 16); - gIps.Remove(i); - - gIpNets[(ipN >> 16) & 0xFF] = 1; - } -} - // Generate the SysVars XML +/// void GenSysvars() { write("GenSysvars() -> %s", fnSysvar); @@ -95,58 +291,92 @@ void GenSysvars() for (long net : gIpNets) { - char netS[4]; - ltoa(net, netS, 10); - + byte nett; + nett = net; PutString(f, " \n"); for (long ipN : gIpsSorted) { - char ipS[16]; - char ipSlast[4]; if (((ipN >> 16) & 0xFF) != net) continue; - strncpy(ipS, gIpsSorted[ipN], 16); // copy IP address to local ipS - ltoa(ipN >> 24, ipSlast, 10); // convert the last byte (= first byte) to string - write("GenSysvars: %s", ipS); + write("GenSysvars: %s", gIpsSorted[ipN].Ip); PutString(f, " \n"); + // Namespace Config PutString(f, " \n"); - + // IP PutString(f, " \n"); - + // Intveral PutString(f, " \n"); PutString(f, " \n"); - + + //Namespace Info PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); + // SerialCode + PutString(f, " \n"); + // DeviceCode + PutString(f, " \n"); + // Modules + gIpsSorted[ipN].DeviceIOs.Modules[strlen(gIpsSorted[ipN].DeviceIOs.Modules)] = 0; + PutString(f, " \n"); + // InputRegisters + PutString(f, " \n"); + // InputBits + PutString(f, " \n"); + // OutputRegisters + PutString(f, " \n"); + // OutputBits + PutString(f, " \n"); PutString(f, " \n"); + + // Namespace Data PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); - PutString(f, " \n"); + // InputRegisters + PutString(f, " \n"); + // InputBits + PutString(f, " \n"); + // OutputRegisters + PutString(f, " \n"); + // OutputBits + PutString(f, " \n"); + PutString(f, " \n"); PutString(f, " \n"); } @@ -160,6 +390,7 @@ void GenSysvars() } // Generate the Database +/// void GenDbc() { write("GenDbc() -> %s", fnDbc); @@ -201,19 +432,12 @@ void GenDbc() for (long ipN : gIpsSorted) { - char ipS[16]; - char ipSlast[4]; - char netS[4]; - - strncpy(ipS, gIpsSorted[ipN], 16); // copy IP address to local ipS - ltoa(ipN >> 24, ipSlast, 10); // convert the last byte (= first byte) to string - ltoa((ipN >> 16) & 0xFF, netS, 10); - write("GenDbc: %s", ipS); + write("GenDbc: %s", gIpsSorted[ipN].Ip); PutString(f, " Client_"); - //PutString(f, netS); + //PutString(f, gIpsSorted[ipN].IpNet); //PutString(f, "_"); - PutString(f, ipSlast); + PutString(f, gIpsSorted[ipN].IpLsb); } PutString(f, "\n\n\n\n"); PutString(f, "BA_DEF_ BU_ \"NodeLayerModules\" STRING ;\n"); @@ -230,66 +454,19 @@ void GenDbc() f.Close(); } -void DetectDevices() -{ - write("Scanning from %s to %s with timeout of %d ms", gScanFirstIp, gScanLastIp, @sysvar::Config::Modbus::RequestTimeout); - gScanFirst = ipGetAddressAsNumber(gScanFirstIp); - gScanLast = ipGetAddressAsNumber(gScanLastIp); - ModbusConnectTo(gScanFirst, 502); - ModbusReadBits(0, 1); -} - -void DetectDevicesNext() -{ - // next IP - // 0xFE...... --> Skip xxx.xxx.xxx.255 which is broadcast address in 192.168.xxx.0 nets - if ((gScanFirst & 0xFFFFFF00) == 0xFEFFFF00) - { - gScanFirst &= 0x000000FF; - gScanFirst += 0x00000001; - } - else if ((gScanFirst & 0xFFFF0000) == 0xFEFF0000) - { - gScanFirst &= 0x0000FFF; - gScanFirst += 0x00000100; - } - else if ((gScanFirst & 0xFF000000) == 0xFE000000) - { - gScanFirst &= 0x00FFFFFF; - gScanFirst += 0x00010000; - } - else - { - gScanFirst += 0x01000000; - } - if (gScanFirst == gScanLast) - { - MakeFiles(); - return; - } - gRemoteIP = gScanFirst; // Don't open new socket, it takes too much time. - ModbusReadBits(0, 1); -} -// Modbus events ---------------------------------------------------------------------- -void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) -{ - DetectDevicesNext(); -} -void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbr, byte bitStatus[], word numBits) -{ - ipGetAddressAsString(gScanFirst, gIps[gScanFirst], 16); - DetectDevicesNext(); -} -void OnModbusReadRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} + + + + + void OnModbusWriteBitFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} void OnModbusWriteRegisterFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} void OnModbusWriteMasksFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} void OnModbusReadWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} void OnModbusWriteBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} void OnModbusWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} -void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbr, word numRegs){} void OnModbusWriteBitSuccess(struct ModbusResConfirmSingle mbc){} void OnModbusWriteRegisterSuccess(struct ModbusResConfirmSingle mbc){} void OnModbusWriteBitsSuccess(struct ModbusResConfirmMultiple mbc){} diff --git a/Modbus/MakeConfig.cfg b/Modbus/MakeConfig.cfg index 71b2344..19ecec4 100644 --- a/Modbus/MakeConfig.cfg +++ b/Modbus/MakeConfig.cfg @@ -1,4 +1,4 @@ -;CANoe Version |4|7|1|35761 MakeConfig +;CANoe Version |4|7|1|52129 MakeConfig Version: 8.2.40 Build 40 32 PRO 5 @@ -1261,37 +1261,9 @@ Grafik-Fenster 237 0 0 -1 0 0 0 --11 -0 -0 -0 -0 -0 -0 -0 -400 -0 -Tahoma -0 -1 -0 -0 -0 --11 -0 -0 -0 -34 -0 -0 -0 -400 -0 -Tahoma 0 1 1 @@ -1462,7 +1434,7 @@ End_Of_Object VTraceFilterCfg 15 1 1 14 -ver=2: FT FT FT FT FT FT +ver=2: FF FT FT FT FT FT End_Of_Serialized_Data 14 2 0 @@ -1475,7 +1447,7 @@ End_Of_Serialized_Data 14 6 1 14 -ver=2: FT TF TF FT FT FF;F T Config;F T GLLogger;T F _Statistics +ver=2: FT TF TF FF FT FT;F T Config;F T GLLogger;T F _Statistics End_Of_Serialized_Data 14 7 0 @@ -1494,7 +1466,7 @@ End_Of_Serialized_Data 14 14 1 14 -ver=3: FT FT FT FT +ver=3: FF FT FT FT End_Of_Serialized_Data 14 15 0 @@ -1516,29 +1488,29 @@ End_Of_Serialized_Data 14 22 1 14 -ver=2: FT +ver=2: FF End_Of_Serialized_Data 14 23 1 14 -ver=2: FT +ver=2: FF End_Of_Serialized_Data 14 24 1 14 -ver=2: FT +ver=2: FF End_Of_Serialized_Data 14 25 0 26 1 14 -ver=2: FT +ver=2: FF End_Of_Serialized_Data 14 27 1 14 -ver=2: FT +ver=2: FF End_Of_Serialized_Data 14 0 1 @@ -2450,7 +2422,7 @@ VTNColumnData 16 Begin_Of_Object 0 End_Of_Object VTNColumnData 16 End_Of_Object VTraceColumnConfiguration 15 -1 +2 0 VTraceControlFixedModeExpansionItems 15 Begin_Of_Object 3 @@ -2961,7 +2933,7 @@ End_Of_Object VGrMnBox 3 VDOLocalInfoStruct 3 Begin_Of_Object 3 1 -53 +59 VDAOBus 4 Begin_Of_Object 1 1 @@ -3091,7 +3063,7 @@ VSimulinkModelViewerConfiguration 7 Begin_Of_Object End_Of_Object VSimulinkModelViewerConfiguration 7 1 0 -2714767912 +706119883 0 NodeSignalPanelBustypeCount 0 End_Of_Object VSimulationNode 6 @@ -3129,7 +3101,7 @@ NULL End_Of_Object VDOLocalInfoStruct 3 0.000000 0 0 -1 1 0 59420 1 233 1 2882400001 98 331 309 611 2882400002 0 0 0 0 0 0 1 2882400001 1270 1270 311 311 2882400002 0 0 0 603501776 0 604138284 3 +1 1 0 59420 1 233 1 2882400001 98 331 309 611 2882400002 0 0 0 0 0 0 1 2882400001 1270 1270 311 311 2882400002 0 0 0 0 0 0 3 SS_BEGIN_COMMON_INFO 1 0 @@ -3141,7 +3113,7 @@ Ethernet 11 1 1 -362751416 1 0 1 0 0 1 0 0 0 2000 1 +609817640 1 0 1 0 0 1 0 0 0 2000 1 SS_BEGIN_COMMON_INFO 1 3 diff --git a/Modbus/ModbusClientUDP.can b/Modbus/ModbusClientUDP.can index 8310658..ce59c75 100644 --- a/Modbus/ModbusClientUDP.can +++ b/Modbus/ModbusClientUDP.can @@ -26,22 +26,65 @@ on start // Read serial code, additional stuff is done in OnModbusReceiveRegisters - ModbusReadRegisters(0x2011, 1); - ModbusReadRegisters(0x2012, 1); - ModbusReadRegisters(0x2030, 65); - ModbusReadRegisters(0x2031, 64); - ModbusReadRegisters(0x2032, 64); - ModbusReadRegisters(0x2033, 63); + // This has to be done by MakeConfig to properly size the arrays + //ModbusReadRegisters(0x2011, 1); + //ModbusReadRegisters(0x2012, 1); + //ModbusReadRegisters(0x2030, 65); + //ModbusReadRegisters(0x2031, 64); + //ModbusReadRegisters(0x2032, 64); + //ModbusReadRegisters(0x2033, 63); + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits > 0) + ModbusReadBits(0x200, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits); + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters > 0) + ModbusReadRegisters(0x200, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters); + + setTimerCyclic(gtRead, 1, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval); } // Modbus events ---------------------------------------------------------------------- void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { + word i; + + switch (error) + { + case Exception: + writeLineEx(0, 3, "<%NODE_NAME%> Error: Received Exception 0x%X while reading Bits", ex); + break; + case Timeout: + writeLineEx(0, 2, "<%NODE_NAME%> Warning: Reading Bits timed out! Retrying..."); + break; + case FinalTimeout: + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputBits[i] = -1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + break; + } } + void OnModbusReadRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { + byte i; + + switch (error) + { + case Exception: + writeLineEx(0, 3, "<%NODE_NAME%> Error: Received Exception 0x%X while reading Registers", ex); + break; + case Timeout: + writeLineEx(0, 2, "<%NODE_NAME%> Warning: Reading Registers timed out! Retrying..."); + break; + case FinalTimeout: + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputRegisters[i] = -1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + break; + } } + void OnModbusWriteBitFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { } @@ -54,72 +97,38 @@ void OnModbusWriteMasksFailed(enum ModbusRequestError error, enum ModbusExceptio void OnModbusReadWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { } - void OnModbusWriteBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { - byte bitStatus[100], i; - - switch (error) - { - case Exception: - writeLineEx(0, 3, "Error: Received Exception 0x%X while reading Bits", ex); - break; - case Timeout: - writeLineEx(0, 2, "Warning: Reading Bits timed out! Retrying..."); - break; - case FinalTimeout: - for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits; i++) - bitStatus[i] = 255; - - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatus, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits); - break; - } } - void OnModbusWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) { - byte bitStatus[100], i; - - - switch (error) - { - case Exception: - writeLineEx(0, 3, "Error: Received Exception 0x%X while reading Registers", ex); - break; - case Timeout: - writeLineEx(0, 2, "Warning: Reading Registers timed out! Retrying..."); - break; - case FinalTimeout: - for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++) - bitStatus[i] = 255; - - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters", bitStatus, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters); - break; - } } void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbr, byte bitStatus[], word numBits) { - byte bitStatusOld[1968]; + struct ModbusReqRead mbrq; word i; - long numBitsOld; - sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatusOld, numBitsOld); - - if (numBitsOld != numBits) - { - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatus, numBits); + if (!gQueueAck.ContainsKey(mbr.Header.TxID)) return; - } - for (i = 0; i < numBits; i++) + memcpy_n2h(mbrq, gQueueAck[mbr.Header.TxID].Buffer); + + switch(mbrq.Address) { - if (bitStatusOld[i] != bitStatus[i]) - { - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatus, numBits); + case 0x200: // set output bits + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = bitStatus[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + break; + default: // set input bits + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputBits[i] = bitStatus[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); break; - } } } @@ -137,25 +146,17 @@ void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbr, word num switch (mbrq.Address) { - case 0x2011: - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::SerialCode = mbr.Data[0]; + case 0x200: // set output registers + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters[i] = mbr.Data[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputRegisters"); break; - case 0x2012: - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::DeviceCode = mbr.Data[0]; - break; - case 0x2030: - case 0x2031: - case 0x2032: - case 0x2033: - for (i = 0; i < 65; i++) - { - if (mbr.Data[i] == 0x0000) - return; - ParseDeviceCode(mbr.Data[i]); - } - break; - case 0x0000: - // ///////////////////////////////////////////////////////////////sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters", mbr.Data, numRegs); + case 0x000: // set output registers + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputRegisters[i] = mbr.Data[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); break; default: // Not recognized @@ -183,11 +184,6 @@ void OnModbusWriteMasksSuccess(struct ModbusResConfirmMasks mbc) // Key events ------------------------------------------------------------------------- -on key 'n' // read the configuration -{ - setTimerCyclic(gtRead, 1, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval); -} - on timer gtRead { if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters > 0) @@ -198,26 +194,53 @@ on timer gtRead on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits { + word firstBitAddr, count, i; byte bitStatus[1968]; - long numBytes; - sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bitStatus, numBytes); - ModbusWriteBitsB(@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits, bitStatus); + + firstBitAddr = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2; + count = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; + + for (i = 0; i < count; i++) + bitStatus[i] = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i]; + + ModbusWriteBitsB(firstBitAddr, count, bitStatus); } on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters { - /******************************************************word regValues[1968]; - long numRegs; - sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", regValues, numRegs); - ModbusWriteRegisters(0, numRegs, regValues);*/ + word count, i; + word regValues[123]; + + count = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters; + + for (i = 0; i < count; i++) + regValues[i] = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters[i]; + + ModbusWriteRegisters(0x000, count, regValues); +} + +on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval +{ + if (@this <= 0) + gtRead.Cancel(); + else + setTimerCyclic(gtRead, @this); } on key '+' { - byte bla[16] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bla, 16); + word i; + + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = 1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); } on key '-' { - byte bla[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bla, 16); + word i; + + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = 0; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); } \ No newline at end of file diff --git a/Modbus/generated.vsysvar b/Modbus/generated.vsysvar index 705d4aa..a0d721d 100644 --- a/Modbus/generated.vsysvar +++ b/Modbus/generated.vsysvar @@ -1,29 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - @@ -34,5 +11,28 @@ + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/Modbus/include/ModbusClientCommon.cin b/Modbus/include/ModbusClientCommon.cin index 524ce1b..3fe605d 100644 --- a/Modbus/include/ModbusClientCommon.cin +++ b/Modbus/include/ModbusClientCommon.cin @@ -455,6 +455,7 @@ void OnModbusReceiveConfirmRegistersException(struct ModbusApHeader mbap, enum M /// <-OnModbusReceive> void OnModbusReceive(dword socket, long result, dword address, dword port, byte buffer[], dword size) { + //write("OnModbusReceive: size = %d", size); if (result == 0) { if (size == 0) @@ -540,6 +541,7 @@ void OnModbusReceive2OnePacket(byte buffer[], int offset, struct ModbusApHeader if (!gQueueSent.ContainsKey(mbap.TxID)) // We don't wait for this message! return; + //write("Received TxID: %d", mbap.TxID); memcpy(gQueueAck[mbap.TxID], gQueueSent[mbap.TxID]); gQueueSent.Remove(mbap.TxID); @@ -679,7 +681,7 @@ on timer gtRobin struct ModbusApHeader mbap; enum ModbusRequestError reqError; - //writeLineEx(0, 1, "Queue Sent: %d, Queue Pending: %d, Queue Ack: %d", gQueueSent.Size(), gQueuePending.Size(), gQueueAck.Size()); + ///writeLineEx(0, 1, "Queue Sent: %d, Queue Pending: %d, Queue Ack: %d", gQueueSent.Size(), gQueuePending.Size(), gQueueAck.Size()); // First: check timeouts = packets that were sent in previous run and not removed by response for (long TxID : gQueueSent) diff --git a/Modbus/include/ModbusFunctions.cin b/Modbus/include/ModbusFunctions.cin index 04638f7..5bea383 100644 --- a/Modbus/include/ModbusFunctions.cin +++ b/Modbus/include/ModbusFunctions.cin @@ -1,17 +1,25 @@ /*@!Encoding:1252*/ +variables +{ + struct deviceIOs + { + byte InputRegisters; + word InputBits; + byte OutputRegisters; + word OutputBits; + char Modules[1024]; + }; +} void SysvarInit() { sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", ""); } -void ParseDeviceCode(word dev) +void ParseDeviceCode(word dev, struct deviceIOs dios) { byte input; byte numChannels; - char modules[1024]; char module[10]; - - sysGetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules, elCount(modules)); if (dev & 0x8000) // Digital Module { @@ -21,13 +29,13 @@ void ParseDeviceCode(word dev) { input = 1; strncpy(module, "DI%d,", elCount(module)); - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits += numChannels; + dios.InputBits += numChannels; } else if (dev & 0x0002) // Output Module { input = 0; strncpy(module, "DO%d,", elCount(module)); - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits += numChannels; + dios.OutputBits += numChannels; } else // blööd { @@ -52,17 +60,15 @@ void ParseDeviceCode(word dev) if (input) { strncpy(module, "AI%d,", elCount(module)); - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters += numChannels; + dios.InputRegisters += numChannels; } else { strncpy(module, "AO%d,", elCount(module)); - @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters += numChannels; + dios.OutputRegisters += numChannels; } } snprintf(module, elCount(module), module, numChannels); - strncat(modules, module, elCount(modules)); - sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules); - writeLineEx(0, 1, "<%NODE_NAME%> 0x%X -> %s", dev, module); + strncat(dios.Modules, module, elCount(dios.Modules)); } \ No newline at end of file diff --git a/Modbus/modbus.cfg b/Modbus/modbus.cfg index 2625fee..c3fc59c 100644 --- a/Modbus/modbus.cfg +++ b/Modbus/modbus.cfg @@ -1,17 +1,17 @@ -;CANoe Version |4|7|1|42337 modbus +;CANoe Version |4|7|1|42340 modbus Version: 8.2.40 Build 40 32 PRO 10 -APPDIR Vector.CANoe.SignalGenerators.DLL -Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null -Vector.CANoe.SignalGenerators.ComponentWrapper -1 -1.0.1 APPDIR Vector.CANoe.Debugger.DLL Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null Vector.CANoe.Debugger.DebuggerComponent -2 +1 1.0.0 +APPDIR Vector.CANoe.SignalGenerators.DLL +Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.SignalGenerators.ComponentWrapper +2 +1.0.1 VGlobalConfiguration 1 Begin_Of_Object 17 VGlobalParameters 2 Begin_Of_Object @@ -67,6 +67,7 @@ DialogBegin 1 285 569 816 1103 SymbolExplorerDialogBegin + 1 HistoryBegin 1 0 @@ -1379,37 +1380,9 @@ Grafik-Fenster 237 0 0 -1 0 0 0 --11 -0 -0 -0 -0 -0 -0 -0 -400 -0 -Tahoma -0 -1 -0 -0 -0 --11 -0 -0 -0 -34 -0 -0 -0 -400 -0 -Tahoma 0 1 1 @@ -3910,7 +3883,7 @@ End_Of_Object VBoxRoot 15 End_Of_Object VDataBox 14 1 6 -7 +14 VSysVarObject 14 Begin_Of_Object 1 VHostSignal 15 Begin_Of_Object @@ -4163,7 +4136,259 @@ End_Of_Object VSysVarObject 14 1 8 2 0 0 16777215 -1000 1000 -1000 0 [End_of_Item] -20 308 16 169 75 75 50 100 100 100 1 +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Data::OutputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Data +OutputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 11 +1 8 2 0 0 16777215 +3.18299e-313 1 3.18299e-313 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Data::InputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Data +InputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 12 +1 8 2 0 0 16777215 +3.18299e-313 1 3.18299e-313 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +RxBitRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +RxBitRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 13 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +TxPacketRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +TxPacketRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 10 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +TxBitRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +TxBitRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 9 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +RxPacketRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +RxPacketRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 14 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Config::Interval +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Config +Interval +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 8 +1 1 2 0 0 16777215 +10 10000 10 0 +[End_of_Item] +34 220 16 151 75 75 44 156 191 100 1 35 35 30 1 1 0 1 0 0 1 1 1 0 1 @@ -4369,7 +4594,7 @@ End_Of_Object VGrMnBox 3 VDOLocalInfoStruct 3 Begin_Of_Object 3 1 -171 +175 VDAOBus 4 Begin_Of_Object 1 1 @@ -4777,7 +5002,7 @@ VSimulinkModelViewerConfiguration 7 Begin_Of_Object End_Of_Object VSimulinkModelViewerConfiguration 7 1 0 -713110817 +3058661840 0 NodeSignalPanelBustypeCount 0 End_Of_Object VSimulationNode 6 @@ -4810,7 +5035,7 @@ VBoxRoot 9 Begin_Of_Object 1 3 1 1 2 3 -1 -1 -8 -30 114 0 1146 491 -Ethernet Packet Builder + 1 MDI_DOCK_INFO_END @@ -4887,8 +5112,106 @@ EOF_MBSSDATA 1 0 0 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4899,104 +5222,6 @@ EOF_MBSSDATA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - End_Of_Object VSSPlugInConfiguration 6 NULL @@ -5032,7 +5257,7 @@ NULL End_Of_Object VDOLocalInfoStruct 3 0.000000 0 0 -1 1 0 59420 1 233 1 2882400001 323 556 331 782 2882400002 0 0 0 0 0 0 1 2882400001 1197 1197 333 333 2882400002 0 0 0 0 0 0 3 +1 1 0 59420 1 233 1 2882400001 323 556 331 782 2882400002 0 0 0 0 0 0 1 2882400001 1197 1197 333 333 2882400002 0 0 0 610193072 0 608273564 3 SS_BEGIN_COMMON_INFO 1 0 @@ -5044,7 +5269,7 @@ Ether1 11 1 1 -362751416 1 0 1 0 1 1 0 0 0 2000 1 +609817640 1 0 1 0 1 1 0 0 0 2000 1 SS_BEGIN_COMMON_INFO 1 3 @@ -5446,14 +5671,14 @@ SymbSelHeaderMgrBegin SymbSelHeaderMgrEnd End Begin -3 0 -1 +3 0 31 3 Modbus modbus Systemvariablen - ( 3 ( 1 ( 0 ) 0 ) 0 ) + ( 3 ( 1 ( 1 ( 0 ) 2 ( 1 ( 0 ) 3 ( 0 ) 0 ) 3 ( 0 ) 0 ) 0 ) 0 ) SymbSelHeaderMgrBegin 1 4 0 1 200 0 0 diff --git a/Modbus/modbus.dbc b/Modbus/modbus.dbc deleted file mode 100644 index ecc6b48..0000000 --- a/Modbus/modbus.dbc +++ /dev/null @@ -1,51 +0,0 @@ -VERSION "" - - -NS_ : - NS_DESC_ - CM_ - BA_DEF_ - BA_ - VAL_ - CAT_DEF_ - CAT_ - FILTER - BA_DEF_DEF_ - EV_DATA_ - ENVVAR_DATA_ - SGTYPE_ - SGTYPE_VAL_ - BA_DEF_SGTYPE_ - BA_SGTYPE_ - SIG_TYPE_REF_ - VAL_TABLE_ - SIG_GROUP_ - SIG_VALTYPE_ - SIGTYPE_VALTYPE_ - BO_TX_BU_ - BA_DEF_REL_ - BA_REL_ - BA_DEF_DEF_REL_ - BU_SG_REL_ - BU_EV_REL_ - BU_BO_REL_ - SG_MUL_VAL_ - -BS_: - -BU_: Wago_3 - - - - -EV_ Wago_3_IP: 0 [0|0] "" 0 1 DUMMY_NODE_VECTOR8001 Vector__XXX; - -BA_DEF_ BU_ "NodeLayerModules" STRING ; -BA_DEF_ "DBName" STRING ; -BA_DEF_ "BusType" STRING ; -BA_DEF_DEF_ "NodeLayerModules" "Ethernet_IL.DLL"; -BA_DEF_DEF_ "DBName" ""; -BA_DEF_DEF_ "BusType" "Ethernet"; -BA_ "BusType" "Ethernet"; -BA_ "DBName" "modbus"; - diff --git a/Modbus/modbus.vsysvar b/Modbus/modbus.vsysvar deleted file mode 100644 index 7fc791f..0000000 --- a/Modbus/modbus.vsysvar +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file