これは、Modbus データの処理に役立つ NodeJS モジュールです。 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 ] ) ;
} ) ;
} ) ;
} ) ;
TCP 経由で Modbus デバイスに接続するには、次を使用します。
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
} )
} ) ;
すべてのメソッドは、デフォルトのパラメータ ( address = 0
など) と、リモート デバイスからの応答を確認したい場合に備えたコールバックを持つオブジェクトoptions
を受け入れます。サポートされている関数コードと対応するメソッドのリストは次のとおりです。
ベースリード
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 では、リスナーなしでエラー イベントが発行されると、プロセスでuncaughtException
がスローされることに注意してください。
close
)このイベントは、 serialport
モジュールがclose
イベントを発行するとき、またはソケットがend
イベントを発行するときに発行されます。
error
) ECONNRESET
など、基礎となるストリームに何かが発生した場合にこのイベントが発生します。