#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_