diff --git a/Modbus-CAPL/include/CAPL/include/ModbusStructs.cin b/Modbus-CAPL/include/CAPL/include/ModbusStructs.cin index 08c2305..e80993e 100644 --- a/Modbus-CAPL/include/CAPL/include/ModbusStructs.cin +++ b/Modbus-CAPL/include/CAPL/include/ModbusStructs.cin @@ -1,27 +1,29 @@ /*@!Encoding:1252*/ variables { - // according to Modbus Specification v1.1 + // Constant maximum values according to Modbus Specification v1.1 const word gMaxBitsPerRead = 2000; const word gMaxRegsPerRead = 125; const word gMaxBitsPerWrite = 1968; // Multiple of 8! const word gMaxRegsPerWrite = 123; + // Function Codes according to Modbus Specification v1.1 enum ModbusFuncCode { - ReadBitsOut = 0x01, - ReadBitsIn = 0x02, - ReadRegistersOut = 0x03, - ReadRegistersIn = 0x04, - WriteBit = 0x05, - WriteRegister = 0x06, - WriteBits = 0x0F, - WriteRegisters = 0x10, - MaskRegister = 0x16, - ReadWriteRegisters = 0x17 + ReadBitsOut = 0x01, // Read Coils + ReadBitsIn = 0x02, // Read Discrete Inputs + ReadRegistersOut = 0x03, // Read Holding Registers + ReadRegistersIn = 0x04, // Read Input Registers + WriteBit = 0x05, // Write Single Coil + WriteRegister = 0x06, // Write Single Holding Register + WriteBits = 0x0F, // Write Multiple Coils + WriteRegisters = 0x10, // Write Multiple Holding Registers + MaskRegister = 0x16, // Mask Write Holding Register + ReadWriteRegisters = 0x17 // Read/Write Multiple Registers }; - // A normal Modbus Application Header. Every Modbus Packet begins with these 7 (+FuncCode) Bytes + // Modbus Application Header + // Every Modbus Packet begins with these 7 (+FuncCode) Bytes _align(1) struct ModbusApHeader { word TxID; @@ -30,6 +32,8 @@ variables byte UnitID; byte FuncCode; }; + + /// Request structures following // Read Data from the host. We only need the start address and the number of bits/registers we want to read _align(1) struct ModbusReqRead { @@ -83,6 +87,7 @@ variables }; + /// Response structures following // Receive several bit values _align(1) struct ModbusResReceiveBits { @@ -120,16 +125,21 @@ variables word Or; }; + // The maximum modbus telegram size. + // Several telegrams use this many bytes, but CAPL does not support a constant max function to let it calculate it. So we use ModbusResReceiveRegisters const word gModbusMaxTelegramSize = __size_of(struct ModbusResReceiveRegisters); + // Some errors that may occur when sending a request enum ModbusRequestError { - Exception, - Timeout, - FinalTimeout, - NotSent + Exception, // Modbus exception was returned + Timeout, // Timeout occured, resending the packet + FinalTimeout, // Timeout occured, not resending the packet + NotSent // Sending the packet was impossible }; + + // Modbus exception codes according to Modbus Specification v1.1 enum ModbusException { None = 0x00, @@ -142,6 +152,8 @@ variables GatewayPathsNA = 0x0A, TargetOffline = 0x0B }; + + // Fatal errors that may stop the code execution enum FatalErrors { ParsingBuffer,