/*@!Encoding:1252*/ void ParseDeviceCode(word dev) { byte input; byte numChannels; char modules[1024]; char module[10]; char templ[10]; sysGetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules, elCount(modules)); if (dev & 0x8000) // Digital Module { numChannels = (dev >> 8) & 0x007F; if (dev & 0x0001) // Input Module { input = 1; strncpy(templ, "DI%d,", elCount(templ)); @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits += numChannels; } else if (dev & 0x0002) // Output Module { input = 0; strncpy(templ, "DO%d,", elCount(templ)); @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits += numChannels; } else // blööd { writeLineEx(0, 3, "<%NODE_NAME%> Device code 0x%X cannot be decoded", dev); runError(1003, 1); } snprintf(module, elCount(module), templ, numChannels); strncat(modules, module, elCount(modules)); sysSetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info", "Modules", modules); writeLineEx(0, 1, "<%NODE_NAME%> 0x%X - %s", dev, module); } else { switch (dev) { case 881: // devices that have no inputs/outputs return; case 477: // devices that have 2 outputs input = 0; numChannels = 2; break; default: // unknown device. Ouch! writeLineEx(0, 2, "<%NODE_NAME%> Connected device: 750-%X", dev); return; } if (input) { strncpy(templ, "AI%d,", elCount(templ)); @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters += numChannels; } else { strncpy(templ, "AO%d,", elCount(templ)); @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters += numChannels; } } }