init: function(debug){ thisdebug = debug; // thisdebug = 1; console.log('Starting io'); if(typeof __settings === 'undefined'){ console.log('settings undefined'); } // console.log('settings',settings.value); var myIO = __settings.value.io; var i = 0; for(i=0;i<myIO.length;i++){ if(myIO[i].enabled == 1){ if(myIO[i].ioType == 'TCP-MODMUX-AI8' || myIO[i].ioType == 'TCP-MODMUX-DIO8') { var ioTCPClient = new tcpClient.rmcTCP; ioTCPClient.init(function(err){ console.log('io error',err); }, myIO[i].ipAddress,myIO[i].port,0); console.log('loaded ioType',myIO[i].ioType); var ioModbus = new iomodbustcp.ioModbus(myIO[i].ioType, myIO[i].id); ioModbus.init(ioTCPClient,0); ioModbus.on('data',function(data){ pubIO.processData(data); }); var ioItem = {'id': myIO[i].id, 'io': ioModbus}; arrIO.push(ioItem); if(typeof pubIO.currentStatus[__settings.value.rtuId] === 'undefined'){ var currentStatus = {}; currentStatus.rtuAddress = __settings.value.rtuId; var id = myIO[i].id; // var obj = { id: myIO[i].id, ioType: myIO[i].ioType, rawData: '', data: {} }; currentStatus.io = {}; // currentStatus.io[id] = obj; pubIO.currentStatus[__settings.value.rtuId] = currentStatus; } if(typeof pubIO.currentStatus[__settings.value.rtuId].io[myIO[i].IOid] === 'undefined'){ var id = myIO[i].id; var obj = { id: myIO[i].id, ioType: myIO[i].ioType, rawData: [], data: {}, scaling: myIO[i].scaling, cofs: myIO[i].cofs }; // console.log('myIO[i]',myIO[i]); var io = {}; pubIO.currentStatus[__settings.value.rtuId].io[id] = obj; } } // if(myIO[i].ioType == 'GAR-FEP') // { // var ioRS232 = new rs232.rmcRS232(function(err){ // console.log('rs232 GAR-FEP error',err); // }); // ioRS232.init(myIO[i].commPort,myIO[i].baudRate,1); // var ioGARFEP = new iomodbusserial.ioModbusSerial(myIO[i].ioType, myIO[i].id); // ioGARFEP.init(ioRS232,0); // ioGARFEP.on('data',function(data){ // pubIO.processData(data); // }); // var ioItem = {'id': myIO[i].id, 'io': ioGARFEP}; // arrIO.push(ioItem); // } } } },
var sbModule = function() { var self = this; var thisdebug = 0; var myTCPClient; var pubIO = { arrCurrentStatus: [], ioTemplateStatus: function(){ ioStatus = { 'ID': 1, 'Start': '%1', 'VersionNumber': settings.version, 'SerialNumber': settings.rtuid, //ModbusReg = 1 'MessageID': 0, //ModbusReg = 2 'DateTime': 22351140, //ModbusReg = 3 'TxFlag': 1, //ModbusReg = 4 'Digitals': 0, //ModbusReg = 5 'DigitalsExt': 0, //ModbusReg = 6 'Analog0': 0, //ModbusReg = 7 'Analog1': 0, //ModbusReg = 8 'Analog2': 0, //ModbusReg = 9 'Analog3': 0, //ModbusReg = 10 'AnalogExt0': 0, //ModbusReg = 11 'AnalogExt1': 0, //ModbusReg = 12 'AnalogExt2': 0, //ModbusReg = 13 'AnalogExt3': 0, //ModbusReg = 14 'AnalogExt4': 0, //ModbusReg = 15 'AnalogExt5': 0, //ModbusReg = 16 'AnalogExt6': 0, //ModbusReg = 17 'AnalogExt7': 0, //ModbusReg = 18 'Counter0': 0, //ModbusReg = 19 'Counter1': 0, //ModbusReg = 20 'Counter2': 0, 'Counter3': 0, 'Counter4': 0, 'Counter5': 0, 'Counter6': 0, 'Counter7': 0, 'Battery': 0, 'Signal': 0, 'End': '*' } return ioStatus; }, init: function(debug){ thisdebug = debug; myIOModbusTCP_DIO8.on('data', function (data) { try { if(thisdebug == 1){ console.log('IO-myIOModbus data: ' + data.ResponseTo); } if(data.IOType == 'MODMUX-DIO8') { if (data.data.length == 12 && data.data[7] == 16) { //console.log('response to modbus write'); return; } var Address = data.data[6]; var i = 0; var bFound = 0; for (i = 0; i < pubIO.arrCurrentStatus.length; i++) { if (pubIO.arrCurrentStatus[i].ID == Address) { bFound = 1; break; } } if (bFound == 0) { var newIO = new pubIO.ioTemplateStatus(); newIO.ID = Address; pubIO.arrCurrentStatus.push(newIO); i = pubIO.arrCurrentStatus.length; } pubIO.arrCurrentStatus[i].Digitals = data.data[9]; pubIO.arrCurrentStatus[i].Digitals <<= 8; pubIO.arrCurrentStatus[i].Digitals += data.data[10]; pubIO.arrCurrentStatus[i].DigitalsExt = data.data[11]; pubIO.arrCurrentStatus[i].DigitalsExt <<= 8; pubIO.arrCurrentStatus[i].DigitalsExt += data.data[12]; //console.log('Digitals: ' + pubIO.arrCurrentStatus[i].Digitals); pubIO.arrCurrentStatus[i].Counter0 = data.data[13]; pubIO.arrCurrentStatus[i].Counter0 <<= 8; pubIO.arrCurrentStatus[i].Counter0 += data.data[14]; pubIO.arrCurrentStatus[i].Counter0 <<= 8; pubIO.arrCurrentStatus[i].Counter0 += data.data[15]; pubIO.arrCurrentStatus[i].Counter0 <<= 8; pubIO.arrCurrentStatus[i].Counter0 += data.data[16]; pubIO.arrCurrentStatus[i].Counter1 = data.data[17]; pubIO.arrCurrentStatus[i].Counter1 <<= 8; pubIO.arrCurrentStatus[i].Counter1 += data.data[18]; pubIO.arrCurrentStatus[i].Counter1 <<= 8; pubIO.arrCurrentStatus[i].Counter1 += data.data[19]; pubIO.arrCurrentStatus[i].Counter1 <<= 8; pubIO.arrCurrentStatus[i].Counter1 += data.data[20]; //arrCurrentStatus[i].Counter0 = (data.data[11]*256)+data.data[12]; //pubIO.arrCurrentStatus[i].Counter2 = (data.data[13]*256)+data.data[14]; }else{ console.log('io-Unknown IOType'); } } catch (e) { console.log('IO-myIOModbus error: ' + e); } }); myIOModbusTCP_AI8.on('data', function (data) { try { if(thisdebug == 1){ console.log('IO-myIOModbusTCP_AI8 data: ' + data.ResponseTo); } if(data.IOType == 'MODMUX-AI8') { //if (data.data.length == 12 && data.data[7] == 16) { // //console.log('response to modbus write'); // return; //} var Address = data.data[6]; var i = 0; var bFound = 0; for (i = 0; i < pubIO.arrCurrentStatus.length; i++) { if (pubIO.arrCurrentStatus[i].ID == Address) { bFound = 1; break; } } if (bFound == 0) { var newIO = new pubIO.ioTemplateStatus(); newIO.ID = Address; pubIO.arrCurrentStatus.push(newIO); i = pubIO.arrCurrentStatus.length; } pubIO.arrCurrentStatus[i].Analog0 = data.data[9]; pubIO.arrCurrentStatus[i].Analog0 <<= 8; pubIO.arrCurrentStatus[i].Analog0 += data.data[10]; pubIO.arrCurrentStatus[i].Analog1 = data.data[11]; pubIO.arrCurrentStatus[i].Analog1 <<= 8; pubIO.arrCurrentStatus[i].Analog1 += data.data[12]; //arrCurrentStatus[i].Counter0 = (data.data[11]*256)+data.data[12]; //pubIO.arrCurrentStatus[i].Counter2 = (data.data[13]*256)+data.data[14]; }else{ console.log('io-Unknown IOType'); } } catch (e) { console.log('IO-myIOModbus error: ' + e); } }); myIOModbusSerial_GARFEP.on('data', function (data) { try { if(thisdebug == 1){ console.log('IO-myIOModbusSerial_GARFEP data: ' + data.ResponseTo); } if(data.IOType == 'GAR-FEP') { //if (data.data.length == 12 && data.data[7] == 16) { // //console.log('response to modbus write'); // return; //} var Address = data.data[3]; var i = 0; var bFound = 0; for (i = 0; i < pubIO.arrCurrentStatus.length; i++) { if (pubIO.arrCurrentStatus[i].ID == Address) { bFound = 1; break; } } if (bFound == 0) { var newIO = new pubIO.ioTemplateStatus(); newIO.ID = Address; pubIO.arrCurrentStatus.push(newIO); i = pubIO.arrCurrentStatus.length - 1; } pubIO.arrCurrentStatus[i].Digitals = data.data[74]; pubIO.arrCurrentStatus[i].DigitalsExt = data.data[76]; // console.log(pubIO.arrCurrentStatus[i].Digitals); // console.log(pubIO.arrCurrentStatus[i].DigitalsExt); pubIO.arrCurrentStatus[i].Analog0 = data.data[51]; pubIO.arrCurrentStatus[i].Analog0 <<= 8; pubIO.arrCurrentStatus[i].Analog0 += data.data[50]; // console.log(pubIO.arrCurrentStatus[i].Analog0); pubIO.arrCurrentStatus[i].Analog1 = data.data[53]; pubIO.arrCurrentStatus[i].Analog1 <<= 8; pubIO.arrCurrentStatus[i].Analog1 += data.data[52]; // console.log(pubIO.arrCurrentStatus[i].Analog1); //arrCurrentStatus[i].Counter0 = (data.data[11]*256)+data.data[12]; //pubIO.arrCurrentStatus[i].Counter2 = (data.data[13]*256)+data.data[14]; }else{ console.log('io-Unknown IOType'); } } catch (e) { console.log('IO-myIOModbus error: ' + e); } }); }, getIOStatus: function(Address){ var i = 0; for(i=0;i<pubIO.arrCurrentStatus.length;i++){ if(pubIO.arrCurrentStatus[i].ID == Address){ return pubIO.arrCurrentStatus[i]; } } }, getModBusRegisterValue: function(Address,ModBusPos){ //console.log('Before ' + Address + ' ' + ModBusPos); var i = 0; for(i=0;i<pubIO.arrCurrentStatus.length;i++){ var ModbusAddress = parseInt(ModBusPos/100); ModBusPos = ModBusPos - (ModbusAddress *100); ModbusAddress++; //console.log('After: ' + ModbusAddress + ' ' + ModBusPos); if(pubIO.arrCurrentStatus[i].ID == ModbusAddress){ switch(ModBusPos){ case(0): //return 8; return pubIO.arrCurrentStatus[i].Digitals; case(2): return 88; //return pubIO.arrCurrentStatus[i].DigitalsExt; case(4): return 9; //return pubIO.arrCurrentStatus[i].Analog0; case(6): return 99; //return pubIO.arrCurrentStatus[i].Analog1; default : return 55; break; } return 75; //return pubIO.arrCurrentStatus[i]; } } }, WriteRegister: function(ModuleAddress,IOToWrite,ValueToWrite){ myIOModbusTCP_DIO8.WriteRegister(ModuleAddress,IOToWrite,ValueToWrite,0); //0 = Not permamnent }, on: function(strEvent,callbackFunction){ self.on(strEvent,function(data){ callbackFunction(data); }) } } //var myTCPClient_TestSlave = new tcpClient.rmcTCP; ////myTCPClient_AI8.init('192.168.1.8',502,0); //myTCPClient_TestSlave.init('127.0.0.1',2030,0); //Test chat to local ModbusSlave //var myIOModbusTCP_TestSlave = new iomodbustcp.ioModbus('MODMUX-AI8'); //myIOModbusTCP_TestSlave.init(myTCPClient_TestSlave,0); var myTCPClient_AI8 = new tcpClient.rmcTCP; myTCPClient_AI8.init('192.168.1.8',502,0); var myIOModbusTCP_AI8 = new iomodbustcp.ioModbus('MODMUX-AI8'); myIOModbusTCP_AI8.init(myTCPClient_AI8,0); var myTCPClient_DIO8 = new tcpClient.rmcTCP; myTCPClient_DIO8.init('192.168.1.9',502,0); var myIOModbusTCP_DIO8 = new iomodbustcp.ioModbus('MODMUX-DIO8'); myIOModbusTCP_DIO8.init(myTCPClient_DIO8,0); // console.log('RS232'); // var myrs232 = new rs232.rmcRS232; // myrs232.init(1); // var myIOModbusSerial_GARFEP = new iomodbusserial.ioModbusSerial('GAR-FEP'); // console.log('here2'); // myIOModbusSerial_GARFEP.init(myrs232,0); return pubIO; }