====== NModbus4 사용법 ======
본 문서에서는 산업 현장에서 널리 사용되는 **MODBUS 프로토콜**을 \\ ComfilePi에서 구현하는 방법을 설명합니다.
NModbus4 라이브러리를 사용하면 MODBUS 통신을 비교적 간단하게 구성할 수 있습니다.
===== ComfilePi와 PLC 결선 =====
ComfilePi의 RS232 **COM0** 포트와 PLC의 RS232 포트를 아래와 같이 연결합니다.
* TX ↔ RX
* RX ↔ TX
* GND ↔ GND
^ {{ :comfilepi:comfilepinetenvironment:nmodbus4_k:comfilepi_connection.png?nolink |}} ^ {{ :comfilepi:comfilepinetenvironment:nmodbus4_k:msb_connection.png?nolink |}} ^
※ 본 예제에서 사용된 PLC는 컴파일테크놀로지의 [[https://www.comfile.co.kr/goods/goods_view.php?goodsNo=1000000044|MSB612RA-DC]] 입니다.
===== NModbus4 라이브러리 추가 =====
Visual Studio에서 NModbus4 라이브러리를 추가하는 방법입니다.
* 1. 프로젝트 생성 후 **솔루션 탐색기 → 프로젝트 우클릭 → NuGet 패키지 관리**
{{ :comfilepi:comfilepinetenvironment:nmodbus4_k:nmodbus_1_a.png?nolink |}}
* 2. **찾아보기 → “NModbus” 검색 → NModbus4 선택 → 설치**
{{ :comfilepi:comfilepinetenvironment:nmodbus4_k:nmodbus_2_a.png?nolink |}}
* 3. 출력 창에서 설치 완료 여부 확인
{{ :comfilepi:comfilepinetenvironment:nmodbus4_k:nmodbus_3_a.png?nolink |}}
===== Modbus 프로그래밍 =====
NModbus4 사용 시 필요한 기본 설정과 주요 함수입니다.
==== Serial Port 설정 ====
ComfilePi와 Windows 환경에서 포트 이름이 다르므로 아래와 같이 분기 처리합니다.
* COM0 → `/dev/serial0`
* COM1 → `/dev/serial1`
string portName = Environment.OSVersion.Platform == PlatformID.Win32NT ? "COM0" : "/dev/serial0";
SerialPort port = new SerialPort(portName, 115200);
port.ReadTimeout = 100;
port.WriteTimeout = 100;
port.Open();
==== Master 주요 함수 ====
Modbus RTU Master는 **ModbusSerialMaster** 클래스를 사용합니다.
bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints);
ushort[] ReadWriteMultipleRegisters(byte slaveAddress, ushort startReadAddress, ushort numberOfPointsToRead, ushort startWriteAddress, ushort[] writeData);
void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data);
void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);
void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value);
void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value);
==== 실행 파일 배포 ====
빌드 후 생성된
* 실행 파일 (.exe)
* NModbus4.dll
을 ComfilePi의 `/home/pi` 경로에 복사하여 실행합니다.
\\
===== 예제 프로그램 =====
본 예제는
* ComfilePi → Master
* PLC(MSB612RA-DC) → Slave
구성으로 작성되었습니다.
==== Example 1 ====
소스 다운로드 ☞ {{ :comfilepi:comfilepinetenvironment:nmodbus4_k:simple_modbus_example.zip |}}
{{ :comfilepi:comfilepinetenvironment:nmodbus4_k:simple_modbus_example1.mp4?700x450 |}}
++++ 소스 보기 |
(원본 코드 그대로 사용)
++++
\\
==== Example 2 ====
소스 다운로드 ☞ {{ :comfilepi:comfilepinetenvironment:nmodbus4_k:modbus_example.zip |}}
{{ :comfilepi:comfilepinetenvironment:nmodbus4_k:nmodbus_example2.mp4?700x450 |}}
++++ 소스 보기 |
(원본 코드 그대로 사용)
++++
[[..:index|.NET (닷넷) 개발환경]]