====== ComfileHMI 연결 예제 (단계별 설명) ======= 예제를 통해서 구체적으로 어떻게 ComfileHMI와 Modular FADUINO간의 연결이 이루어지는지 살펴보겠습니다. 일단 아무것도 없는 상태의 소스에서부터 출발을 하겠습니다. void setup() { } void loop() { } 이 상태에서 라이브러리를 추가해주세요. 그리고 링크를 위한 전역배열 (즉,링크배열) 가 필요합니다. 이 링크배열을 통해서 FADUINO와 ComfileHMI 사이의 정보를 교환할 수 있습니다. 전역배열로 선언하려면 setup이나, loop 바깥에 배열을 선언해야 합니다. #include "CFMEGA.h" #include "cfSimpleModbusRtu2.h" CFNET cfnet; uint16_t Lword[99]; // 16비트 워드값을 저장하는 링크 배열 uint8_t Lbit[99]; // 1비트 값을 저장하는 링크 배열 void setup() { } void loop() { } 밑작업은 끝났습니다. 이제 MODBUS를 시동걸어 보겠습니다. startModbusServer 함수를 setup안에 넣어주기만 하면됩니다. #include "CFMEGA.h" #include "cfSimpleModbusRtu2.h" CFNET cfnet; uint16_t Lword[99]; uint8_t Lbit[99]; void setup() { startModbusServer(1, Lword, Lbit); // uartCh, ModbusSlaveAdr, WordArea, BitArea } void loop() { } Arduino IDE에서 코딩은 이것으로 일단락 되었습니다. 이제 Comfile Studio로 넘어가보겠습니다. ===== 첫번째 : 숫자를 표시하고 증가되는 값을 표시해보자 ===== ComfileHMI에 숫자 위젯 한개만 표시하고 주소는 2번지로 설정해주세요. {{ :faduino:modularfaduino:cfmodbus:numprint.png?nolink |}} (부연설명) 모드버스의 주소체계는 펑션코드와 같이 기술합니다. 40002라는 주소는 펑션3번 (워드공간을 뜻함)의 주소2번이라는 뜻입니다. 그리고 다음과 같이 소스를 고치면, incvalue라는 변수에 있는 값이 계속 증가하고, 그 값은 링크배열 Lword에 저장됩니다. #include "CFMEGA.h" #include "cfSimpleModbusRtu2.h" CFNET cfnet; uint16_t incvalue; uint16_t Lword[99]; uint8_t Lbit[99]; void setup() { startModbusServer(1, Lword, Lbit); // uartCh, ModbusSlaveAdr, WordArea, BitArea } void loop() { Lword[2] = incvalue++; } 실행시키면, 계속 증가되는 숫자가 ComfileHMI 화면상에 표시됩니다. {{url>https://www.youtube.com/embed/818PpehZrFU?si=NMtdWp0TV-zuFgHe 560,315}} 여기까지 성공하셨다면, 많은 부분을 이해하고 해결하신 상황입니다. 축하드립니다. 만약 위 예제가 제대로 동작하지 않는다면, 아래 열거된 과정중에 잘못된 부분이 있는지 점검해보시기 바랍니다. - Comfile Studio를 설치하고 최초의 프로젝트를 생성 - PC와 ComfileHMI를 연결하고, 프로젝트 전송까지 성공 - 처음 사용자라면 윈도우 모바일 디바이스 센터까지 설치하고, 동작확인까지 된 상황 - Arduino IDE를 설치하고, 컴파일하고 업로드까지 성공. - ComfileHMI와 FADUINO사이의 결선 ===== 두번째 : 버튼 동작 구현 ===== 앞서 상황은 FADUINO에서 LWORD 링크배열에 값만 써 넣었는데, ComfileHMI가 알아서 그 값을 가져간뒤 화면에 표시하는 상황입니다. 이 번에는 반대로, ComfileHMI에 있는 버튼을 눌러서 변화된 상태를 FADUINO에 포트로 출력해 보겠습니다. 제어버튼 위젯과 램프 위젯을 사용했습니다. 제어버튼 속성은 <비트주소>로 하나는 On, 다른 하나는 Off로 설정하세요 {{ :faduino:modularfaduino:cfmodbus:togexample.png?nolink |}} #include "CFMEGA.h" #include "cfSimpleModbusRtu2.h" CFNET cfnet; uint16_t incvalue; uint16_t Lword[99]; uint8_t Lbit[99]; void setup() { pinMode(13,1); startModbusServer(1, Lword, Lbit); // uartCh, ModbusSlaveAdr, WordArea, BitArea } u16 ltemp; u8 tempv; void loop() { Lword[2] = incvalue++; if (Lbit[3] == 1) { cfnet.digitalWrite(0,15,1); } // 버튼위젯 정보를 읽어서 실제로 포트를 On/Off 시키는 부분입니다. else { cfnet.digitalWrite(0,15,0); } } {{url>https://www.youtube.com/embed/TgElISj9TAg?si=efGX02x5rUm-zpuV 560,315}} [[..:index|Modular FADUINO]]