Este é um módulo NodeJS para ajudá-lo a processar dados modbus. Ele usa o PDU para construir o PDU principal e, em seguida, usa transportes para estender o restante.
Este é meu arquivo test.js atual. Ele cria um soquete de rede cliente e servidor e o servidor solicita bobinas assim que o cliente se conecta.
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 ] ) ;
} ) ;
} ) ;
} ) ; Para conectar-se a um dispositivo modbus via TCP, use:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . connect ( 502 , "134.2.56.231" , { debug : "automaton-2454" } , ( err , connection ) => {
// do something with connection
} ) ;Para escutar conexões via TCP, use:
var modbus = require ( "modbus-stream" ) ;
modbus . tcp . server ( { debug : "server" } , ( connection ) => {
// do something with connection
} ) . listen ( 502 , ( ) => {
// ready
} ) ;Para conectar-se a um dispositivo modbus através de uma porta serial, use:
var modbus = require ( "modbus-stream" ) ;
modbus . serial . connect ( "/dev/ttyS123" , { debug : "automaton-123" } , ( err , connection ) => {
// do something with connection
} ) ;Depois de se conectar, você pode enviar solicitações e ouvir as respostas.
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
} )
} ) ; Todo método aceita options de objeto que possuem parâmetros padrão (como address = 0 ) e um retorno de chamada, caso você queira ver a resposta do dispositivo remoto. Aqui está uma lista de códigos de função suportados e os métodos correspondentes:
Leituras básicas
readCoils ( address = 0 , quantity = 1 )readDiscreteInputs ( address = 0 , quantity = 1 )readHoldingRegisters ( address = 0 , quantity = 1 )readInputRegisters ( address = 0 , quantity = 1 )Gravações básicas
writeSingleCoil ( address = 0 , value = 0 )writeSingleRegister ( address = 0 , value = <Buffer 0x00 0x00> )writeMultipleCoils ( address = 0 , values = [] )writeMultipleRegisters ( address = 0 , values = [ <Buffer 0x00 0x00> ] )Registros de arquivo
readFileRecord ( requests = [] )writeFileRecord ( requests = [] )FIFO
readFifoQueue ( address = 0 )Avançado
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 ()Para obter mais informações sobre esses métodos, consulte o repositório pdu que é usado para construir os pacotes.
Para responder a solicitações remotas, ouça eventos.
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 ] ) ;
} )
} ) ; Existem eventos propagados dos transportes até o fluxo. Você deve vincular algum ouvinte de evento apenas no caso de erro de conexão ou dispositivo serial ou simplesmente fechar. Lembre-se de que no NodeJS, um evento de erro emitido sem um ouvinte fará com que o processo lance uma uncaughtException .
close ) Este evento é emitido quando o módulo serialport emite um evento close ou quando um soquete emite um evento end .
error ) Este evento se algo acontecer ao fluxo subjacente, como um ECONNRESET ou algo semelhante.