====== AN41007 - 모아콘끼리 상호 통신 ======
MODBUS RTU 를 이용해서 모아콘끼리 상호 통신하실 수 있습니다. 한쪽을 슬레이브로 만들고, 다른 한쪽에서 마스터 함수를 이용하는 방식입니다.
{{ :cublocapp:an41007:moaconcomm.png?nolink |}}
그림에서처럼 RS232 채널 0 의 2 번,3 번은 서로 교차 연결하고, 5 번은 5 번끼리 연결하십시오. 슬레이브에는 다음과 같은 소스를 사용하였습니다.
#include "moacon500.h"
void cmain(void)
{
static u8 MDcoil[100];
static u16 MDregister[100];
openCom(0,57600, C8N1);
startModbusRtu(0,1,MDregister, MDcoil);
clcdI2cInit(0);
clcdPower(1);
delay(100);
for(;;) {
MDregister[0]++;
MDregister[1]++;
MDcoil[0]++;
MDcoil[1]++;
delay(100);
clcdPrint(0,0,"%2X %2X %4X",MDcoil[0],MDcoil[1],MDregister[0]);
}
}
마스터에는 다음과 같은 소스를 사용하였습니다.
#include "moacon500.h"
void cmain(void)
{
short res;
int errtime=0,errtime2=0;
static u8 MBcoilBuffer[4];
static u16 MBregisterBuffer[4];
clcdI2cInit(0);
clcdPower(1);
delay(100);
clcdCls();
delay(100);
clcdCsr(0);
openCom(0,57600,C8N1);
while(1) {
res = RTU_readCoils(0,1,MBcoilBuffer,0,16);
if (res != -1) {
clcdPrint(0,2,"Error FC1 %d #%d",res,++errtime);
}
delay(200);
res = RTU_readInRegs(0,1,MBregisterBuffer,0,1);
if (res != -1) clcdPrint(0,3,"Error FC3 %d #%d",res,++errtime2);
delay(200);
clcdPrint(1,1,"%2X %2X %4X",MBcoilBuffer[0],MBcoilBuffer[1],MBregisterBuffer[0]);
}
}
마스터에서 슬레이브의 정보를 읽어와서 LCD 상에 표시합니다. 결과적으로 양쪽
LCD 창에는 같은 정보가 표시됩니다.
{{ :cublocapp:an41007:moaconcomm2.png?nolink |}}
[[cublocapp:index|한단계 뒤로]]