
QMachineStudio에서 Modbus TCP 통신을 구현하려면
👉 COM 객체 + UI 이벤트 + 데이터 변수 구조
이 3가지를 이해하면 됩니다.
이번 글에서는 실제 제공된 샘플 소스를 기반으로
👉 연결 → 읽기 → 쓰기 → UI 연동까지 전체 흐름을 설명합니다.
🖥️ 1. 전체 구조 이해 (샘플 기준)
샘플 코드에서 핵심 변수는 다음과 같습니다:
bool IsClientConnected
int Slave = 1
int Address = 0
bool BitData
bool InputBitDat
int WordInputDataRead
int WordData
array BitDataArray[8] = {OFF}
👉 핵심 포인트:
- Slave → Modbus Slave ID
- Address → 시작 주소
- BitData / WordData → 실제 통신 데이터
- BitDataArray → 여러 Bit 읽기
📌 즉, UI와 1:1 매핑되는 구조입니다.
🔌 2. Modbus 연결 / 해제
✔ 연결 버튼
FUNCTION OnConnectClick(string sender, int tag , array params)
{
COM["ModBus"].Close()
COM["ModBus"].Address = SS.Address
COM["ModBus"].Port = SS.Port
COM["ModBus"].Open()
SYS.SaveSetupParam()
}
🔍 설명
- 기존 연결 종료 후 재연결
- UI 입력값 → Address / Port 적용
- 설정값 저장
👉 실무 핵심:
연결 전에 반드시 Close() 호출
✔ 연결 해제
FUNCTION OnDisConnectClick(string sender, int tag , array params)
{
COM["ModBus"].Close()
}
✔ 연결 상태 체크
FUNCTION OnTimer(string sender, int tag , array params)
{
IsClientConnected = COM["ModBus"].IsOpen()
}
👉 UI 상태 표시용
🔘 3. Coil (Bit) 제어
✔ Bit Read
FUNCTION OnReadBit(string sender, int tag , array params)
{
if( COM["ModBus"].ReadDataBit(Slave, Address, BitData) == false )
{
LogError($"ReadDataBit Error")
}
}
👉 Coil Read (Function Code 01)
✔ Bit Toggle (Write)
FUNCTION OnToggleBit(string sender, int tag , array params)
{
BitData = !BitData
if( COM["ModBus"].WriteDataBit(Slave, Address, BitData) == false )
{
LogError($"WriteDataBit Error")
}
}
👉 Coil Write (Function Code 05)
📌 포인트:
- UI Toggle 버튼과 1:1 매칭
- 내부 변수 먼저 변경 후 Write
📥 4. Discrete Input Read
FUNCTION OnReadDiscreteInputBit(string sender, int tag , array params)
{
if( COM["ModBus"].ReadInputDataBit(Slave, Address, InputBitDat) == false )
{
LogError($"ReadInputDataBit Error")
}
}
👉 Read Only Bit
🔢 5. Register 데이터 처리
✔ Input Register (Read Only)
FUNCTION OnReadInputWord(string sender, int tag , array params)
{
if( COM["ModBus"].ReadInputDataWord(Slave, Address, WordInputDataRead) == false )
{
LogError($"ReadInputDataWordError")
}
}
✔ Holding Register Read
FUNCTION OnReadHoldingWord(string sender, int tag , array params)
{
if( COM["ModBus"].ReadDataWord(Slave, Address, WordData) == false )
{
LogError($"ReadDataWord Error")
}
}
✔ Holding Register Write
FUNCTION OnWriteWord(string sender, int tag , array params)
{
if( COM["ModBus"].WriteDataWord(Slave, Address, WordData) == false )
{
LogError($"WriteDataWord Error")
}
}
👉 PLC 데이터 제어 핵심
🔢 6. Bit Array 읽기 (실무에서 많이 씀)
FUNCTION OnTest1(string sender, int tag , array params)
{
if( COM["ModBus"].ReadDataBitArray(Slave, Address, 8, BitDataArray) == false )
{
LogError($"ReadDataBitArray Error")
}
}
👉 여러 Coil 한번에 읽기
📌 활용 예:
- 상태 비트 묶음 읽기
- 설비 상태 Monitoring
🧠 7. 전체 흐름 정리
Modbus 통신 흐름은 매우 단순합니다:
[1] Connect
[2] Address / Slave 설정
[3] Read or Write 함수 호출
[4] 결과 → 변수 저장 → UI 표시
[2] Address / Slave 설정
[3] Read or Write 함수 호출
[4] 결과 → 변수 저장 → UI 표시
⚠️ 8. 실무에서 꼭 알아야 할 포인트
✔ 1. COM 객체가 모든 통신 담당
COM["ModBus"]
✔ 2. 함수 이름으로 Modbus 기능 구분
함수의미
| ReadDataBit | Coil Read |
| WriteDataBit | Coil Write |
| ReadInputDataBit | DI Read |
| ReadInputDataWord | Input Register |
| ReadDataWord | Holding Read |
| WriteDataWord | Holding Write |
✔ 3. 실패 시 반드시 로그 처리
LogError($"ReadDataWord Error")
👉 현장에서 매우 중요
✔ 4. UI ↔ 변수 ↔ 통신 구조
UI 버튼 → Function 호출 → COM 통신 → 변수 저장 → UI 표시
🚀 9. 실전 활용 예
✔ PLC ON/OFF 제어
WriteDataBit → 장비 Start / Stop
✔ 상태 확인
ReadDataBitArray → 설비 상태 모니터링
✔ 데이터 전달
WriteDataWord → 생산 수량 전달
💡 10. 개발 팁
- Timer에서 Polling 구현 가능
- Bit Array로 성능 최적화
- Address는 반드시 PLC와 매칭
✅ 결론
QMachineStudio에서 Modbus 통신은 생각보다 단순합니다.
👉 핵심 3가지:
- COM 객체 사용
- 함수 기반 Modbus API 활용
- UI 이벤트와 연결
📡 Modbus Function 간단 설명 (Function Code 포함)
🔘 1. Coil (출력 Bit)
- Function Code: 01 (Read), 05 (Write)
- 설명: ON/OFF 제어용 Bit
- 사용: 장비 시작, 밸브, 모터 ON/OFF
- 👉 읽기 + 쓰기 가능
📥 2. Discrete Input (입력 Bit)
- Function Code: 02
- 설명: 센서 입력 상태
- 사용: 리미트 센서, 버튼 상태 확인
- 👉 읽기만 가능
🔢 3. Input Register (입력 Word)
- Function Code: 04
- 설명: 아날로그 값 (숫자 데이터)
- 사용: 온도, 압력, 무게 등
- 👉 읽기만 가능
🧠 4. Holding Register (출력 Word)
- Function Code: 03 (Read), 06 (Write)
- 설명: PLC 내부 데이터
- 사용: 설정값, 속도, 카운트 값
- 👉 읽기 + 쓰기 가능 (가장 많이 사용)
🎯 핵심 정리
- 01 / 05 → Bit 제어 (Coil)
- 02 → 입력 Bit (센서)
- 04 → 입력 Word (센서 값)
- 03 / 06 → Word 데이터 제어 (PLC 값)
'QMachineStudio' 카테고리의 다른 글
| QMachineStudio 2025 기술 리포트: 구조적 개선과 실사용 효율의 진화 (0) | 2026.03.25 |
|---|---|
| QMachineStudio 2024년 개발 성과 정리 (0) | 2026.03.24 |
| 2023년 QMachineStudio 개발 성과 (0) | 2024.01.02 |
| Collaborative Innovation between XMachineStudio and Movensys' WMX3 SDK: Exciting News on DIO & Motor Control Driver Development! (0) | 2023.09.13 |
| XMachineStudio와 모벤시스 WMX3 SDK의 혁신적인 협업: DIO 및 Motor 제어용 Driver 개발 소식! (0) | 2023.09.13 |