UNPKG

node-red-contrib-modbus

Version:

The all in one Modbus TCP and Serial contribution long term supported package for Node-RED.

3 lines (2 loc) 4.25 kB
module.exports=function(s){require("source-map-support").install();var n=require("./modbus-basics"),i=require("./core/modbus-core"),d=require("./core/modbus-io-core"),u=require("debug")("contribModbus:flex:getter");s.nodes.registerType("modbus-flex-getter",function(e){s.nodes.createNode(this,e),this.name=e.name,this.showStatusActivities=e.showStatusActivities,this.showErrors=e.showErrors,this.showWarnings=e.showWarnings,this.connection=null,this.useIOFile=e.useIOFile,this.ioFile=s.nodes.getNode(e.ioFile),this.useIOForPayload=e.useIOForPayload,this.logIOActivities=e.logIOActivities,this.emptyMsgOnFail=e.emptyMsgOnFail,this.keepMsgProperties=e.keepMsgProperties,this.internalDebugLog=u,this.verboseLogging=s.settings.verbose,this.delayOnStart=e.delayOnStart,this.startDelayTime=parseInt(e.startDelayTime)||10;var a,r=this,o=(r.bufferMessageList=new Map,r.INPUT_TIMEOUT_MILLISECONDS=1e3,r.delayOccured=!1,r.inputDelayTimer=null,n.setNodeStatusTo("waiting",r),s.nodes.getNode(e.server));function t(e){s.settings.verbose&&r.showWarnings&&r.warn("Flex-Getter -> "+e)}o&&(o.registerForModbus(r),n.initModbusClientEvents(r,o),r.onModbusReadDone=function(e,t){r.showStatusActivities&&n.setNodeStatusTo("reading done",r),r.send(d.buildMessageWithIO(r,e.data,e,t)),r.emit("modbusFlexGetterNodeDone")},r.errorProtocolMsg=function(e,t){r.showErrors&&n.logMsgError(r,e,t)},r.onModbusReadError=function(e,t){r.internalDebugLog(e.message);var s=i.getOriginalMessage(r.bufferMessageList,t);r.errorProtocolMsg(e,s),n.sendEmptyMsgOnFail(r,e,t),n.setModbusError(r,o,e,s),r.emit("modbusFlexGetterNodeError")},r.prepareMsg=function(e){return"string"==typeof e.payload&&(e.payload=JSON.parse(e.payload)),e.payload.fc=parseInt(e.payload.fc)||3,e.payload.unitid=parseInt(e.payload.unitid),e.payload.address=parseInt(e.payload.address)||0,e.payload.quantity=parseInt(e.payload.quantity)||1,e},r.isValidModbusMsg=function(e){var t=!0;return Number.isInteger(e.payload.fc)&&1<=e.payload.fc&&e.payload.fc<=4||(r.error("FC Not Valid",e),t&=!1),!t||Number.isInteger(e.payload.address)&&0<=e.payload.address&&e.payload.address<=65535||(r.error("Address Not Valid",e),t&=!1),!t||Number.isInteger(e.payload.quantity)&&1<=e.payload.quantity&&e.payload.quantity<=65535||(r.error("Quantity Not Valid",e),t&=!1),t},r.buildNewMessageObject=function(e,t){var s=i.getObjectId();return{topic:t.topic||e.id,messageId:s,payload:{value:t.payload.value||t.value,unitid:t.payload.unitid,fc:t.payload.fc,address:t.payload.address,quantity:t.payload.quantity,emptyMsgOnFail:e.emptyMsgOnFail,keepMsgProperties:e.keepMsgProperties,messageId:s}}},r.isReadyForInput=function(){return o.client&&o.isActive()&&r.delayOccured},r.isNotReadyForInput=function(){return!r.isReadyForInput()},r.resetInputDelayTimer=function(){r.inputDelayTimer&&(t("reset input delay timer node "+r.id),clearTimeout(r.inputDelayTimer)),r.inputDelayTimer=null,r.delayOccured=!1},r.initializeInputDelayTimer=function(){r.resetInputDelayTimer(),r.delayOnStart?(t("initialize input delay timer node "+r.id),r.inputDelayTimer=setTimeout(function(){r.delayOccured=!0},r.INPUT_TIMEOUT_MILLISECONDS*r.startDelayTime)):r.delayOccured=!0},r.initializeInputDelayTimer(),a=[],r.on("input",function(e){n.invalidPayloadIn(e)?t("Invalid message on input."):r.isNotReadyForInput()?t("Inject while node is not ready for input."):o.isInactive()?t("You sent an input to inactive client. Please use initial delay on start or send data more slowly."):(a.push(e),function e(){if(0===a.length)return void r.emit("modbusFlexGetterNodeDone");var t=a.shift();t=Object.assign({},t);try{var s,i=r.prepareMsg(t);r.isValidModbusMsg(i)?(s=r.buildNewMessageObject(r,i),r.bufferMessageList.set(s.messageId,n.buildNewMessage(r.keepMsgProperties,i,s)),o.emit("readModbus",s,r.onModbusReadDone,r.onModbusReadError)):(r.errorProtocolMsg(new Error("Invalid Modbus message"),t),n.sendEmptyMsgOnFail(r,new Error("Invalid Modbus message"),t))}catch(e){r.errorProtocolMsg(e,t),n.sendEmptyMsgOnFail(r,e,t)}e()}())}),r.on("close",function(e){r.resetInputDelayTimer(),n.setNodeStatusTo("closed",r),r.bufferMessageList.clear(),o.deregisterForModbus(r.id,e)}),r.showStatusActivities||n.setNodeDefaultStatus(r))})}; //# sourceMappingURL=maps/modbus-flex-getter.js.map