====== 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|한단계 뒤로]]