====== 모듈형 FADUINO와 연결방법 ======
CPU모듈에 있는 RS232C와 ComfileHMI를 아래 그림처럼 연결하세요.
{{ :comfilehmi:hmi_connection_modularfaduino:faduinocpu_connection.png?nolink |}}
CFMEGA1모듈에는 2개 RS232C 포트가 있는데 이중 아무거나 사용하셔도 됩니다. 단, 동시에 사용할 수는 없고, 한개만 ComfileHMI와 연결 할 수 있습니다.
CFMEGA2모듈에는 2개 RS232C 포트와 1개의 RS485포트가 있는데 이중 아무거나 사용하셔도 됩니다. 단, 동시에 사용할 수는 없고, 한개만 ComfileHMI와 연결 할 수 있습니다.
===== 라이브러리 다운로드 =====
[[modularfaduino:library:index|Modular FADUINO Library]]
cfSimpleModbusRTU 라이브러리를 다운받아 문서>Arduino>Librares 아래에 폴더 자체를 옮겨 놓으세요.
===== 라이브러리 사용법 ======
사용을 원하시는 채널번호가 있는 라이브러리를 불러와야 합니다. 예를들면...
채널1을 사용하는 경우입니다.
#include "cfSimpleModbusRtu1.h"
채널2을 사용하는 경우입니다.
#include "cfSimpleModbusRtu2.h"
채널3을 사용하는 경우입니다.
#include "cfSimpleModbusRtu3.h"
==== 프로토콜 셋업 ====
* 보레이트는 57600 고정으로 되어 있어, 유저가 변경하실 수 없습니다.
* 8 bit, none 패리티, 1 stop bit로 고정되어 있으며 유저가 변경하실 수 없습니다.
Comfile Studio 안에서 아래와 같이 셋팅하세요.
{{ :comfilehmi:hmi_connection_modularfaduino:protocolsetup.png?nolink |}}
===== 샘플 소스 =====
채널1을 사용하는 경우입니다.
#include "CFMEGA.h"
#include "cfSimpleModbusRtu1.h"
CFNET cfnet;
uint16_t incvalue;
uint16_t Lword[99];
uint8_t Lbit[99];
void setup()
{
startModbusServer(1, Lword, Lbit); // ModbusSlaveAdr, WordArea, BitArea
}
u16 ltemp;
void loop() {
u16 out0 = cfnet.digitalRead(0);
cfnet.digitalWrite(0,out0);
Lword[1] = incvalue++;
}
===== 함수 사용법 =====
====== startModbusServer ======
''void startModbusServer(u8 modSlaveadr, u16 * modbusBufferRegister, u8 * modbusBufferCoil) ''
|modSlaveadr : 모드버스의 슬레이브 어드레스 (1~255), 0번 사용금지 |
|modbusBufferRegister : 16비트 레지스터 링크배열 시작번지 |
|modbusBufferCoil : 1비트 코일 링크배열 시작번지 |
==== 설명 ====
MODBUS RTU 슬레이브의 시작을 알리는 함수입니다.
uint16_t Lword[99]; // setup 함수 바깥에서 선언하였으므로 전역 변수가 된다.
uint8_t Lbit[99];
void setup()
{
startModbusServer(1, Lword, Lbit); // ModbusSlaveAdr, WordArea, BitArea
}
==== 링크 배열 ====
MODBUS RTU 를 사용하기 위해서는 두 종류의 링크배열 공간이 필요합니다.
{{ :comfilehmi:hmi_connection_modularfaduino:linkarea.png?nolink |}}
* 16 비트 워드 데이터를 저장하는 “레지스터 (Register)” 전역 배열
* 1 비트 데이터를 저장하는 “코일(Coil)” 전역 배열, 1 비트 영역 (Coil)은 바이트형 배열로 선언하십시오. 1바이트에 1비트의 정보만 보관됩니다.
===== 동작 원리 설명 =====
이렇게 라이브러리에 있는, startModbusServer를 동작만 시켜두면, 알아서 ComfileHMI와 CPU모듈간 통신이 이루어 집니다.
{{ :comfilehmi:hmi_connection_modularfaduino:simplemodbus.png?nolink |}}
ComfileHMI 로 부터 오는 통신데이터를 알아서 한 바이트씩 내부버퍼에 넣고, 쌓인 내용을 처리하는 방식입니다.
{{ :comfilehmi:hmi_connection_modularfaduino:simplemodbusmcu.png?nolink |}}
따라서, 유저는 MODBUS 통신에 신경쓸 필요없이, 링크배열에 데이터를 넣거나 읽기만 하면 됩니다. 해당 링크배열은 결국 ComfileHMI 화면에 있는 위젯 (통신기능이 내장된 화면 구성요소 : 버튼, 램프등등)과 연결되며, 이를 통해 동작실행여부 및 상태확인등을 할 수 있습니다.
====== Comfile Studio 프로젝트 생성 ======
Comfile Studio (ComfileHMI 작화 소프트웨어) 에서 프로젝트 생성하실때, 아래와 같이 선택하세요.
{{ :comfilehmi:hmi_connection_modularfaduino:faduinosetting.png?nolink |}}
===== 관련해서 자주 하시는 질문과 답변 =====
* Q : CPU에 3개 채널을 동시에 MODBUS SERVER로 사용할 수 없나요?
* A : 1개만 사용하실 수 있습니다.
* Q : 타사 HMI를 사용할 수 있나요?
* A : 불가능합니다.
* Q : 가끔 ComfileHMI와 통신 연결이 끊어집니다. 이유는 무엇인가요?
* A : 여러가지 이유가 있을 수 있습니다. 우선 통신선을 점검해보세요. 그리고 유저 코드안에서 인터럽을 금지시키고 있는 부분이 있는지 확인해보세요. 전체 인터럽트를 금지시키면 안됩니다.
[[..:index|ComfileHMI]]