Il s'agit d'un module NodeJS pour vous aider à traiter les données Modbus. Il utilise pdu pour construire la PDU principale, puis utilise des transports pour étendre le reste.
Ceci est mon fichier test.js
actuel. Il crée un socket réseau client et serveur et le serveur demande des bobines dès que le client se connecte.
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 ] ) ;
} ) ;
} ) ;
} ) ;
Pour vous connecter à un appareil Modbus via TCP, utilisez :
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . connect ( 502 , "134.2.56.231" , { debug : "automaton-2454" } , ( err , connection ) => {
// do something with connection
} ) ;
Pour écouter les connexions sur TCP, utilisez :
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . server ( { debug : "server" } , ( connection ) => {
// do something with connection
} ) . listen ( 502 , ( ) => {
// ready
} ) ;
Pour vous connecter à un périphérique Modbus via un port série, utilisez :
var modbus = require ( "modbus-stream" ) ;
modbus . serial . connect ( "/dev/ttyS123" , { debug : "automaton-123" } , ( err , connection ) => {
// do something with connection
} ) ;
Après avoir été connecté, vous pouvez envoyer des demandes et écouter les réponses.
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
} )
} ) ;
Chaque méthode accepte des options
d'objet qui ont des paramètres par défaut (comme address = 0
) et un rappel, au cas où vous souhaiteriez voir la réponse du périphérique distant. Voici une liste des codes de fonction pris en charge et des méthodes correspondantes :
Lectures de base
readCoils
( address = 0
, quantity = 1
)readDiscreteInputs
( address = 0
, quantity = 1
)readHoldingRegisters
( address = 0
, quantity = 1
)readInputRegisters
( address = 0
, quantity = 1
)Écritures de base
writeSingleCoil
( address = 0
, value = 0
)writeSingleRegister
( address = 0
, value = <Buffer 0x00 0x00>
)writeMultipleCoils
( address = 0
, values = []
)writeMultipleRegisters
( address = 0
, values = [ <Buffer 0x00 0x00> ]
)Enregistrements de fichiers
readFileRecord
( requests = []
)writeFileRecord
( requests = []
)FIFO
readFifoQueue
( address = 0
)Avancé
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
()Pour plus d'informations sur ces méthodes, consultez le référentiel pdu utilisé pour créer les paquets.
Pour répondre aux demandes à distance, écoutez les événements.
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 ] ) ;
} )
} ) ;
Il y a des événements propagés depuis les transports jusqu'au flux. Vous devez lier un écouteur d'événements au cas où la connexion ou le périphérique série se tromperait ou se fermerait simplement. N'oubliez pas que dans NodeJS, un événement d'erreur émis sans écouteur entraînera le processus à lancer une uncaughtException
.
close
) Cet événement est émis lorsque le module serialport
émet un événement close
ou lorsqu'un socket émet un événement end
.
error
) Cet événement si quelque chose arrive au flux sous-jacent, comme un ECONNRESET
ou quelque chose de similaire.