강좌 & 팁
글 수 2,412
2014.07.19 17:12:01 (*.134.169.166)
41660
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서버 샘플에 조금 많이 손을 대야 쓸수 있다는점과 클리이언트도 폴링방식으로 바꿔서 사용 해야 한다는점
꼭 기억하세요. ^^;
감사합니다.