ESP32 서버 모드
Client가 Server에 접속해서 정보를 가져오는 방식
modbus-esp8266 라이브러리 설치
modbus 예제의 IP-server-AnalogInput 열기
WiFi 정보 입력 후 컴파일 업로드
Modbus Client에서 ESP32로 접속 후,
주소를 100으로 설정하고 Read Input Register를 하면 됨.
아두이노 소스 변경
delay(); 삭제해서 최대 성능을 낸다.
Coil, Hreg, Ists, Ireg 각각 4개씩 데이터를 기록한다. (3개씩은 타이머 분할 기록)
남은 1개의 103번 주소엔 millis(); 값을 실시간으로 기록한다.
C# 수신 테스트
C#으로 작성한 Modbus TCP Client에서 테스트 해보니
103번 값이 매우 빠른 속도로 갱신이 됐다.
Task Timer는 1ms초 단위로 갱신하도록 코딩 했음.
ESP32 성능은 아주 만족 스럽다.
PC에서 초당 64~65 회 수신으로 매우 빠르게 갱신된다. 1회 수신 처리에 약 15ms 소요.
동시에 100개를 수신하면 초당 60회가 주로 수신 되고, 28~70 회까지도 튄다.
다축 로봇 제어 등, 실시간 정밀 제어에 충분히 사용할 수 있을 것 같다.
Modbus 클래스
NModbus4
NuGet에서 몇가지 Modbus를 테스트 해봤는데, NModbus4가 제일 빠르고 안정적이었다. 비동기 메서드도 있다.
FluentModbus
FluentModbus 3.2.1은 접속부터 통신까지 여러 문제가 있다. 예제를 보니 비동기도 안 되는 듯.
EasyModbusTCP
EasyModbusTCP 5.6.0은 고속 통신은 되는데 매번 수신 데이터가 0으로 바뀌는 문제가 있다. 값이 0으로 바뀌면서 깜빡이는 문제... 그러다가 수 초 후 프로그램 자체가 얼어버리는 문제가 항상 나타났다.
도대체 이딴 프로그램을 어떻게 사용하는지 알 수가 없다.
NModbus4는 고속으로 장시간 동작한다.