[{"id":"de082ac2.4b8bf8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"31fa4a86.128056","type":"tcp in","z":"de082ac2.4b8bf8","name":"tcp.modbusmsg","server":"server","host":"","port":"502","datamode":"stream","datatype":"buffer","newline":"","topic":"","base64":false,"x":140,"y":60,"wires":[["22ff3060.54da6","24b6fd87.ada872","2945260c.aa942a"]]},{"id":"22ff3060.54da6","type":"function","z":"de082ac2.4b8bf8","name":"TCP_TO_RTU","func":"var A = [8];\nA[0]= msg.payload[6];\nA[1]= msg.payload[7];\nA[2]= msg.payload[8];\nA[3]= msg.payload[9];\nA[4]= msg.payload[10];\nA[5]= msg.payload[11];\n\n\n// Compute the MODBUS RTU CRC\n var crc = 0xFFFF;\n \n for (var pos = 0; pos < 6; pos++) \n {\n crc ^= A[pos]; // XOR byte into least sig. byte of crc\n \n for (var i = 8; i !== 0; i--) { // Loop over each bit\n if ((crc & 0x0001) !== 0) { // If the LSB is set\n crc >>= 1; // Shift right and XOR 0xA001\n crc ^= 0xA001;\n }\n else // Else LSB is not set\n crc >>= 1; // Just shift right\n }\n }\n var TempS = crc.toString(16);\n\n A[7] = parseInt(TempS.substring(0,2),16);\n A[6] = parseInt(TempS.substring(2,4),16);\nvar buf = new Buffer(A);\nmsg.payload = buf;\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":60,"wires":[["7e62bbbc.bd8ea4"]],"outputLabels":["XO","YO"]},{"id":"afc3df8f.e537a","type":"tcp out","z":"de082ac2.4b8bf8","host":"127.0.0.1","port":"502","beserver":"reply","base64":false,"end":false,"name":"","x":970,"y":60,"wires":[]},{"id":"7e62bbbc.bd8ea4","type":"serial request","z":"de082ac2.4b8bf8","name":"","serial":"1c326b00.95f945","x":530,"y":60,"wires":[["db79ee80.1d792"]]},{"id":"24b6fd87.ada872","type":"function","z":"de082ac2.4b8bf8","name":"Transc_ID","func":"var Transc = [2];\nTransc[0]= msg.payload[0];\nTransc[1]= msg.payload[1];\nmsg.payload = Transc;\nglobal.set('Transc_ID', Transc);\nreturn msg;","outputs":0,"noerr":0,"x":350,"y":100,"wires":[],"icon":"node-red/batch.svg"},{"id":"2945260c.aa942a","type":"function","z":"de082ac2.4b8bf8","name":"Protocol_ID","func":"var temp = [2];\ntemp[0]= msg.payload[2];\ntemp[1]= msg.payload[3];\nmsg.payload = temp;\nglobal.set('Protocol_ID', temp);\nreturn msg;","outputs":0,"noerr":0,"x":350,"y":140,"wires":[],"icon":"node-red/batch.svg"},{"id":"db79ee80.1d792","type":"function","z":"de082ac2.4b8bf8","name":"ReComposeTCP","func":"var tempLength = msg.payload.length - 2;\nvar A = [];\nA[0] = global.get('Transc_ID')[0];\nA[1] = global.get('Transc_ID')[1];\nA[2] = global.get('Protocol_ID')[0];\nA[3] = global.get('Protocol_ID')[1];\nA[4] = 0;\nA[5] = tempLength;\n for (var pos = 6; pos < tempLength+6; pos++) \n {\n A[pos]= msg.payload[pos-6];\n }\nmsg.payload = new Buffer(A);\nreturn msg;","outputs":1,"noerr":0,"x":730,"y":60,"wires":[["afc3df8f.e537a"]]},{"id":"1c326b00.95f945","type":"serial-port","z":"","serialport":"COM4","serialbaud":"9600","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"1000","bin":"bin","out":"time","addchar":"","responsetimeout":"1000"}]