====== 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 (닷넷) 개발환경]]