Use values from 0x1022..0x1025 to get the number of IOs
This commit is contained in:
parent
57ea11238f
commit
f04e31f35e
4 changed files with 38 additions and 24 deletions
|
@ -58,7 +58,7 @@ on preStart
|
||||||
strncpy(fnSysvar, "include/SysVars/generated.vsysvar", elCount(fnSysvar));
|
strncpy(fnSysvar, "include/SysVars/generated.vsysvar", elCount(fnSysvar));
|
||||||
strncpy(fnDbc, "include/DBC/generated.dbc", elCount(fnDbc));
|
strncpy(fnDbc, "include/DBC/generated.dbc", elCount(fnDbc));
|
||||||
|
|
||||||
OutputDebugLevel = Error;
|
OutputDebugLevel = Info;
|
||||||
}
|
}
|
||||||
|
|
||||||
on start
|
on start
|
||||||
|
@ -205,7 +205,7 @@ void AnalyzeDevices()
|
||||||
ADi = 0; // First IP address
|
ADi = 0; // First IP address
|
||||||
ADl = gIpsSorted.Size();
|
ADl = gIpsSorted.Size();
|
||||||
|
|
||||||
write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip);
|
writeLineEx(0, 1, "Analyzing %s", gIpsSorted[ips[ADi]].Ip);
|
||||||
gIpsSorted[ips[ADi]].Vendor = Wago;
|
gIpsSorted[ips[ADi]].Vendor = Wago;
|
||||||
|
|
||||||
if (gRemoteIP != INVALID_IP) // If we already do have a socket
|
if (gRemoteIP != INVALID_IP) // If we already do have a socket
|
||||||
|
@ -216,6 +216,10 @@ void AnalyzeDevices()
|
||||||
// read the important registers from the device
|
// read the important registers from the device
|
||||||
ModbusReadRegisters(0x2011, 1); // Serial Code
|
ModbusReadRegisters(0x2011, 1); // Serial Code
|
||||||
ModbusReadRegisters(0x2012, 1); // Device Code
|
ModbusReadRegisters(0x2012, 1); // Device Code
|
||||||
|
ModbusReadRegisters(0x1022, 1); // Number of AOs
|
||||||
|
ModbusReadRegisters(0x1023, 1); // Number of AIs
|
||||||
|
ModbusReadRegisters(0x1024, 1); // Number of DOs
|
||||||
|
ModbusReadRegisters(0x1025, 1); // Number of DIs
|
||||||
ModbusReadRegisters(0x2030, 65); // Connected IO 1
|
ModbusReadRegisters(0x2030, 65); // Connected IO 1
|
||||||
ModbusReadRegisters(0x2031, 64); // Connected IO 2
|
ModbusReadRegisters(0x2031, 64); // Connected IO 2
|
||||||
ModbusReadRegisters(0x2032, 64); // Connected IO 3
|
ModbusReadRegisters(0x2032, 64); // Connected IO 3
|
||||||
|
@ -225,6 +229,9 @@ void AnalyzeDevices()
|
||||||
/// <Step3>
|
/// <Step3>
|
||||||
void AnalyzeDevicesNext()
|
void AnalyzeDevicesNext()
|
||||||
{
|
{
|
||||||
|
gIpsSorted[ips[ADi]].DeviceIOs.Modules[strlen(gIpsSorted[ips[ADi]].DeviceIOs.Modules)-1] = 0;
|
||||||
|
writeEx(0, 1, ": AOs: %d, AIs: %d, DOs: %d, DIs: %d --> %s", gIpsSorted[ips[ADi]].DeviceIOs.OutputRegisters, gIpsSorted[ips[ADi]].DeviceIOs.InputRegisters, gIpsSorted[ips[ADi]].DeviceIOs.OutputBits, gIpsSorted[ips[ADi]].DeviceIOs.InputBits, gIpsSorted[ips[ADi]].DeviceIOs.Modules);
|
||||||
|
|
||||||
if (++ADi >= ADl) // we have analyzed all devices
|
if (++ADi >= ADl) // we have analyzed all devices
|
||||||
{
|
{
|
||||||
MakeFiles(); // go to Step4
|
MakeFiles(); // go to Step4
|
||||||
|
@ -233,9 +240,14 @@ void AnalyzeDevicesNext()
|
||||||
|
|
||||||
ADn = 0; // Zero message received
|
ADn = 0; // Zero message received
|
||||||
gRemoteIP = ips[ADi]; // Next IP address
|
gRemoteIP = ips[ADi]; // Next IP address
|
||||||
write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip);
|
writeLineEx(0, 1, "Analyzing %s", gIpsSorted[ips[ADi]].Ip);
|
||||||
|
gIpsSorted[ips[ADi]].Vendor = Wago;
|
||||||
ModbusReadRegisters(0x2011, 1); // Serial Code
|
ModbusReadRegisters(0x2011, 1); // Serial Code
|
||||||
ModbusReadRegisters(0x2012, 1); // Device Code
|
ModbusReadRegisters(0x2012, 1); // Device Code
|
||||||
|
ModbusReadRegisters(0x1022, 1); // Number of AOs
|
||||||
|
ModbusReadRegisters(0x1023, 1); // Number of AIs
|
||||||
|
ModbusReadRegisters(0x1024, 1); // Number of DOs
|
||||||
|
ModbusReadRegisters(0x1025, 1); // Number of DIs
|
||||||
ModbusReadRegisters(0x2030, 65); // Connected IO 1
|
ModbusReadRegisters(0x2030, 65); // Connected IO 1
|
||||||
ModbusReadRegisters(0x2031, 64); // Connected IO 2
|
ModbusReadRegisters(0x2031, 64); // Connected IO 2
|
||||||
ModbusReadRegisters(0x2032, 64); // Connected IO 3
|
ModbusReadRegisters(0x2032, 64); // Connected IO 3
|
||||||
|
@ -280,6 +292,18 @@ void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbres, struct
|
||||||
case 0x2012:
|
case 0x2012:
|
||||||
gIpsSorted[ips[ADi]].deviceCode = mbres.Data[0];
|
gIpsSorted[ips[ADi]].deviceCode = mbres.Data[0];
|
||||||
break;
|
break;
|
||||||
|
case 0x1022:
|
||||||
|
gIpsSorted[ips[ADi]].DeviceIOs.OutputRegisters = mbres.Data[0] / 16;
|
||||||
|
break;
|
||||||
|
case 0x1023:
|
||||||
|
gIpsSorted[ips[ADi]].DeviceIOs.InputRegisters = mbres.Data[0] / 16;
|
||||||
|
break;
|
||||||
|
case 0x1024:
|
||||||
|
gIpsSorted[ips[ADi]].DeviceIOs.OutputBits = mbres.Data[0];
|
||||||
|
break;
|
||||||
|
case 0x1025:
|
||||||
|
gIpsSorted[ips[ADi]].DeviceIOs.InputBits = mbres.Data[0];
|
||||||
|
break;
|
||||||
case 0x2030:
|
case 0x2030:
|
||||||
case 0x2031:
|
case 0x2031:
|
||||||
case 0x2032:
|
case 0x2032:
|
||||||
|
@ -293,7 +317,7 @@ void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbres, struct
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++ADn == 6) // If we received all registers (6 messages)
|
if (++ADn == 10) // If we received all registers (6 messages)
|
||||||
AnalyzeDevicesNext();
|
AnalyzeDevicesNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +412,6 @@ void GenSysvars()
|
||||||
PutString(gIpsSorted[ipN].DeviceCode);
|
PutString(gIpsSorted[ipN].DeviceCode);
|
||||||
PutString("\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n");
|
PutString("\" minValue=\"1\" minValuePhys=\"1\" maxValue=\"10000\" maxValuePhys=\"10000\" />\n");
|
||||||
// Modules
|
// Modules
|
||||||
gIpsSorted[ipN].DeviceIOs.Modules[strlen(gIpsSorted[ipN].DeviceIOs.Modules)-1] = 0;
|
|
||||||
PutString(" <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(" <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(gIpsSorted[ipN].DeviceIOs.Modules);
|
PutString(gIpsSorted[ipN].DeviceIOs.Modules);
|
||||||
PutString("\" />\n");
|
PutString("\" />\n");
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
includes
|
includes
|
||||||
{
|
{
|
||||||
#include "include\ModbusUdpClientCommon.cin"
|
#include "include\ModbusUdpClientCommon.cin"
|
||||||
#include "include\ModbusFunctions.cin"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
variables
|
variables
|
||||||
|
|
|
@ -91,7 +91,7 @@ void OnModbusReceiveBits(byte buffer[])
|
||||||
memcpy_n2h(mbres, buffer);
|
memcpy_n2h(mbres, buffer);
|
||||||
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Received %d bits from 0x%04X", mbreq.Count, mbreq.Address);
|
writeDbg(MbInfo, "Received %d bits from 0x%04X", mbreq.Count, mbreq.Address);
|
||||||
|
|
||||||
for (i = 0; i < mbres.ByteCount; i++)
|
for (i = 0; i < mbres.ByteCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -145,7 +145,7 @@ void OnModbusReceiveRegisters(byte buffer[])
|
||||||
memcpy_n2h(mbres, buffer);
|
memcpy_n2h(mbres, buffer);
|
||||||
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Received %d registers from 0x%04X", mbreq.Count, mbreq.Address);
|
writeDbg(MbInfo, "Received %d registers from 0x%04X", mbreq.Count, mbreq.Address);
|
||||||
|
|
||||||
OnModbusReadRegistersSuccess(mbres, mbreq);
|
OnModbusReadRegistersSuccess(mbres, mbreq);
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ void OnModbusConfirmBit(byte buffer[])
|
||||||
|
|
||||||
memcpy_n2h(mbc, buffer);
|
memcpy_n2h(mbc, buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Set bit at 0x%04X to %d", mbc.Address, mbc.Value);
|
writeDbg(MbInfo, "Set bit at 0x%04X to %d", mbc.Address, mbc.Value);
|
||||||
|
|
||||||
OnModbusWriteBitSuccess(mbc);
|
OnModbusWriteBitSuccess(mbc);
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ void OnModbusConfirmRegister(byte buffer[])
|
||||||
|
|
||||||
memcpy_n2h(mbc, buffer);
|
memcpy_n2h(mbc, buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Set register at 0x%04X to %d", mbc.Address, mbc.Value);
|
writeDbg(MbInfo, "Set register at 0x%04X to %d", mbc.Address, mbc.Value);
|
||||||
|
|
||||||
OnModbusWriteRegisterSuccess(mbc);
|
OnModbusWriteRegisterSuccess(mbc);
|
||||||
}
|
}
|
||||||
|
@ -328,7 +328,7 @@ void OnModbusConfirmBits(byte buffer[])
|
||||||
|
|
||||||
memcpy_n2h(mbc, buffer);
|
memcpy_n2h(mbc, buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Updated &d bits at 0x%04X", mbc.Count, mbc.Address);
|
writeDbg(MbInfo, "Updated &d bits at 0x%04X", mbc.Count, mbc.Address);
|
||||||
|
|
||||||
OnModbusWriteBitsSuccess(mbc);
|
OnModbusWriteBitsSuccess(mbc);
|
||||||
}
|
}
|
||||||
|
@ -381,7 +381,7 @@ void OnModbusConfirmRegisters(byte buffer[])
|
||||||
|
|
||||||
memcpy_n2h(mbc, buffer);
|
memcpy_n2h(mbc, buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Updated &d registers at 0x%04X", mbc.Count, mbc.Address);
|
writeDbg(MbInfo, "Updated &d registers at 0x%04X", mbc.Count, mbc.Address);
|
||||||
|
|
||||||
OnModbusWriteRegistersSuccess(mbc);
|
OnModbusWriteRegistersSuccess(mbc);
|
||||||
}
|
}
|
||||||
|
@ -425,7 +425,7 @@ void OnModbusConfirmMasks(byte buffer[])
|
||||||
|
|
||||||
memcpy_n2h(mbc, buffer);
|
memcpy_n2h(mbc, buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Applied masks at 0x%04X", mbc.Address);
|
writeDbg(MbInfo, "Applied masks at 0x%04X", mbc.Address);
|
||||||
|
|
||||||
OnModbusWriteMasksSuccess(mbc);
|
OnModbusWriteMasksSuccess(mbc);
|
||||||
}
|
}
|
||||||
|
@ -481,7 +481,7 @@ void OnModbusReceiveConfirmRegisters(byte buffer[])
|
||||||
memcpy_n2h(mbres, buffer);
|
memcpy_n2h(mbres, buffer);
|
||||||
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
||||||
|
|
||||||
writeDbg(MbDebug, "Wrote some registers and received %d registers from 0x%04X", mbreq.Count, mbreq.Address);
|
writeDbg(MbInfo, "Wrote some registers and received %d registers from 0x%04X", mbreq.Count, mbreq.Address);
|
||||||
|
|
||||||
OnModbusReadRegistersSuccess(mbres, mbreq);
|
OnModbusReadRegistersSuccess(mbres, mbreq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,13 +35,11 @@ void ParseDeviceCode(word dev, enum Vendor vendor, struct deviceIOs dios)
|
||||||
{
|
{
|
||||||
input = 1;
|
input = 1;
|
||||||
strncpy(module, "DI%d,", elCount(module));
|
strncpy(module, "DI%d,", elCount(module));
|
||||||
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));
|
||||||
dios.OutputBits += numChannels;
|
|
||||||
}
|
}
|
||||||
else // blööd
|
else // blööd
|
||||||
{
|
{
|
||||||
|
@ -55,8 +53,8 @@ void ParseDeviceCode(word dev, enum Vendor vendor, struct deviceIOs dios)
|
||||||
{
|
{
|
||||||
case 881: // devices that have no inputs/outputs
|
case 881: // devices that have no inputs/outputs
|
||||||
return;
|
return;
|
||||||
case 477: // devices that have 2 outputs
|
case 477: // devices that have 2 inputs
|
||||||
input = 0;
|
input = 1;
|
||||||
numChannels = 2;
|
numChannels = 2;
|
||||||
break;
|
break;
|
||||||
default: // unknown device. Ouch!
|
default: // unknown device. Ouch!
|
||||||
|
@ -64,15 +62,9 @@ void ParseDeviceCode(word dev, enum Vendor vendor, struct deviceIOs dios)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (input)
|
if (input)
|
||||||
{
|
|
||||||
strncpy(module, "AI%d,", elCount(module));
|
strncpy(module, "AI%d,", elCount(module));
|
||||||
dios.InputRegisters += numChannels;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
strncpy(module, "AO%d,", elCount(module));
|
strncpy(module, "AO%d,", elCount(module));
|
||||||
dios.OutputRegisters += numChannels;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break; // switch(vendor)
|
break; // switch(vendor)
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue