PDComm.Modbus.Endpoint
클래스
JSON 명령으로 구동하는 PDComm Modbus 엔드포인트입니다. Modbus TCP, RTU 또는 ASCII 클라이언트나 서버(시뮬레이터)로 동작합니다.
public sealed class Endpoint : IDisposable각 엔드포인트는 pdcomm_modbus_ffi 네이티브 라이브러리의 핸들 하나를 소유합니다. Endpoint.Call에 전달하는 JSON 명령으로 역할, 전송 방식, 데이터 모델을 구성한 다음 연결하고, 요청을 보내거나 폴링합니다. 엔드포인트는 백그라운드 스레드를 만들지 않습니다. 서버 엔드포인트는 호출할 때만 진행되므로 직접 작성한 루프에서 폴링해야 합니다. 클라이언트 호출은 구성된 타임아웃까지 차단될 수 있습니다.
한 엔드포인트에 대한 호출은 내부 잠금으로 직렬화되므로 여러 스레드에서 엔드포인트를 공유할 수 있습니다. 네이티브 핸들을 해제하려면 엔드포인트를 해제(dispose)합니다. 해제하지 않으면 종료자(finalizer)가 핸들을 해제합니다.
네이티브 라이브러리는 기본 .NET 검색 규칙에 따라 이름으로 로드됩니다. 특정 경로에서 로드하려면 예제처럼 첫 호출 전에 NativeLibrary.SetDllImportResolver로 확인자(resolver)를 등록합니다.
string nativePath = Path.GetFullPath(args[1]);
NativeLibrary.SetDllImportResolver(typeof(Endpoint).Assembly,
(name, assembly, search) => name == "pdcomm_modbus_ffi" ? NativeLibrary.Load(nativePath) : IntPtr.Zero);
using var endpoint = new Endpoint();
using var command = JsonDocument.Parse(line); // one JSON command, for example {"action":"state"}
JsonElement result = endpoint.Call(command.RootElement);
Console.WriteLine(JsonSerializer.Serialize(new { ok = true, result }));
endpoint.Call(new { action = "disconnect" });멤버
Endpoint
생성자
네이티브 Modbus 엔드포인트를 만듭니다.
public Endpoint()참고
DllNotFoundException예외: 네이티브 라이브러리를 찾거나 로드할 수 없습니다.InvalidOperationException예외: 네이티브 라이브러리가 엔드포인트를 만들지 못했습니다.
Call
메서드
엔드포인트에서 JSON 명령 하나를 실행하고 그 결과를 반환합니다.
public JsonElement Call(object command)매개변수
| 이름 | 설명 |
|---|---|
command | JsonSerializer로 직렬화되는 명령입니다. JsonElement이거나, 정확한 소문자 속성 이름을 가진 익명 형식 같은 객체입니다. action 속성이 작업을 선택합니다. 예를 들어 configure, connect, request, poll, state, disconnect가 있습니다. |
반환값
네이티브 응답의 result 속성 값입니다. 네이티브 버퍼와 분리된 값입니다.
참고
ObjectDisposedException예외: 엔드포인트가 해제되었습니다.DllNotFoundException예외: 네이티브 라이브러리를 찾거나 로드할 수 없습니다.ModbusCommandException예외: 엔드포인트가 명령을 거부했습니다(예: 알 수 없는 작업, 잘못된 구성, 요청 시간 초과, 유효한 라이선스 없는connect이며 마지막 경우ModbusCommandException.Code는license_required입니다). 메시지는 엔드포인트의 오류 텍스트입니다. 이 형식은InvalidOperationException에서 파생합니다.InvalidOperationException예외: 명령을 전혀 실행할 수 없었습니다(예: 유효한 JSON이 아닌 입력). 메시지에 네이티브 상태가 나옵니다. Modbus 예외 응답은 실패가 아닙니다. 결과에는"status":"exception"이 들어 있고, 응답은 받은 예외 코드를 그대로 전달합니다. Modbus 사양이 정의하지 않은 코드도 마찬가지입니다.
Dispose
메서드
네이티브 엔드포인트를 해제합니다.
public void Dispose()엔드포인트를 해제하면 열린 연결을 포함한 네이티브 상태가 삭제됩니다. 이 메서드를 여러 번 호출해도 효과가 없습니다.
pdcomm_modbus_capabilities
메서드
로드된 네이티브 라이브러리에 컴파일된 기능을 가져옵니다.
public static uint pdcomm_modbus_capabilities()이 메서드는 C 이름 그대로 노출된 네이티브 함수 자체입니다.
반환값
비트 집합입니다. 1은 Modbus TCP, 2는 Modbus RTU, 4는 Modbus ASCII, 8은 보안(TLS 기반 Modbus/TCP Security)입니다.
참고
DllNotFoundException예외: 네이티브 라이브러리를 찾거나 로드할 수 없습니다.