هذه وحدة 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 = []
)يصرف أولاً
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، سيؤدي حدث الخطأ المنبعث بدون مستمع إلى قيام العملية بطرح uncaughtException
.
close
) يُطلق هذا الحدث عندما تُصدر وحدة serialport
حدثًا close
أو عندما يُصدر مأخذ التوصيل حدثًا end
.
error
) هذا الحدث إذا حدث شيء ما للتيار الأساسي، مثل ECONNRESET
أو شيء مشابه.