Beispiel: Protokollkonfiguration im Anfrage-/Antwortmodus

Ein Beispiel für eine im seriellen
Port
-Objekt enthaltene NetLogic, die alle 300 Millisekunden den Anfrage-/Antwortmodus für das Lesen des Werts eines Modbus-Controllerregisters verwendet.
Mit der Methode
WriteBytes
wird der Befehl über die seriellen Schnittstelle gesendet und anschließend mit der Methode
ReadBytes
auf eine Antwort vom Controller gewartet. Wenn der Controller nicht innerhalb der in der Eigenschaft
Timeout
angegebenen Zeit antwortet, wird eine Ausnahme generiert und das Lesen/Schreiben schlägt fehl.
Ein Beispielprojekt zum Herunterladen finden Sie unter 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); } }
Rückmeldung geben
Haben Sie Fragen oder Feedback zu dieser Dokumentation? Bitte geben Sie hier Ihr Feedback ab.