예시: 요청/응답 모드의 프로토콜 구성

예시: 요청/응답 모드의 프로토콜 구성

요청/응답 모드를 사용하여 300밀리초마다 Modbus 컨트롤러 레지스터의 값을 읽는 직렬
Port
개체에 포함된 NetLogic의 예입니다.
WriteBytes
메서드를 사용하면 직렬 포트를 통해 명령이 전송되고, 후속
ReadBytes
메서드를 사용하면 컨트롤러의 응답을 기다립니다. 컨트롤러가
Timeout
속성에 지정된 시간 내에 응답하지 않으면 예외가 생성되고 읽기/쓰기가 실패합니다.
샘플 프로젝트는 SerialPortDemoRequestResponseMode.zip에서 다운로드할 수 있습니다.
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private PeriodicTask periodicTask; public override void Start() { serialPort = (SerialPort)Owner; periodicTask = new PeriodicTask(Read, 300, Owner); periodicTask.Start(); } private void Read() { try { ReadImpl(); } catch (Exception ex) { Log.Error("Failed to read from Modbus: " + ex); } } private void ReadImpl() { serialPort.WriteBytes(Serialize()); var result = serialPort.ReadBytes(3); if ((result[1] & 0x80) == 0) { result = serialPort.ReadBytes((uint)(result[2] + 2)); Log.Info(Deserialize(result)); } else { Log.Error("Failed to read from Modbus"); } } private byte[] Serialize() { var buffer = new byte[] { 0x01, // UnitId 0x03, // Function code 0x00, // Starting address 0x00, 0x00, // Quantity Of Registers 0x01, 0x84, // CRC 0x0a }; return buffer; } private ushort Deserialize(byte[] buffer) { var first = (ushort)buffer[1]; var second = (ushort)(buffer[0] << 8); return (ushort)(first | second); } }
의견을 작성 부탁드립니다.
이 자료에 대한 문의사항이나 요청사항이 있습니까? 여기에 요청사항을 작성 부탁드립니다.