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
This commit is contained in:
Jonny007-MKD 2014-05-26 10:07:04 +00:00
parent bcf79a7b27
commit e0a6d84a9f
9 changed files with 825 additions and 499 deletions

View file

@ -2,10 +2,21 @@
includes includes
{ {
#include "include/ModbusUdpClientCommon.cin" #include "include/ModbusUdpClientCommon.cin"
#include "include/ModbusFunctions.cin"
} }
variables variables
{ {
struct device
{
char Ip[16];
char IpLsb[4];
char IpNet[4];
word SerialCode;
word DeviceCode;
struct deviceIOs DeviceIOs;
};
char[16] gIps[long]; char[16] gIps[long];
char gScanFirstIp[16]; char gScanFirstIp[16];
char gScanLastIp[16]; char gScanLastIp[16];
@ -14,13 +25,14 @@ variables
char fnSysvar[20]; // Filename of Sysvars char fnSysvar[20]; // Filename of Sysvars
char fnDbc[20]; // Filename of DBC char fnDbc[20]; // Filename of DBC
char name[20]; // Name of project char name[20]; // Name of project
dword ips[50]; // detected IPs
file f; file f;
byte gIpNets[long]; byte gIpNets[long];
char[16] gIpsSorted[long]; struct device gIpsSorted[long];
dword gScanFirst, gScanLast; dword gScanFirst, gScanLast;
//long i, ipN; word ADi, ADn, ADl;
} }
on preStart on preStart
@ -42,37 +54,221 @@ on start
if (gIps.Size() == 0) if (gIps.Size() == 0)
DetectDevices(); DetectDevices();
else else
MakeFiles(); MakeIpNets();
} }
void PutString(file f, char str[]) void PutString(file f, char str[])
{ {
f.PutString(str, strlen(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
/// <Step1>
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);
}
/// <Step1>
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);
}
/// <Step1>
void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap)
{
DetectDevicesNext();
}
/// <Step1>
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
/// <Step2>
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
/// <Step3>
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);
}
/// <Step3>
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);
}
/// <Step3>
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;
}
}
/// <Step3>
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
/// <Step4>
void MakeFiles() void MakeFiles()
{ {
MakeIpNets();
GenSysvars(); GenSysvars();
GenDbc(); GenDbc();
stop(); 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 // Generate the SysVars XML
/// <Step4>
void GenSysvars() void GenSysvars()
{ {
write("GenSysvars() -> %s", fnSysvar); write("GenSysvars() -> %s", fnSysvar);
@ -95,58 +291,92 @@ void GenSysvars()
for (long net : gIpNets) for (long net : gIpNets)
{ {
char netS[4]; byte nett;
ltoa(net, netS, 10); nett = net;
PutString(f, " <namespace name=\"Ethernet"); PutString(f, " <namespace name=\"Ethernet");
PutString(f, netS); PutString(f, nett);
PutString(f, "\" comment=\"Subnet: 192.168."); PutString(f, "\" comment=\"Subnet: 192.168.");
PutString(f, netS); PutString(f, nett);
PutString(f, ".\">\n"); PutString(f, ".\">\n");
for (long ipN : gIpsSorted) for (long ipN : gIpsSorted)
{ {
char ipS[16];
char ipSlast[4];
if (((ipN >> 16) & 0xFF) != net) if (((ipN >> 16) & 0xFF) != net)
continue; continue;
strncpy(ipS, gIpsSorted[ipN], 16); // copy IP address to local ipS write("GenSysvars: %s", gIpsSorted[ipN].Ip);
ltoa(ipN >> 24, ipSlast, 10); // convert the last byte (= first byte) to string
write("GenSysvars: %s", ipS);
PutString(f, " <namespace name=\"Client_"); PutString(f, " <namespace name=\"Client_");
//PutString(f, netS); //PutString(f, netS);
//PutString(f, "_"); //PutString(f, "_");
PutString(f, ipSlast); PutString(f, gIpsSorted[ipN].IpLsb);
PutString(f, "\" comment=\"Server with ip address '"); PutString(f, "\" comment=\"Server with ip address '");
PutString(f, ipS); PutString(f, gIpsSorted[ipN].Ip);
PutString(f, "'\">\n"); PutString(f, "'\">\n");
// Namespace Config
PutString(f, " <namespace name=\"Config\" comment=\"Configuration section for this server\">\n"); PutString(f, " <namespace name=\"Config\" comment=\"Configuration section for this server\">\n");
// IP
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"IP\" comment=\"The IP address of this server\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"string\" startValue=\""); PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"IP\" comment=\"The IP address of this server\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"string\" startValue=\"");
PutString(f, ipS); PutString(f, gIpsSorted[ipN].Ip);
PutString(f, "\" />\n"); PutString(f, "\" />\n");
// Intveral
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"ms\" name=\"Interval\" comment=\"The interval with which the device will be queried\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"100\" minValue=\"10\" minValuePhys=\"10\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n"); PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"ms\" name=\"Interval\" comment=\"The interval with which the device will be queried\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"100\" minValue=\"10\" minValuePhys=\"10\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n");
PutString(f, " </namespace>\n"); PutString(f, " </namespace>\n");
//Namespace Info
PutString(f, " <namespace name=\"Info\" comment=\"Some information about the device\">\n"); PutString(f, " <namespace name=\"Info\" comment=\"Some information about the device\">\n");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"SerialCode\" comment=\"The serial code of the server\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n"); // SerialCode
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"DeviceCode\" comment=\"The device code of the server\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n"); PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"SerialCode\" comment=\"The serial code of the server\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"Modules\" comment=\"The type and number of inputs of modules that are connected to the server\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"string\" />\n"); PutString(f, gIpsSorted[ipN].SerialCode);
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputRegisters\" comment=\"Number of input registers\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"123\" maxValuePhys=\"123\" />\n"); PutString(f, "\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputBits\" comment=\"Number of input bits\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"2000\" maxValuePhys=\"2000\" />\n"); // DeviceCode
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputRegisters\" comment=\"Number of output registers\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"123\" maxValuePhys=\"123\" />\n"); PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"DeviceCode\" comment=\"The device code of the server\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputBits\" comment=\"Number of output bits\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"0\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"2000\" maxValuePhys=\"2000\" />\n"); PutString(f, gIpsSorted[ipN].DeviceCode);
PutString(f, "\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n");
// Modules
gIpsSorted[ipN].DeviceIOs.Modules[strlen(gIpsSorted[ipN].DeviceIOs.Modules)] = 0;
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"Modules\" comment=\"The type and number of inputs of modules that are connected to the server\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"string\" startValue=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.Modules);
PutString(f, "\" />\n");
// InputRegisters
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"InputRegisters\" comment=\"Number of input registers\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.InputRegisters);
PutString(f, "\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"123\" maxValuePhys=\"123\" />\n");
// InputBits
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"InputBits\" comment=\"Number of input bits\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.InputBits);
PutString(f, "\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"2000\" maxValuePhys=\"2000\" />\n");
// OutputRegisters
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"OutputRegisters\" comment=\"Number of output registers\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.OutputRegisters);
PutString(f, "\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"123\" maxValuePhys=\"123\" />\n");
// OutputBits
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"true\" valueSequence=\"false\" unit=\"\" name=\"OutputBits\" comment=\"Number of output bits\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"int\" startValue=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.OutputBits);
PutString(f, "\" minValue=\"0\" minValuePhys=\"0\" maxValue=\"2000\" maxValuePhys=\"2000\" />\n");
PutString(f, " </namespace>\n"); PutString(f, " </namespace>\n");
// Namespace Data
PutString(f, " <namespace name=\"Data\" comment=\"The actual process image\">\n"); PutString(f, " <namespace name=\"Data\" comment=\"The actual process image\">\n");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputRegisters\" comment=\"The values of the input registers\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"data\" arrayLength=\"0\" />\n"); // InputRegisters
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputBits\" comment=\"The state of the input bits\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"data\" arrayLength=\"0\" />\n"); PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputRegisters\" comment=\"The values of the input registers\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"intarray\" arrayLength=\"");
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputRegisters\" comment=\"The values of the output registers. Write here and the values will be sent to the device\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"data\" arrayLength=\"0\" />\n"); PutString(f, gIpsSorted[ipN].DeviceIOs.InputRegisters);
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputBits\" comment=\"The state of the output bits. Write here and the values will be sent to the device\" bitcount=\"8\" isSigned=\"true\" encoding=\"65001\" type=\"data\" arrayLength=\"0\" />\n"); PutString(f, "\" />\n");
// InputBits
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"InputBits\" comment=\"The state of the input bits\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"intarray\" arrayLength=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.InputBits);
PutString(f, "\" />\n");
// OutputRegisters
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputRegisters\" comment=\"The values of the output registers. Write here and the values will be sent to the device\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"intarray\" arrayLength=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.OutputRegisters);
PutString(f, "\" />\n");
// OutputBits
PutString(f, " <variable anlyzLocal=\"2\" readOnly=\"false\" valueSequence=\"false\" unit=\"\" name=\"OutputBits\" comment=\"The state of the output bits. Write here and the values will be sent to the device\" bitcount=\"32\" isSigned=\"true\" encoding=\"65001\" type=\"intarray\" arrayLength=\"");
PutString(f, gIpsSorted[ipN].DeviceIOs.OutputBits);
PutString(f, "\" />\n");
PutString(f, " </namespace>\n"); PutString(f, " </namespace>\n");
PutString(f, " </namespace>\n"); PutString(f, " </namespace>\n");
} }
@ -160,6 +390,7 @@ void GenSysvars()
} }
// Generate the Database // Generate the Database
/// <Step4>
void GenDbc() void GenDbc()
{ {
write("GenDbc() -> %s", fnDbc); write("GenDbc() -> %s", fnDbc);
@ -201,19 +432,12 @@ void GenDbc()
for (long ipN : gIpsSorted) for (long ipN : gIpsSorted)
{ {
char ipS[16]; write("GenDbc: %s", gIpsSorted[ipN].Ip);
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);
PutString(f, " Client_"); PutString(f, " Client_");
//PutString(f, netS); //PutString(f, gIpsSorted[ipN].IpNet);
//PutString(f, "_"); //PutString(f, "_");
PutString(f, ipSlast); PutString(f, gIpsSorted[ipN].IpLsb);
} }
PutString(f, "\n\n\n\n"); PutString(f, "\n\n\n\n");
PutString(f, "BA_DEF_ BU_ \"NodeLayerModules\" STRING ;\n"); PutString(f, "BA_DEF_ BU_ \"NodeLayerModules\" STRING ;\n");
@ -230,66 +454,19 @@ void GenDbc()
f.Close(); 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 OnModbusWriteBitFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){}
void OnModbusWriteRegisterFailed(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 OnModbusWriteMasksFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){}
void OnModbusReadWriteRegistersFailed(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 OnModbusWriteBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){}
void OnModbusWriteRegistersFailed(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 OnModbusWriteBitSuccess(struct ModbusResConfirmSingle mbc){}
void OnModbusWriteRegisterSuccess(struct ModbusResConfirmSingle mbc){} void OnModbusWriteRegisterSuccess(struct ModbusResConfirmSingle mbc){}
void OnModbusWriteBitsSuccess(struct ModbusResConfirmMultiple mbc){} void OnModbusWriteBitsSuccess(struct ModbusResConfirmMultiple mbc){}

View file

@ -1,4 +1,4 @@
;CANoe Version |4|7|1|35761 MakeConfig ;CANoe Version |4|7|1|52129 MakeConfig
Version: 8.2.40 Build 40 Version: 8.2.40 Build 40
32 PRO 32 PRO
5 5
@ -1261,37 +1261,9 @@ Grafik-Fenster
237 237
0 0
0 0
1
0 0
0 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 0
1 1
1 1
@ -1462,7 +1434,7 @@ End_Of_Object VTraceFilterCfg 15
1 1
1 1
14 14
ver=2: FT FT FT FT FT FT ver=2: FF FT FT FT FT FT
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
2 2
0 0
@ -1475,7 +1447,7 @@ End_Of_Serialized_Data 14
6 6
1 1
14 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 End_Of_Serialized_Data 14
7 7
0 0
@ -1494,7 +1466,7 @@ End_Of_Serialized_Data 14
14 14
1 1
14 14
ver=3: FT FT FT FT ver=3: FF FT FT FT
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
15 15
0 0
@ -1516,29 +1488,29 @@ End_Of_Serialized_Data 14
22 22
1 1
14 14
ver=2: FT ver=2: FF
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
23 23
1 1
14 14
ver=2: FT ver=2: FF
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
24 24
1 1
14 14
ver=2: FT ver=2: FF
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
25 25
0 0
26 26
1 1
14 14
ver=2: FT ver=2: FF
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
27 27
1 1
14 14
ver=2: FT ver=2: FF
End_Of_Serialized_Data 14 End_Of_Serialized_Data 14
0 0
1 1
@ -2450,7 +2422,7 @@ VTNColumnData 16 Begin_Of_Object
0 0
End_Of_Object VTNColumnData 16 End_Of_Object VTNColumnData 16
End_Of_Object VTraceColumnConfiguration 15 End_Of_Object VTraceColumnConfiguration 15
1 2
0 0
VTraceControlFixedModeExpansionItems 15 Begin_Of_Object VTraceControlFixedModeExpansionItems 15 Begin_Of_Object
3 3
@ -2961,7 +2933,7 @@ End_Of_Object VGrMnBox 3
VDOLocalInfoStruct 3 Begin_Of_Object VDOLocalInfoStruct 3 Begin_Of_Object
3 3
1 1
53 59
VDAOBus 4 Begin_Of_Object VDAOBus 4 Begin_Of_Object
1 1
1 1
@ -3091,7 +3063,7 @@ VSimulinkModelViewerConfiguration 7 Begin_Of_Object
End_Of_Object VSimulinkModelViewerConfiguration 7 End_Of_Object VSimulinkModelViewerConfiguration 7
1 1
0 0
2714767912 706119883
0 0
NodeSignalPanelBustypeCount 0 NodeSignalPanelBustypeCount 0
End_Of_Object VSimulationNode 6 End_Of_Object VSimulationNode 6
@ -3129,7 +3101,7 @@ NULL
End_Of_Object VDOLocalInfoStruct 3 End_Of_Object VDOLocalInfoStruct 3
0.000000 0.000000
0 0 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 SS_BEGIN_COMMON_INFO
1 1
0 0
@ -3141,7 +3113,7 @@ Ethernet
11 11
1 1
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 SS_BEGIN_COMMON_INFO
1 1
3 3

View file

@ -26,22 +26,65 @@ on start
// Read serial code, additional stuff is done in OnModbusReceiveRegisters // Read serial code, additional stuff is done in OnModbusReceiveRegisters
ModbusReadRegisters(0x2011, 1); // This has to be done by MakeConfig to properly size the arrays
ModbusReadRegisters(0x2012, 1); //ModbusReadRegisters(0x2011, 1);
ModbusReadRegisters(0x2030, 65); //ModbusReadRegisters(0x2012, 1);
ModbusReadRegisters(0x2031, 64); //ModbusReadRegisters(0x2030, 65);
ModbusReadRegisters(0x2032, 64); //ModbusReadRegisters(0x2031, 64);
ModbusReadRegisters(0x2033, 63); //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 ---------------------------------------------------------------------- // Modbus events ----------------------------------------------------------------------
void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) 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) 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) 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 OnModbusReadWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap)
{ {
} }
void OnModbusWriteBitsFailed(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) 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) void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbr, byte bitStatus[], word numBits)
{ {
byte bitStatusOld[1968]; struct ModbusReqRead mbrq;
word i; word i;
long numBitsOld;
sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatusOld, numBitsOld); if (!gQueueAck.ContainsKey(mbr.Header.TxID))
if (numBitsOld != numBits)
{
sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatus, numBits);
return; return;
}
for (i = 0; i < numBits; i++) memcpy_n2h(mbrq, gQueueAck[mbr.Header.TxID].Buffer);
switch(mbrq.Address)
{ {
if (bitStatusOld[i] != bitStatus[i]) case 0x200: // set output bits
{ sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits");
sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits", bitStatus, numBits); 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; break;
}
} }
} }
@ -137,25 +146,17 @@ void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbr, word num
switch (mbrq.Address) switch (mbrq.Address)
{ {
case 0x2011: case 0x200: // set output registers
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::SerialCode = mbr.Data[0]; 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; break;
case 0x2012: case 0x000: // set output registers
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::DeviceCode = mbr.Data[0]; sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters");
break; for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++)
case 0x2030: @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputRegisters[i] = mbr.Data[i];
case 0x2031: sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters");
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);
break; break;
default: default:
// Not recognized // Not recognized
@ -183,11 +184,6 @@ void OnModbusWriteMasksSuccess(struct ModbusResConfirmMasks mbc)
// Key events ------------------------------------------------------------------------- // Key events -------------------------------------------------------------------------
on key 'n' // read the configuration
{
setTimerCyclic(gtRead, 1, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval);
}
on timer gtRead on timer gtRead
{ {
if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters > 0) 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 on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits
{ {
word firstBitAddr, count, i;
byte bitStatus[1968]; byte bitStatus[1968];
long numBytes;
sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bitStatus, numBytes); firstBitAddr = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2;
ModbusWriteBitsB(@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits, bitStatus); 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 on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters
{ {
/******************************************************word regValues[1968]; word count, i;
long numRegs; word regValues[123];
sysGetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", regValues, numRegs);
ModbusWriteRegisters(0, numRegs, regValues);*/ 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 '+' on key '+'
{ {
byte bla[16] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; word i;
sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bla, 16);
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 '-' on key '-'
{ {
byte bla[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; word i;
sysSetVariableData("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits", bla, 16);
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");
} }

View file

@ -1,29 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<systemvariables version="4"> <systemvariables version="4">
<namespace name="" comment=""> <namespace name="" comment="">
<namespace name="Ethernet1" comment="Subnet: 192.168.1.">
<namespace name="Client_2" comment="Server with ip address '192.168.1.2'">
<namespace name="Config" comment="Configuration section for this server">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="IP" comment="The IP address of this server" bitcount="8" isSigned="true" encoding="65001" type="string" startValue="192.168.1.2" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="ms" name="Interval" comment="The interval with which the device will be queried" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="100" minValue="10" minValuePhys="10" maxValue="10000" maxValuePhys="10000" />
</namespace>
<namespace name="Info" comment="Some information about the device">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputRegisters" comment="Number of input registers" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="Modules" comment="The type and number of inputs of modules that are connected to the server" bitcount="8" isSigned="true" encoding="65001" type="string" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="SerialCode" comment="The serial code of the server" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="DeviceCode" comment="The device code of the server" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputBits" comment="Number of input bits" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputBits" comment="Number of output bits" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputRegisters" comment="Number of output registers" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
</namespace>
<namespace name="Data" comment="The actual process image">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputRegisters" comment="The values of the input registers" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="1" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputBits" comment="The state of the input bits" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="2" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputBits" comment="The state of the output bits. Write here and the values will be sent to the device" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="16" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputRegisters" comment="The values of the output registers. Write here and the values will be sent to the device" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="1" />
</namespace>
</namespace>
</namespace>
<namespace name="Config" comment=""> <namespace name="Config" comment="">
<namespace name="Modbus" comment=""> <namespace name="Modbus" comment="">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="ms" name="RequestTimeout" comment="The maximum duration for a Modbus-UDP/-TCP request in milliseconds. After timeout a retransmission may be started (see MaxRetransmissionCount). Use `ping` to get the maximum latency to a device, double it and add 2-3 ms for processing." bitcount="32" isSigned="true" encoding="65001" type="int" startValue="5" minValue="1" minValuePhys="1" maxValue="1000" maxValuePhys="1000" /> <variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="ms" name="RequestTimeout" comment="The maximum duration for a Modbus-UDP/-TCP request in milliseconds. After timeout a retransmission may be started (see MaxRetransmissionCount). Use `ping` to get the maximum latency to a device, double it and add 2-3 ms for processing." bitcount="32" isSigned="true" encoding="65001" type="int" startValue="5" minValue="1" minValuePhys="1" maxValue="1000" maxValuePhys="1000" />
@ -34,5 +11,28 @@
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="AdapterIndex" comment="Index of network interface to use" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="2" minValue="1" minValuePhys="1" maxValue="20" maxValuePhys="20" /> <variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="AdapterIndex" comment="Index of network interface to use" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="2" minValue="1" minValuePhys="1" maxValue="20" maxValuePhys="20" />
</namespace> </namespace>
</namespace> </namespace>
<namespace name="Ethernet1" comment="Subnet: 192.168.1.">
<namespace name="Client_2" comment="Server with ip address '192.168.1.2'">
<namespace name="Config" comment="Configuration section for this server">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="IP" comment="The IP address of this server" bitcount="8" isSigned="true" encoding="65001" type="string" startValue="192.168.1.2" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="ms" name="Interval" comment="The interval with which the device will be queried" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="100" minValue="10" minValuePhys="10" maxValue="10000" maxValuePhys="10000" />
</namespace>
<namespace name="Info" comment="Some information about the device">
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="SerialCode" comment="The serial code of the server" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="750" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="DeviceCode" comment="The device code of the server" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="881" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="Modules" comment="The type and number of inputs of modules that are connected to the server" bitcount="8" isSigned="true" encoding="65001" type="string" startValue="DI2," />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="InputRegisters" comment="Number of input registers" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="InputBits" comment="Number of input bits" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="2" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="OutputRegisters" comment="Number of output registers" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
<variable anlyzLocal="2" readOnly="true" valueSequence="false" unit="" name="OutputBits" comment="Number of output bits" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
</namespace>
<namespace name="Data" comment="The actual process image">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputRegisters" comment="The values of the input registers" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="0" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputBits" comment="The state of the input bits" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="2" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputRegisters" comment="The values of the output registers. Write here and the values will be sent to the device" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="0" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputBits" comment="The state of the output bits. Write here and the values will be sent to the device" bitcount="32" isSigned="true" encoding="65001" type="intarray" arrayLength="0" />
</namespace>
</namespace>
</namespace>
</namespace> </namespace>
</systemvariables> </systemvariables>

View file

@ -455,6 +455,7 @@ void OnModbusReceiveConfirmRegistersException(struct ModbusApHeader mbap, enum M
/// <-OnModbusReceive> /// <-OnModbusReceive>
void OnModbusReceive(dword socket, long result, dword address, dword port, byte buffer[], dword size) void OnModbusReceive(dword socket, long result, dword address, dword port, byte buffer[], dword size)
{ {
//write("OnModbusReceive: size = %d", size);
if (result == 0) if (result == 0)
{ {
if (size == 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! if (!gQueueSent.ContainsKey(mbap.TxID)) // We don't wait for this message!
return; return;
//write("Received TxID: %d", mbap.TxID);
memcpy(gQueueAck[mbap.TxID], gQueueSent[mbap.TxID]); memcpy(gQueueAck[mbap.TxID], gQueueSent[mbap.TxID]);
gQueueSent.Remove(mbap.TxID); gQueueSent.Remove(mbap.TxID);
@ -679,7 +681,7 @@ on timer gtRobin
struct ModbusApHeader mbap; struct ModbusApHeader mbap;
enum ModbusRequestError reqError; 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 // First: check timeouts = packets that were sent in previous run and not removed by response
for (long TxID : gQueueSent) for (long TxID : gQueueSent)

View file

@ -1,18 +1,26 @@
/*@!Encoding:1252*/ /*@!Encoding:1252*/
variables
{
struct deviceIOs
{
byte InputRegisters;
word InputBits;
byte OutputRegisters;
word OutputBits;
char Modules[1024];
};
}
void SysvarInit() void SysvarInit()
{ {
sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", ""); sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", "");
} }
void ParseDeviceCode(word dev) void ParseDeviceCode(word dev, struct deviceIOs dios)
{ {
byte input; byte input;
byte numChannels; byte numChannels;
char modules[1024];
char module[10]; char module[10];
sysGetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules, elCount(modules));
if (dev & 0x8000) // Digital Module if (dev & 0x8000) // Digital Module
{ {
numChannels = (dev >> 8) & 0x007F; numChannels = (dev >> 8) & 0x007F;
@ -21,13 +29,13 @@ void ParseDeviceCode(word dev)
{ {
input = 1; input = 1;
strncpy(module, "DI%d,", elCount(module)); strncpy(module, "DI%d,", elCount(module));
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits += numChannels; dios.InputBits += numChannels;
} }
else if (dev & 0x0002) // Output Module else if (dev & 0x0002) // Output Module
{ {
input = 0; input = 0;
strncpy(module, "DO%d,", elCount(module)); strncpy(module, "DO%d,", elCount(module));
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits += numChannels; dios.OutputBits += numChannels;
} }
else // blööd else // blööd
{ {
@ -52,17 +60,15 @@ void ParseDeviceCode(word dev)
if (input) if (input)
{ {
strncpy(module, "AI%d,", elCount(module)); strncpy(module, "AI%d,", elCount(module));
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters += numChannels; dios.InputRegisters += numChannels;
} }
else else
{ {
strncpy(module, "AO%d,", elCount(module)); strncpy(module, "AO%d,", elCount(module));
@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters += numChannels; dios.OutputRegisters += numChannels;
} }
} }
snprintf(module, elCount(module), module, numChannels); snprintf(module, elCount(module), module, numChannels);
strncat(modules, module, elCount(modules)); strncat(dios.Modules, module, elCount(dios.Modules));
sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules);
writeLineEx(0, 1, "<%NODE_NAME%> 0x%X -> %s", dev, module);
} }

View file

@ -1,17 +1,17 @@
;CANoe Version |4|7|1|42337 modbus ;CANoe Version |4|7|1|42340 modbus
Version: 8.2.40 Build 40 Version: 8.2.40 Build 40
32 PRO 32 PRO
10 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 APPDIR Vector.CANoe.Debugger.DLL
Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null
Vector.CANoe.Debugger.DebuggerComponent Vector.CANoe.Debugger.DebuggerComponent
2 1
1.0.0 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 VGlobalConfiguration 1 Begin_Of_Object
17 17
VGlobalParameters 2 Begin_Of_Object VGlobalParameters 2 Begin_Of_Object
@ -67,6 +67,7 @@ DialogBegin
1 1
285 569 816 1103 285 569 816 1103
SymbolExplorerDialogBegin SymbolExplorerDialogBegin
1 1
HistoryBegin HistoryBegin
1 0 1 0
@ -1379,37 +1380,9 @@ Grafik-Fenster
237 237
0 0
0 0
1
0 0
0 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 0
1 1
1 1
@ -3910,7 +3883,7 @@ End_Of_Object VBoxRoot 15
End_Of_Object VDataBox 14 End_Of_Object VDataBox 14
1 1
6 6
7 14
VSysVarObject 14 Begin_Of_Object VSysVarObject 14 Begin_Of_Object
1 1
VHostSignal 15 Begin_Of_Object VHostSignal 15 Begin_Of_Object
@ -4163,7 +4136,259 @@ End_Of_Object VSysVarObject 14
1 8 2 0 0 16777215 1 8 2 0 0 16777215
-1000 1000 -1000 0 -1000 1000 -1000 0
[End_of_Item] [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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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<class_ValueObjectConfiguration::IConfiguredSysVar> 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 35 35
30 30
1 1 0 1 0 0 1 1 1 0 1 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 VDOLocalInfoStruct 3 Begin_Of_Object
3 3
1 1
171 175
VDAOBus 4 Begin_Of_Object VDAOBus 4 Begin_Of_Object
1 1
1 1
@ -4777,7 +5002,7 @@ VSimulinkModelViewerConfiguration 7 Begin_Of_Object
End_Of_Object VSimulinkModelViewerConfiguration 7 End_Of_Object VSimulinkModelViewerConfiguration 7
1 1
0 0
713110817 3058661840
0 0
NodeSignalPanelBustypeCount 0 NodeSignalPanelBustypeCount 0
End_Of_Object VSimulationNode 6 End_Of_Object VSimulationNode 6
@ -4810,7 +5035,7 @@ VBoxRoot 9 Begin_Of_Object
1 1
3 3
1 1 2 3 -1 -1 -8 -30 114 0 1146 491 1 1 2 3 -1 -1 -8 -30 114 0 1146 491
Ethernet Packet Builder
1 1
MDI_DOCK_INFO_END MDI_DOCK_INFO_END
@ -4887,8 +5112,106 @@ EOF_MBSSDATA
1 1
0 0 0 0
<IPPlugIn.PacketBuilder DefaultBusProtocolId="256" DefaultDestMacIdSelection="107" DefaultDestinationIPAddress="192 . 168 . 1 . 100" DefaultDestinationIPv6Address="0:0:0:0:0:0:0:0" DefaultDestinationMacId="FF:FF:FF:FF:FF:FF" DefaultDestinationPort="502" DefaultSourceIPAddress="192 . 168 . 1 . 10" DefaultSourceIPv6Address="0:0:0:0:0:0:0:0" DefaultSourceMacId="02:00:4C:4F:4F:50" DefaultSourcePort="2000" DefaultSrcMacIdSelection="1" Name="Ethernet Packet Builder"> <IPPlugIn.PacketBuilder DefaultBusProtocolId="256" DefaultDestMacIdSelection="107" DefaultDestinationIPAddress="192 . 168 . 1 . 100" DefaultDestinationIPv6Address="0:0:0:0:0:0:0:0" DefaultDestinationMacId="FF:FF:FF:FF:FF:FF" DefaultDestinationPort="502" DefaultSourceIPAddress="192 . 168 . 1 . 10" DefaultSourceIPv6Address="0:0:0:0:0:0:0:0" DefaultSourceMacId="02:00:4C:4F:4F:50" DefaultSourcePort="2000" DefaultSrcMacIdSelection="1" Name="Ethernet Packet Builder">
<IPPlugIn.VPersistentFrameWrapper AssignedChannelId="Eth 1" DestMacIdConfStateSel="111" FrameDescription="Read Coils 1-512" FrameIsValid="1" InitialPacketType="4" PDBData="5 0 1651797619 1 9 1 1651797619 1 5 1 1651797619 1 4 0 1651797619 1 11 0 1651797619 1 8 0 1651797619 1 3 0 1651797619 1 10 1 1651797619 1 3 1 1651797619 1 " RawFrameData=" 0-30-de- 7-9a-fd- 0-19-db-cb-83-dd- 8- 0-45- 0- 0-34- 0- 0- 0- 0-40- 6-f7-6f-c0-a8- 1- 1-c0-a8- 1- 3-d5-66- 1-f6- 0- 0- 0- 0- 0- 0- 0- 0-50- 0-fa-15-59- 9- 0- 0- 0- 2- 0- 0- 0- 6- 0- 1- 0- 0- 1-ff-" RawFrameLength="66" SrcMacIdConfStateSel="105" WlanAddr1MacIdConfStateSel="111" WlanAddr2MacIdConfStateSel="111" WlanAddr3MacIdConfStateSel="111" WlanAddr4MacIdConfStateSel="111"/> <IPPlugIn.VPersistentFrameWrapper AssignedChannelId="Eth 1" DestMacIdConfStateSel="111" FrameDescription="Read Coils 1-512" FrameIsValid="1" InitialPacketType="4" PDBData="3 0 1651797619 1 3 1 1651797619 1 10 1 1651797619 1 8 0 1651797619 1 11 0 1651797619 1 4 0 1651797619 1 5 0 1651797619 1 5 1 1651797619 1 9 1 1651797619 1 " RawFrameData=" 0-30-de- 7-9a-fd- 0-19-db-cb-83-dd- 8- 0-45- 0- 0-34- 0- 0- 0- 0-40- 6-f7-6f-c0-a8- 1- 1-c0-a8- 1- 3-d5-66- 1-f6- 0- 0- 0- 0- 0- 0- 0- 0-50- 0-fa-15-59- 9- 0- 0- 0- 2- 0- 0- 0- 6- 0- 1- 0- 0- 1-ff-" RawFrameLength="66" SrcMacIdConfStateSel="105" WlanAddr1MacIdConfStateSel="111" WlanAddr2MacIdConfStateSel="111" WlanAddr3MacIdConfStateSel="111" WlanAddr4MacIdConfStateSel="111"/>
<IPPlugIn.VPersistentFrameWrapper AssignedChannelId="Eth 1" DestMacIdConfStateSel="111" FrameDescription="" FrameIsValid="1" InitialPacketType="4" PDBData="3 0 1651797619 1 3 1 1651797619 1 10 1 1651797619 1 8 0 1651797619 1 11 0 1651797619 1 4 0 1651797619 1 5 0 1651797619 1 5 1 1651797619 1 9 1 1651797619 1 " RawFrameData=" 0-30-de- 7-9a-fd- 0-19-db-cb-83-dd- 8- 0-45- 0- 0-34- 1-6e-40- 0-80- 6-76- 1-c0-a8- 1- 1-c0-a8- 1- 3-d5-69- 1-f6-18-f0-66-10-dc-70-88-e2-50-18-fa-f0-73-bf- 0- 0- 0- 2- 0- 0- 0- 6- 0- 1- 0- 0- 1-ff-" RawFrameLength="66" SrcMacIdConfStateSel="111" WlanAddr1MacIdConfStateSel="111" WlanAddr2MacIdConfStateSel="111" WlanAddr3MacIdConfStateSel="111" WlanAddr4MacIdConfStateSel="111"/> <IPPlugIn.VPersistentFrameWrapper AssignedChannelId="Eth 1" DestMacIdConfStateSel="111" FrameDescription="" FrameIsValid="1" InitialPacketType="4" PDBData="5 0 1651797619 1 9 1 1651797619 1 5 1 1651797619 1 4 0 1651797619 1 11 0 1651797619 1 8 0 1651797619 1 3 0 1651797619 1 10 1 1651797619 1 3 1 1651797619 1 " RawFrameData=" 0-30-de- 7-9a-fd- 0-19-db-cb-83-dd- 8- 0-45- 0- 0-34- 1-6e-40- 0-80- 6-76- 1-c0-a8- 1- 1-c0-a8- 1- 3-d5-69- 1-f6-18-f0-66-10-dc-70-88-e2-50-18-fa-f0-73-bf- 0- 0- 0- 2- 0- 0- 0- 6- 0- 1- 0- 0- 1-ff-" RawFrameLength="66" SrcMacIdConfStateSel="111" WlanAddr1MacIdConfStateSel="111" WlanAddr2MacIdConfStateSel="111" WlanAddr3MacIdConfStateSel="111" WlanAddr4MacIdConfStateSel="111"/>
<IPPlugIn.SE id="102" intVal="0" key="1919247220"/>
<IPPlugIn.SE id="102" index="1" intVal="466" key="1919247220"/>
<IPPlugIn.SE id="102" index="2" intVal="0" key="1919247220"/>
<IPPlugIn.SE id="102" index="3" intVal="1188" key="1919247220"/>
<IPPlugIn.SE id="102" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="102" intVal="199" key="1936292453"/>
<IPPlugIn.SE id="102" intVal="437" key="1920231791"/>
<IPPlugIn.SE id="1004" intVal="1145393987" key="1952540511"/>
<IPPlugIn.SE id="1004" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" intVal="218" key="2003072104"/>
<IPPlugIn.SE id="1004" index="1" intVal="1397708114" key="1952540511"/>
<IPPlugIn.SE id="1004" index="1" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="1" intVal="156" key="2003072104"/>
<IPPlugIn.SE id="1004" index="2" intVal="1145394004" key="1952540511"/>
<IPPlugIn.SE id="1004" index="2" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="2" intVal="156" key="2003072104"/>
<IPPlugIn.SE id="1004" index="3" intVal="1347571540" key="1952540511"/>
<IPPlugIn.SE id="1004" index="3" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1005" index="18" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="19" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="20" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="1005" index="20" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="19" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="18" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1004" index="3" intVal="125" key="2003072104"/>
<IPPlugIn.SE id="1004" index="4" intVal="1397316165" key="1952540511"/>
<IPPlugIn.SE id="1004" index="4" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="4" intVal="108" key="2003072104"/>
<IPPlugIn.SE id="1004" index="5" intVal="1348029508" key="1952540511"/>
<IPPlugIn.SE id="1004" index="5" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="5" intVal="108" key="2003072104"/>
<IPPlugIn.SE id="1004" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="1004" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1004" intVal="-1" key="7499639"/>
<IPPlugIn.SE id="125" intVal="-1" key="7562604"/>
<IPPlugIn.SE id="102" index="1" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="102" index="1" intVal="163" key="1936292453"/>
<IPPlugIn.SE id="102" index="1" intVal="397" key="1920231791"/>
<IPPlugIn.SE id="1005" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="1005" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1005" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="1" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="1" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="2" index="1" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="2" index="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="2" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="2" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="3" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="3" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="4" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="4" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="5" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="5" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="6" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="6" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="7" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="7" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="8" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="8" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="9" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="9" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="3" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="1" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="3" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="4" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="5" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="6" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="7" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="8" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="9" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="10" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="11" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="10" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="10" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="11" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="11" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="1005" index="12" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="12" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="13" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="13" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="14" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="14" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="15" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="15" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="16" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="16" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="17" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="17" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="102" index="2" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="102" index="2" intVal="67" key="1936292453"/>
<IPPlugIn.SE id="102" index="2" intVal="164" key="1920231791"/>
<IPPlugIn.SE id="127" intVal="0" key="1651534958"/>
<IPPlugIn.SE id="1003" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="1003" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1003" intVal="0" key="2003072104"/>
<IPPlugIn.SE id="4" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="4" index="1" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" index="1" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="4" index="2" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" index="2" intVal="0" key="1702391908"/>
@ -4899,104 +5222,6 @@ EOF_MBSSDATA
<IPPlugIn.SE id="4" index="7" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" index="7" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="4" index="8" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" index="8" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="4" index="9" intVal="0" key="1702391908"/> <IPPlugIn.SE id="4" index="9" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1003" intVal="0" key="2003072104"/>
<IPPlugIn.SE id="1003" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1003" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="127" intVal="0" key="1651534958"/>
<IPPlugIn.SE id="3" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="1" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="102" index="2" intVal="164" key="1920231791"/>
<IPPlugIn.SE id="102" index="2" intVal="67" key="1936292453"/>
<IPPlugIn.SE id="102" index="2" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="3" index="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="3" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="4" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="5" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="6" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="7" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="8" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="9" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="10" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="11" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="1005" index="12" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="13" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="14" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="15" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="16" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="17" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="1005" index="17" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="16" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="15" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="14" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="13" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="12" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="11" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="10" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="3" index="10" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="3" index="11" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="2" index="1" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="2" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="3" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="4" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="5" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="6" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="7" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="8" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="9" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="9" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" index="8" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="7" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="6" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="5" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="4" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="3" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="2" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="2" index="2" intVal="0" key="1702391908"/>
<IPPlugIn.SE id="1005" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="1" intVal="1" key="1633907830"/>
<IPPlugIn.SE id="1005" index="1" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1005" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="125" intVal="-1" key="7562604"/>
<IPPlugIn.SE id="102" index="1" intVal="397" key="1920231791"/>
<IPPlugIn.SE id="102" index="1" intVal="163" key="1936292453"/>
<IPPlugIn.SE id="102" index="1" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1004" intVal="-1" key="7499639"/>
<IPPlugIn.SE id="1004" intVal="0" key="1886352248"/>
<IPPlugIn.SE id="1004" intVal="0" key="1886352249"/>
<IPPlugIn.SE id="1004" intVal="218" key="2003072104"/>
<IPPlugIn.SE id="1004" index="1" intVal="156" key="2003072104"/>
<IPPlugIn.SE id="1004" index="2" intVal="156" key="2003072104"/>
<IPPlugIn.SE id="1004" index="3" intVal="125" key="2003072104"/>
<IPPlugIn.SE id="1004" index="4" intVal="108" key="2003072104"/>
<IPPlugIn.SE id="1004" index="5" intVal="108" key="2003072104"/>
<IPPlugIn.SE id="1004" index="5" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="5" intVal="1348029508" key="1952540511"/>
<IPPlugIn.SE id="1004" index="4" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="4" intVal="1397316165" key="1952540511"/>
<IPPlugIn.SE id="1004" index="3" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="3" intVal="1347571540" key="1952540511"/>
<IPPlugIn.SE id="1004" index="2" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="2" intVal="1145394004" key="1952540511"/>
<IPPlugIn.SE id="1004" index="1" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" index="1" intVal="1397708114" key="1952540511"/>
<IPPlugIn.SE id="1004" intVal="1" key="1986622303"/>
<IPPlugIn.SE id="1004" intVal="1145393987" key="1952540511"/>
<IPPlugIn.SE id="102" intVal="437" key="1920231791"/>
<IPPlugIn.SE id="102" intVal="199" key="1936292453"/>
<IPPlugIn.SE id="102" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="102" intVal="0" key="1919247220"/>
<IPPlugIn.SE id="102" index="1" intVal="466" key="1919247220"/>
<IPPlugIn.SE id="102" index="2" intVal="0" key="1919247220"/>
<IPPlugIn.SE id="102" index="3" intVal="1188" key="1919247220"/>
<IPPlugIn.SE id="1005" index="18" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="18" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="19" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="19" intVal="0" key="1633907830"/>
<IPPlugIn.SE id="1005" index="20" intVal="1" key="1702391908"/>
<IPPlugIn.SE id="1005" index="20" intVal="1" key="1633907830"/>
</IPPlugIn.PacketBuilder> </IPPlugIn.PacketBuilder>
End_Of_Object VSSPlugInConfiguration 6 End_Of_Object VSSPlugInConfiguration 6
NULL NULL
@ -5032,7 +5257,7 @@ NULL
End_Of_Object VDOLocalInfoStruct 3 End_Of_Object VDOLocalInfoStruct 3
0.000000 0.000000
0 0 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 SS_BEGIN_COMMON_INFO
1 1
0 0
@ -5044,7 +5269,7 @@ Ether1
11 11
1 1
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 SS_BEGIN_COMMON_INFO
1 1
3 3
@ -5446,14 +5671,14 @@ SymbSelHeaderMgrBegin
SymbSelHeaderMgrEnd SymbSelHeaderMgrEnd
End End
Begin Begin
3 0 -1 3 0 31
3 3
Modbus Modbus
modbus modbus
Systemvariablen Systemvariablen
( 3 ( 1 ( 0 ) 0 ) 0 ) ( 3 ( 1 ( 1 ( 0 ) 2 ( 1 ( 0 ) 3 ( 0 ) 0 ) 3 ( 0 ) 0 ) 0 ) 0 )
SymbSelHeaderMgrBegin SymbSelHeaderMgrBegin
1 4 1 4
0 1 200 0 0 0 1 200 0 0

View file

@ -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";

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<systemvariables version="4">
<namespace name="" comment="">
<namespace name="Ethernet1" comment="">
<namespace name="Wago_3" comment="">
<namespace name="Config" comment="">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="IP" comment="comment" bitcount="8" isSigned="true" encoding="65001" type="string" startValue="192.168.1.3" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="ms" name="Interval" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="100" minValue="10" minValuePhys="10" maxValue="10000" maxValuePhys="10000" />
</namespace>
<namespace name="Info" comment="">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputRegisters" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="Modules" comment="" bitcount="8" isSigned="true" encoding="65001" type="string" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="SerialCode" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="DeviceCode" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="1" minValuePhys="1" maxValue="10000" maxValuePhys="10000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputBits" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputBits" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="2000" maxValuePhys="2000" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputRegisters" comment="" bitcount="32" isSigned="true" encoding="65001" type="int" startValue="0" minValue="0" minValuePhys="0" maxValue="123" maxValuePhys="123" />
</namespace>
<namespace name="Data" comment="">
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputBits" comment="" bitcount="8" isSigned="true" encoding="65001" type="data" arrayLength="0" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputBits" comment="" bitcount="8" isSigned="true" encoding="65001" type="data" arrayLength="0" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="InputRegisters" comment="" bitcount="8" isSigned="true" encoding="65001" type="data" arrayLength="0" />
<variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="OutputRegisters" comment="" bitcount="8" isSigned="true" encoding="65001" type="data" arrayLength="0" />
</namespace>
</namespace>
</namespace>
</namespace>
</systemvariables>