Dies ist ein NodeJS-Modul, das Sie bei der Verarbeitung von Modbus-Daten unterstützt. Es verwendet pdu, um die Kern-PDU zu erstellen, und verwendet dann Transporte, um den Rest zu erweitern.
Dies ist meine aktuelle test.js
Datei. Es erstellt einen Client- und einen Server-Netzwerk-Socket und der Server fordert Coils an, sobald der Client eine Verbindung herstellt.
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 ] ) ;
} ) ;
} ) ;
} ) ;
Um über TCP eine Verbindung zu einem Modbus-Gerät herzustellen, verwenden Sie:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . connect ( 502 , "134.2.56.231" , { debug : "automaton-2454" } , ( err , connection ) => {
// do something with connection
} ) ;
Um auf Verbindungen über TCP zu warten, verwenden Sie:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . server ( { debug : "server" } , ( connection ) => {
// do something with connection
} ) . listen ( 502 , ( ) => {
// ready
} ) ;
Um über einen seriellen Port eine Verbindung zu einem Modbus-Gerät herzustellen, verwenden Sie:
var modbus = require ( "modbus-stream" ) ;
modbus . serial . connect ( "/dev/ttyS123" , { debug : "automaton-123" } , ( err , connection ) => {
// do something with connection
} ) ;
Nachdem Sie eine Verbindung hergestellt haben, können Sie Anfragen senden und auf Antworten warten.
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
} )
} ) ;
Jede Methode akzeptiert options
mit Standardparametern (wie address = 0
) und einem Rückruf, falls Sie die Antwort vom Remote-Gerät sehen möchten. Hier ist eine Liste der unterstützten Funktionscodes und der entsprechenden Methoden:
Basislesungen
readCoils
( address = 0
, quantity = 1
)readDiscreteInputs
( address = 0
, quantity = 1
)readHoldingRegisters
( address = 0
, quantity = 1
)readInputRegisters
( address = 0
, quantity = 1
)Basis schreibt
writeSingleCoil
( address = 0
, value = 0
)writeSingleRegister
( address = 0
, value = <Buffer 0x00 0x00>
)writeMultipleCoils
( address = 0
, values = []
)writeMultipleRegisters
( address = 0
, values = [ <Buffer 0x00 0x00> ]
)Dateiaufzeichnungen
readFileRecord
( requests = []
)writeFileRecord
( requests = []
)FIFO
readFifoQueue
( address = 0
)Fortschrittlich
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
()Weitere Informationen zu diesen Methoden finden Sie im PDU-Repository, das zum Erstellen der Pakete verwendet wird.
Um auf Remote-Anfragen zu reagieren, achten Sie auf Ereignisse.
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 ] ) ;
} )
} ) ;
Es gibt Ereignisse, die sich von den Transporten bis zum Bach fortpflanzen. Sie sollten einen Ereignis-Listener binden, nur für den Fall, dass die Verbindung oder das serielle Gerät fehlerhaft ist oder einfach geschlossen wird. Denken Sie daran, dass in NodeJS ein ausgegebenes Fehlerereignis ohne Listener dazu führt, dass der Prozess eine uncaughtException
auslöst.
close
) Dieses Ereignis wird ausgegeben, wenn das serialport
-Modul ein close
ausgibt oder wenn ein Socket ein end
ausgibt.
error
) Dieses Ereignis tritt auf, wenn etwas mit dem zugrunde liegenden Stream passiert, etwa ein ECONNRESET
oder etwas Ähnliches.