234 lines
9.1 KiB
C
234 lines
9.1 KiB
C
#ifndef _MODBUS_DEFINE_H_
|
|
#define _MODBUS_DEFINE_H_
|
|
|
|
#define MODBUSS_SYNC 0
|
|
#define MODBUSS_CTRL 1
|
|
#define MODBUSS_INFO 2
|
|
|
|
#define MODBUSC_F01 1 //Read Coils 0x
|
|
#define MODBUSC_F02 2 //Read Discrete Inputs 1x
|
|
#define MODBUSC_F03 3 //Read Holding Registers 4x
|
|
#define MODBUSC_F04 4 //Read Input Register 3x
|
|
#define MODBUSC_F05 5 //Write Single Coil 0x
|
|
#define MODBUSC_F06 6 //Write Single Register 4x
|
|
#define MODBUSC_F07 7 //Read Exception Status Diagnostics
|
|
#define MODBUSC_F08 8 //0-18, 20 (5-9, 19,and >20 RESERVED)Diagnostics Diagnostics
|
|
#define MODBUSC_F11 11 //Get Com Event Counter Diagnostics
|
|
#define MODBUSC_F12 12 //Get Com Event Log Diagnostics
|
|
#define MODBUSC_F15 15 //Write Multiple Coils 0x
|
|
#define MODBUSC_F16 16 //Write Multiple Registers 4x
|
|
#define MODBUSC_F17 17 //Report Slave ID Diagnostics
|
|
#define MODBUSC_F20 20 //Read File Record File
|
|
#define MODBUSC_F21 21 //Write File Record File
|
|
#define MODBUSC_F22 22 //Mask Write Register 4x
|
|
#define MODBUSC_F23 23 //Read/Write Multiple Registers 4x
|
|
#define MODBUSC_F24 24 //Read FIFO Queue 4x
|
|
#define MODBUSC_F43 43 //13 CANopen Interface Transport Other 14 Read Device ID Other
|
|
#define MODBUSC_F26 26
|
|
|
|
#define MB_ADDRESS_BROADCAST ( 0 ) //! Modbus broadcast address.
|
|
#define MB_ADDRESS_MIN ( 1 ) //! Smallest possible slave address.
|
|
#define MB_ADDRESS_MAX ( 247 ) //! Biggest possible slave address.
|
|
#define MB_FUNC_NONE ( 0 )
|
|
#define MB_FUNC_READ_COILS ( 1 )
|
|
#define MB_FUNC_READ_DISCRETE_INPUTS ( 2 )
|
|
#define MB_FUNC_WRITE_SINGLE_COIL ( 5 )
|
|
#define MB_FUNC_WRITE_MULTIPLE_COILS ( 15 )
|
|
#define MB_FUNC_READ_HOLDING_REGISTER ( 3 )
|
|
#define MB_FUNC_READ_INPUT_REGISTER ( 4 )
|
|
#define MB_FUNC_WRITE_REGISTER ( 6 )
|
|
#define MB_FUNC_WRITE_MULTIPLE_REGISTERS ( 16 )
|
|
#define MB_FUNC_READWRITE_MULTIPLE_REGISTERS ( 23 )
|
|
#define MB_FUNC_DIAG_READ_EXCEPTION ( 7 )
|
|
#define MB_FUNC_DIAG_DIAGNOSTIC ( 8 )
|
|
#define MB_FUNC_DIAG_GET_COM_EVENT_CNT ( 11 )
|
|
#define MB_FUNC_DIAG_GET_COM_EVENT_LOG ( 12 )
|
|
#define MB_FUNC_OTHER_REPORT_SLAVEID ( 17 )
|
|
#define MB_FUNC_ERROR ( 128 )
|
|
|
|
/* ----------------------- Defines ------------------------------------------*/
|
|
#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF )
|
|
#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_READ_SIZE ( 4 )
|
|
#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D )
|
|
|
|
#define MB_PDU_FUNC_READ_RSP_BYTECNT_OFF ( MB_PDU_DATA_OFF )
|
|
|
|
|
|
#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_READ_SIZE ( 4 )
|
|
#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D )
|
|
|
|
#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 0)
|
|
#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_WRITE_SIZE ( 4 )
|
|
|
|
#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF + 0 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_REGCNT_MAX ( 0x0078 )
|
|
|
|
#define MB_PDU_FUNC_READWRITE_READ_ADDR_OFF ( MB_PDU_DATA_OFF + 0 )
|
|
#define MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 4 )
|
|
#define MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF ( MB_PDU_DATA_OFF + 6 )
|
|
#define MB_PDU_FUNC_READWRITE_BYTECNT_OFF ( MB_PDU_DATA_OFF + 8 )
|
|
#define MB_PDU_FUNC_READWRITE_WRITE_VALUES_OFF ( MB_PDU_DATA_OFF + 9 )
|
|
#define MB_PDU_FUNC_READWRITE_SIZE_MIN ( 9 )
|
|
|
|
|
|
/* ----------------------- Defines ------------------------------------------*/
|
|
#define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_READ_SIZE ( 4 )
|
|
#define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 )
|
|
|
|
#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_WRITE_SIZE ( 4 )
|
|
|
|
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 )
|
|
#define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 )
|
|
|
|
|
|
#define MB_PDU_FUNC_READ_DISCCNT_OFF ( MB_PDU_DATA_OFF + 2 )
|
|
#define MB_PDU_FUNC_READ_SIZE ( 4 )
|
|
#define MB_PDU_FUNC_READ_DISCCNT_MAX ( 0x07D0 )
|
|
|
|
|
|
#define INVALID_REGISTER_VALUE 0xffff
|
|
#define MODBUSP_SINGLE_REGISTER 0
|
|
#define MODBUSP_DOUBLE_REGISTER 1
|
|
|
|
#define MODBUSP_READ_YX1_FRAME 0x00000001
|
|
#define MODBUSP_READ_YX2_FRAME 0x00000002
|
|
#define MODBUSP_READ_YC1_FRAME 0x00000004
|
|
#define MODBUSP_READ_YC2_FRAME 0x00000008
|
|
#define MODBUSP_READ_YC3_FRAME 0x00000010
|
|
#define MODBUSP_READ_YC4_FRAME 0x00000020
|
|
#define MODBUSP_READ_YM1_FRAME 0x00000040
|
|
#define MODBUSP_READ_YM2_FRAME 0x00000080
|
|
#define MODBUSP_SET_TIME_FRAME 0x00000100
|
|
#define MODBUSP_GET_DATA_FRAME 0x00000200
|
|
#define MODBUSP_ACK_SOE_FRAME 0x00000400
|
|
|
|
#define MODBUSP_READ_YX1 1
|
|
#define MODBUSP_READ_YX2 2
|
|
#define MODBUSP_READ_YC1 3
|
|
#define MODBUSP_READ_YC2 4
|
|
#define MODBUSP_READ_YC3 5
|
|
#define MODBUSP_READ_YC4 6
|
|
#define MODBUSP_READ_YM1 7
|
|
#define MODBUSP_READ_YM2 8
|
|
#define MODBUSP_YK_SELECT 9
|
|
#define MODBUSP_YK_EXECUTE 10
|
|
#define MODBUSP_YK_CANCEL 11
|
|
#define MODBUSP_SET_TIME 12
|
|
#define MODBUSP_YT_SELECT 15
|
|
#define MODBUSP_YT_EXECUTE 16
|
|
#define MODBUSP_YT_CANCEL 17
|
|
#define MODBUSP_READ_SOE 18
|
|
#define MODBUSP_ACK_SOE 19
|
|
|
|
#define MODBUS_ERROR_FUNC 1
|
|
#define MODBUS_ERROR_ADDR 2
|
|
#define MODBUS_ERROR_VALUE 3
|
|
|
|
#define MODBUS_MAX_BITMAP_REGISTER_NUM (0x7d0 >> 4)
|
|
//#define MODBUS_MAX_WORD_REGISTER_NUM 0x7d
|
|
#define MODBUS_MAX_WORD_REGISTER_NUM 76
|
|
|
|
#define MB_PDU_SIZE_MAX 253 //< Maximum size of a PDU.
|
|
#define MB_PDU_SIZE_MIN 1 //< Function Code
|
|
#define MB_PDU_FUNC_OFF 0 //< Offset of function code in PDU.
|
|
#define MB_PDU_DATA_OFF 1 //< Offset for response data in PDU.
|
|
|
|
#define MB_TCP_PROTOCOL_ID 0 // 0 = Modbus Protocol
|
|
|
|
#define MODBUS_RTU_AUTOMATIC_FRAME_MAX 512
|
|
#define MODBUS_RTU_AUTOMATIC_FRAME 256
|
|
|
|
#pragma pack(1)
|
|
typedef struct
|
|
{
|
|
BYTE param[MAX_UNIT_POINT_PARAM_SIZE];
|
|
} STRUCT_PARAM;
|
|
|
|
typedef struct
|
|
{
|
|
BYTE FrameType; //报文类型
|
|
BYTE FuncCode; //功能码
|
|
WORD RegBegin; //起始寄存器地址
|
|
short RegCount; //读取寄存器数量
|
|
} struModbusExtFrame;
|
|
|
|
#pragma pack()
|
|
typedef enum
|
|
{
|
|
MB_REG_READ, //!< Read register values and pass to protocol stack.
|
|
MB_REG_WRITE //!< Update register values.
|
|
} eMBRegisterMode;
|
|
|
|
typedef enum
|
|
{
|
|
MB_ENOERR, //!< no error.
|
|
MB_ENOREG, //!< illegal register address.
|
|
MB_EINVAL, //!< illegal argument.
|
|
MB_EPORTERR, //!< porting layer error.
|
|
MB_ENORES, //!< insufficient resources.
|
|
MB_EIO, //!< I/O error.
|
|
MB_EILLSTATE, //!< protocol stack in illegal state.
|
|
MB_ETIMEDOUT //!< timeout error occurred.
|
|
} eMBErrorCode;
|
|
|
|
#define MB_FUNC_HANDLERS_MAX ( 16 )
|
|
typedef enum
|
|
{
|
|
MB_EX_NONE = 0x00,
|
|
MB_EX_ILLEGAL_FUNCTION = 0x01,
|
|
MB_EX_ILLEGAL_DATA_ADDRESS = 0x02,
|
|
MB_EX_ILLEGAL_DATA_VALUE = 0x03,
|
|
MB_EX_SLAVE_DEVICE_FAILURE = 0x04,
|
|
MB_EX_ACKNOWLEDGE = 0x05,
|
|
MB_EX_SLAVE_BUSY = 0x06,
|
|
MB_EX_MEMORY_PARITY_ERROR = 0x08,
|
|
MB_EX_GATEWAY_PATH_FAILED = 0x0A,
|
|
MB_EX_GATEWAY_TGT_FAILED = 0x0B
|
|
} eMBException;
|
|
|
|
#if 0
|
|
value_string frame_type[] = {
|
|
{ MODBUSP_READ_YX1, "MODBUSP_READ_YX1" },
|
|
{ MODBUSP_READ_YX2, "MODBUSP_READ_YX2" },
|
|
{ MODBUSP_READ_YC1, "MODBUSP_READ_YC1" },
|
|
{ MODBUSP_READ_YC2, "MODBUSP_READ_YC2" },
|
|
{ MODBUSP_READ_YC3, "MODBUSP_READ_YC3" },
|
|
{ MODBUSP_READ_YC4, "MODBUSP_READ_YC4" },
|
|
{ MODBUSP_READ_YM1, "MODBUSP_READ_YM1" },
|
|
{ MODBUSP_READ_YM2, "MODBUSP_READ_YM2" },
|
|
{ MODBUSP_YK_SELECT, "MODBUSP_YK_SELECT" },
|
|
{ MODBUSP_YK_EXECUTE, "MODBUSP_YK_EXECUTE" },
|
|
{ MODBUSP_YK_CANCEL, "MODBUSP_YK_CANCEL" },
|
|
{ MODBUSP_SET_TIME, "MODBUSP_SET_TIME" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
value_string err_string[] = {
|
|
{ 1, "Illegal Function" },
|
|
{ 2, "Illegal Data Address" },
|
|
{ 3, "Illegal Data Value" },
|
|
{ 4, "Slave Device Failure" },
|
|
{ 5, "Acknowledge" },
|
|
{ 6, "Slave Device Busy" },
|
|
{ 7, "Negative Acknowledge" },
|
|
{ 8, "Memory Parity Error" },
|
|
{ 10, "Gateway Path Unavailable" },
|
|
{ 11, "Gateway Target Device Failed to Respond" },
|
|
{ 0, NULL }
|
|
};
|
|
#endif
|
|
#endif //_MODBUS_DEFINE_H_
|