modbus서버(slave)만들기

node.js 모듈에 modbus가 있어서 강좌로 올려 봅니다.

modbus프로토콜에 대해서는 저희 강좌에 올린 글도 있고 구글에서 검색해 보면 많은 내용이 있기때문에

굳이 설명을 안하고 넘어 가겠습니다. 


저는 modbus프로토콜을 가끔 사용 합니다. 처음 사용 할때 modbus서버(Slave)프로그램을 구하지 못해

애를 먹은 적이 있었습니다.

만든 modbus클라이언트(Master)가 맞는지 틀린지 알려면 modbus서버에 붙여 확인을 해야하는데 그런

프로그램을 구할려면 라이센스를 사던가 아니면 평가판으로 밖에 할 수 없었습니다.


잠시 잠까이라면 평가판으로 잠깐 사용하고 말지만 평가판 사용이 끝난후 다시 구할려면 복잡하기때문에

node.js를 사용하면 그런 걱정없기에 한번 올려 봅니다.


node.js의 modbus관련 패키지는 여러개가 있습니다.

그중에 modbus-stack이란 패키지를 사용해 보겠습니다.

하나를 사용 할 줄 알면 다른것도 금방 할 수 있습니다.


modbus-stack설치

npm install modbus-stack

modbus서버(slave) 샘플

var FC = require('modbus-stack').FUNCTION_CODES;

// 'handlers' is an Object with keys containing the "Function Codes" that your MODBUS
// server will handle. Anything function code requested without a handler defined here
// will have the Server transparently respond with Exception Code 1 ("Illegal Function")
var handlers = {};

// Define a handler for "Read Input Registers". We'll just respond with the register
// number requested. In a real-world situation, you'd probably look up these values from
// a database, etc.
handlers[FC.READ_INPUT_REGISTERS] = function(request, response) {
  var start = request.startAddress;
  var length = request.quantity;

  var resp = new Array(length);
  for (var i=0; i<length; i++) {
    resp[i] = start + i;
  }
  response.writeResponse(resp);
}

require('modbus-stack/server').createServer(handlers).listen(502);
console.log("listen........ 502");

위 소스는 읽기전용 입력 레지스터에 대한 모드버스 테이블입니다.

응답은 function코드가 0x04(읽기전용 입력 레지스터)인 거에만 응답을 하며 값은 자기 어드레스 번호가 들어 있습니다.


다음 시간에는 모드버스 클라이언트(마스터)에대해 알아보도록 하겠습니다.


감사합니다.