นี่คือโมดูล NodeJS ที่จะช่วยคุณประมวลผลข้อมูล Modbus โดยจะใช้ pdu เพื่อสร้าง PDU หลัก จากนั้นใช้การขนส่งเพื่อขยายส่วนที่เหลือ
นี่คือไฟล์ test.js
ปัจจุบันของฉัน มันสร้างไคลเอนต์และซ็อกเก็ตเครือข่ายเซิร์ฟเวอร์ และเซิร์ฟเวอร์ร้องขอคอยล์ทันทีที่ไคลเอนต์เชื่อมต่อ
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . server ( { debug : "server" } , ( connection ) => {
connection . readCoils ( { address : 5 , quantity : 8 } , ( err , info ) => {
console . log ( "response" , info . response . data ) ;
} ) ;
} ) . listen ( 12345 , ( ) => {
modbus . tcp . connect ( 12345 , { debug : "client" } , ( err , connection ) => {
connection . on ( "read-coils" , ( request , reply ) => {
reply ( null , [ 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 ] ) ;
} ) ;
} ) ;
} ) ;
หากต้องการเชื่อมต่อกับอุปกรณ์ Modbus ผ่าน TCP ให้ใช้:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . connect ( 502 , "134.2.56.231" , { debug : "automaton-2454" } , ( err , connection ) => {
// do something with connection
} ) ;
หากต้องการฟังการเชื่อมต่อผ่าน TCP ให้ใช้:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . server ( { debug : "server" } , ( connection ) => {
// do something with connection
} ) . listen ( 502 , ( ) => {
// ready
} ) ;
หากต้องการเชื่อมต่อกับอุปกรณ์ Modbus ผ่านพอร์ตอนุกรม ให้ใช้:
var modbus = require ( "modbus-stream" ) ;
modbus . serial . connect ( "/dev/ttyS123" , { debug : "automaton-123" } , ( err , connection ) => {
// do something with connection
} ) ;
หลังจากเชื่อมต่อแล้ว คุณสามารถส่งคำขอและฟังคำตอบได้
modbus . serial . connect ( "/dev/ttyS123" , { debug : "automaton-123" } , ( err , connection ) => {
if ( err ) throw err ;
connection . readCoils ( { address : 52 , quantity : 8 , extra : { unitId : 25 } } , ( err , res ) => {
if ( err ) throw err ;
console . log ( res ) ; // response
} )
} ) ;
ทุกวิธียอมรับตัว options
อ็อบเจ็กต์ซึ่งมีพารามิเตอร์เริ่มต้น (เช่น address = 0
) และการโทรกลับ ในกรณีที่คุณต้องการดูการตอบสนองจากอุปกรณ์ระยะไกล นี่คือรายการโค้ดฟังก์ชันที่รองรับและวิธีการที่เกี่ยวข้อง:
การอ่านฐาน
readCoils
( address = 0
quantity = 1
)readDiscreteInputs
( address = 0
quantity = 1
)readHoldingRegisters
( address = 0
quantity = 1
)readInputRegisters
( address = 0
quantity = 1
)การเขียนฐาน
writeSingleCoil
( address = 0
value = 0
)writeSingleRegister
( address = 0
value = <Buffer 0x00 0x00>
)writeMultipleCoils
( address = 0
values = []
)writeMultipleRegisters
( address = 0
values = [ <Buffer 0x00 0x00> ]
)บันทึกไฟล์
readFileRecord
( requests = []
)writeFileRecord
( requests = []
)FIFO
readFifoQueue
( address = 0
)ขั้นสูง
maskWriteRegister
( address = 0
และ andmask = 0xFFFF
, ormask = 0x0000
)readWriteMultipleRegisters
( read_address = 0
, read_quantity = 1
, write_address = 0
, values = [ <Buffer 0x00 0x00> ]
)readDeviceIdentification
( type = "BasicDeviceIdentification"
, id = "ProductName"
)readExceptionStatus
()getCommEventCounter
()getCommEventLog
()สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเหล่านี้ โปรดดูที่ที่เก็บ pdu ซึ่งใช้ในการสร้างแพ็กเก็ต
หากต้องการตอบกลับคำขอระยะไกล ให้ฟังเหตุการณ์
modbus . serial . connect ( "/dev/ttyS123" , {
// except "debug", everything else is the default for serial
baudRate : 9600 ,
dataBits : 8 ,
stopBits : 1 ,
parity : "none" ,
debug : "automaton-123"
} , ( err , connection ) => {
if ( err ) throw err ;
connection . events . on ( "read-coils" , ( req , reply ) => {
console . log ( req ) ; // request
// ...
return reply ( null , [ data ] ) ;
} )
} ) ;
มีกิจกรรมถ่ายทอดตั้งแต่การขนส่งจนถึงลำธาร คุณควรผูกผู้ฟังเหตุการณ์บางส่วนไว้ในกรณีที่การเชื่อมต่อหรืออุปกรณ์อนุกรมเกิดข้อผิดพลาดหรือเพิ่งปิดลง โปรดจำไว้ว่าใน NodeJS เหตุการณ์ข้อผิดพลาดที่ปล่อยออกมาโดยไม่มี Listener จะทำให้กระบวนการส่ง uncaughtException
close
) เหตุการณ์นี้จะถูกปล่อยออกมาเมื่อโมดูล serialport
ส่งเสียงเหตุการณ์ close
หรือเมื่อซ็อกเก็ตส่งเสียงเหตุการณ์ end
error
) เหตุการณ์นี้หากมีสิ่งใดเกิดขึ้นกับสตรีมที่สำคัญ เช่น ECONNRESET
หรือสิ่งที่คล้ายกัน