map/das-dn/inc/modbus_def.h

234 lines
9.1 KiB
C
Raw Normal View History

2024-07-08 10:27:17 +08:00
#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_