ModbusStructs.cin

Improved comments
This commit is contained in:
Jonny007-MKD 2014-08-29 15:07:40 +00:00
parent eb6d28c71b
commit f97e0c7481

View file

@ -1,27 +1,29 @@
/*@!Encoding:1252*/ /*@!Encoding:1252*/
variables variables
{ {
// according to Modbus Specification v1.1 // Constant maximum values according to Modbus Specification v1.1
const word gMaxBitsPerRead = 2000; const word gMaxBitsPerRead = 2000;
const word gMaxRegsPerRead = 125; const word gMaxRegsPerRead = 125;
const word gMaxBitsPerWrite = 1968; // Multiple of 8! const word gMaxBitsPerWrite = 1968; // Multiple of 8!
const word gMaxRegsPerWrite = 123; const word gMaxRegsPerWrite = 123;
// Function Codes according to Modbus Specification v1.1
enum ModbusFuncCode enum ModbusFuncCode
{ {
ReadBitsOut = 0x01, ReadBitsOut = 0x01, // Read Coils
ReadBitsIn = 0x02, ReadBitsIn = 0x02, // Read Discrete Inputs
ReadRegistersOut = 0x03, ReadRegistersOut = 0x03, // Read Holding Registers
ReadRegistersIn = 0x04, ReadRegistersIn = 0x04, // Read Input Registers
WriteBit = 0x05, WriteBit = 0x05, // Write Single Coil
WriteRegister = 0x06, WriteRegister = 0x06, // Write Single Holding Register
WriteBits = 0x0F, WriteBits = 0x0F, // Write Multiple Coils
WriteRegisters = 0x10, WriteRegisters = 0x10, // Write Multiple Holding Registers
MaskRegister = 0x16, MaskRegister = 0x16, // Mask Write Holding Register
ReadWriteRegisters = 0x17 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 _align(1) struct ModbusApHeader
{ {
word TxID; word TxID;
@ -30,6 +32,8 @@ variables
byte UnitID; byte UnitID;
byte FuncCode; 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 // 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 _align(1) struct ModbusReqRead
{ {
@ -83,6 +87,7 @@ variables
}; };
/// Response structures following
// Receive several bit values // Receive several bit values
_align(1) struct ModbusResReceiveBits _align(1) struct ModbusResReceiveBits
{ {
@ -120,16 +125,21 @@ variables
word Or; 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); const word gModbusMaxTelegramSize = __size_of(struct ModbusResReceiveRegisters);
// Some errors that may occur when sending a request
enum ModbusRequestError enum ModbusRequestError
{ {
Exception, Exception, // Modbus exception was returned
Timeout, Timeout, // Timeout occured, resending the packet
FinalTimeout, FinalTimeout, // Timeout occured, not resending the packet
NotSent NotSent // Sending the packet was impossible
}; };
// Modbus exception codes according to Modbus Specification v1.1
enum ModbusException enum ModbusException
{ {
None = 0x00, None = 0x00,
@ -142,6 +152,8 @@ variables
GatewayPathsNA = 0x0A, GatewayPathsNA = 0x0A,
TargetOffline = 0x0B TargetOffline = 0x0B
}; };
// Fatal errors that may stop the code execution
enum FatalErrors enum FatalErrors
{ {
ParsingBuffer, ParsingBuffer,