Jonny007-MKD
9dc7ffd47d
MakeConfig.can Added ModbusClientCommon.cin Introduced different functions for ModbusFuncCode 0x01 and 0x02. B&R handles them differently
72 lines
1.6 KiB
Plaintext
72 lines
1.6 KiB
Plaintext
/*@!Encoding:1252*/
|
|
variables
|
|
{
|
|
struct deviceIOs
|
|
{
|
|
byte InputRegisters;
|
|
word InputBits;
|
|
byte OutputRegisters;
|
|
word OutputBits;
|
|
char Modules[1024];
|
|
};
|
|
}
|
|
|
|
void ParseDeviceCode(word dev, enum Vendor vendor, struct deviceIOs dios)
|
|
{
|
|
byte input;
|
|
byte numChannels;
|
|
char module[10];
|
|
|
|
switch(vendor)
|
|
{
|
|
case Wago: // if this is a Wago device
|
|
|
|
if (dev & 0x8000) // Digital Module
|
|
{
|
|
numChannels = (dev >> 8) & 0x007F;
|
|
|
|
if (dev & 0x0001) // Input Module
|
|
{
|
|
input = 1;
|
|
strncpy(module, "DI%d,", elCount(module));
|
|
}
|
|
else if (dev & 0x0002) // Output Module
|
|
{
|
|
input = 0;
|
|
strncpy(module, "DO%d,", elCount(module));
|
|
}
|
|
else // blööd
|
|
{
|
|
writeDbg(AlgoError, "ParseDeviceCode: Device code 0x%X cannot be decoded", dev);
|
|
OnModbusClientPanics(DeviceCodeUnknown);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (dev)
|
|
{
|
|
case 881: // devices that have no inputs/outputs
|
|
return;
|
|
case 477: // devices that have 2 inputs
|
|
input = 1;
|
|
numChannels = 2;
|
|
break;
|
|
default: // unknown device. Ouch!
|
|
writeDbg(AlgoInfo, "Connected device: 750-%d", dev);
|
|
return;
|
|
}
|
|
if (input)
|
|
strncpy(module, "AI%d,", elCount(module));
|
|
else
|
|
strncpy(module, "AO%d,", elCount(module));
|
|
}
|
|
break; // switch(vendor)
|
|
default:
|
|
writeDbg(AlgoError, "ParseDeviceCode: Unknown vendor id: %d", vendor);
|
|
OnModbusClientPanics(VendorIdUnknown);
|
|
return;
|
|
}
|
|
|
|
snprintf(module, elCount(module), module, numChannels);
|
|
strncat(dios.Modules, module, elCount(dios.Modules));
|
|
} |