UNPKG

node-red-contrib-modbus

Version:

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

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