====== 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]]