modbus클라이언트(master)만들기

저번 시간에는 modbus서버를 만들었고 이번시간은  클라이언트를 만들어 보겠습니다.
소스는 모듈안에 있는 소스를 그대로 쓰겠습니다. 별로 바꾸거나 추가 할 것이 없어서... ^^;


modbus클라이언트(master)샘플

클라이언트 소스는 Read Input Registers에 있는 시작 번지 0번부터 50개를 가져오는 샘플입니다.
Function Code는 4이고, 번지대는 3X입니다.

// 'RIR' contains the "Function Code" that we are going to invoke on the remote device
var RIR = require('modbus-stack').FUNCTION_CODES.READ_INPUT_REGISTERS;

// IP and port of the MODBUS slave, default port is 502
var client = require('modbus-stack/client').createClient(502, '127.0.0.1');

// 'req' is an instance of the low-level `ModbusRequestStack` class
var req = client.request(RIR, // Function Code: 4  Read Input Registers -> 3XXXX번대
                         0,    // Start at address 0  시작번지
                         50);  // Read 50 contiguous registers from 0  가져올 갯수

// 'response' is emitted after the entire contents of the response has been received.
req.on('response', function(registers) {
  // An Array of length 50 filled with Numbers of the current registers.
  console.log(registers);
  client.end();
});


modbus클라이언트(master)실행

저번 시간에 만들어 놓았던 서버를 실행 시킵니다.
그다음, 클라이언트를 실행 시키면 아래와 같이 출력 됩니다.

D:\node_modbus>node mod_clicnt.js
[ 0,
  1,
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12,
  13,
  14,
  15,
  16,
  17,
  18,
  19,
  20,
  21,
  22,
  23,
  24,
  25,
  26,
  27,
  28,
  29,
  30,
  31,
  32,
  33,
  34,
  35,
  36,
  37,
  38,
  39,
  40,
  41,
  42,
  43,
  44,
  45,
  46,
  47,
  48,
  49,
  byteLength: 100,
  functionCode: 4 ]


모드버스의 한개의 어드레스는 word, 즉 2byte씩 이므로 바이트 길이는 100byte가 됩니다.

아쉽게도 modbus서버 샘플은 자기 번지값 만을 주도록 되어 있고, 값을 셋팅 할 수 있게는 안되어 있습니다.

modbus서버 샘플에 조금 많이 손을 대야 쓸수 있다는점과 클리이언트도 폴링방식으로 바꿔서 사용 해야 한다는점

꼭 기억하세요. ^^;


감사합니다.