Exemple : Configuration du protocole en mode requête/réponse
Exemple d’un NetLogic contenu dans l’objet
Port
série qui utilise le mode requête/réponse pour lire la valeur d’un registre d’un automate Modbus toutes les 300 millisecondes.Avec la méthode
WriteBytes
, la commande est envoyée via le port série et, avec la méthode ReadBytes
suivante, elle attend une réponse de l'automate. Si l'automate ne répond pas dans le temps indiqué par la propriété Timeout
, une exception est générée et la lecture ou l'écriture échoue.Vous pouvez télécharger un exemple de projet depuis 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); } }
Fournir une réponse