Simple MODBUS 라이브러리를 이용해서 아두이노 우노와 ComfileHMI 를 연결해보았습니다.
소스는 보시는 것처럼 간단합니다. <SimpleModbusRtu_uno.h> 이 파일에 필요한 심플모드버스 라이브러리가 들어있습니다.
/** * SimpleModbusRtu_example * http://www.comfile.co.kr */ #include <SimpleModbusRtu_uno.h> uint16_t au16data[16]; uint8_t au8data[10]; char n; int incomingByte = 0; void setup() { pinMode(2, INPUT); pinMode(3, INPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); usart0init(57600); // 9600, 19200, 38400, 57600 , Serial channel0 startSimpleModbus(1,au16data, au8data); // slave address, register, coil } void loop() { digitalWrite(8, bitRead(au8data[0],0) ); digitalWrite(9, bitRead(au8data[0],1) ); bitWrite( au8data[1],0, digitalRead(2) ); bitWrite( au8data[1],1, digitalRead(3) ); au16data[0] = analogRead(A0); au16data[1] = analogRead(A1); }
아래 2개 명령으로 USART를 Open하고 Simple Modbus를 시작합니다.
아두이노에서는 115200 보레이트를 사용하실 수 없습니다.
usart0init(57600); // 9600, 19200, 38400, 57600 , Serial channel0 startSimpleModbus(1,au16data, au8data); // slave address, register, coil
이후, HMI는 알아서 아두이노와 서로 통신합니다. 결과는
uint16_t au16data[16]; uint8_t au8data[10];
이 두개의 배열에 저장됩니다. 또한 여러분이 이 배열에 어떤 값을 써넣으면 HMI로 그 값이 전달됩니다. 쌍방간의 통신을 위한 링크채널이라고 보시면 됩니다.