对比新文件 |
| | |
| | | #ifndef _HIDO_MODBUS_H_ |
| | | #define _HIDO_MODBUS_H_ |
| | | |
| | | #include "HIDO_TypeDef.h" |
| | | #include "HIDO_FSM.h" |
| | | #include "HIDO_VLQueue.h" |
| | | |
| | | #define MODBUS_RTU_MIN_SIZE ( 4 ) |
| | | #define MODBUS_RTU_FUNC_CODE_OFFSET ( 1 ) |
| | | #define MODBUS_RTU_ADDR_OFFSET ( 0 ) |
| | | #define MODBUS_RTU_DATA_OFFSET ( 2 ) |
| | | |
| | | #define MODBUS_RTU_ADDR_SIZE ( 1 ) |
| | | #define MODBUS_RTU_FUNC_CODE_SIZE ( 1 ) |
| | | #define MODBUS_RTU_REGISTER_SIZE ( 2 ) |
| | | #define MODBUS_RTU_REGISTER_COUNT_SIZE ( 2 ) |
| | | #define MODBUS_RTU_COUNT_SIZE ( 1 ) |
| | | #define MODBUS_RTU_CRC16_SIZE ( 2 ) |
| | | |
| | | #define MODBUS_RTU_READ_HOLDING_REGISTER_SIZE ( \ |
| | | MODBUS_RTU_ADDR_SIZE \ |
| | | + MODBUS_RTU_FUNC_CODE_SIZE \ |
| | | + MODBUS_RTU_REGISTER_SIZE \ |
| | | + MODBUS_RTU_REGISTER_COUNT_SIZE \ |
| | | + MODBUS_RTU_CRC16_SIZE) |
| | | |
| | | #define MODBUS_RTU_WRITE_MULTIPLE_REGISTERS_SIZE(cnt) ( \ |
| | | MODBUS_RTU_ADDR_SIZE \ |
| | | + MODBUS_RTU_FUNC_CODE_SIZE \ |
| | | + MODBUS_RTU_REGISTER_SIZE \ |
| | | + MODBUS_RTU_COUNT_SIZE \ |
| | | + MODBUS_RTU_REGISTER_COUNT_SIZE \ |
| | | + (MODBUS_RTU_REGISTER_SIZE * (cnt)) \ |
| | | + MODBUS_RTU_CRC16_SIZE) |
| | | |
| | | #define MODBUS_ADDRESS_BROADCAST ( 255 ) /*! Modbus broadcast address. */ |
| | | #define MODBUS_ADDRESS_MIN ( 1 ) /*! Smallest possible slave address. */ |
| | | #define MODBUS_ADDRESS_MAX ( 247 ) /*! Biggest possible slave address. */ |
| | | #define MODBUS_FUNC_NONE ( 0 ) |
| | | #define MODBUS_FUNC_READ_COILS ( 1 ) |
| | | #define MODBUS_FUNC_READ_DISCRETE_INPUTS ( 2 ) |
| | | #define MODBUS_FUNC_WRITE_SINGLE_COIL ( 5 ) |
| | | #define MODBUS_FUNC_WRITE_MULTIPLE_COILS ( 15 ) |
| | | #define MODBUS_FUNC_READ_HOLDING_REGISTER ( 3 ) |
| | | #define MODBUS_FUNC_READ_INPUT_REGISTER ( 4 ) |
| | | #define MODBUS_FUNC_WRITE_REGISTER ( 6 ) |
| | | #define MODBUS_FUNC_WRITE_MULTIPLE_REGISTERS ( 16 ) |
| | | #define MODBUS_FUNC_READWRITE_MULTIPLE_REGISTERS ( 23 ) |
| | | #define MODBUS_FUNC_DIAG_READ_EXCEPTION ( 7 ) |
| | | #define MODBUS_FUNC_DIAG_DIAGNOSTIC ( 8 ) |
| | | #define MODBUS_FUNC_DIAG_GET_COM_EVENT_CNT ( 11 ) |
| | | #define MODBUS_FUNC_DIAG_GET_COM_EVENT_LOG ( 12 ) |
| | | #define MODBUS_FUNC_OTHER_REPORT_SLAVEID ( 17 ) |
| | | #define MODBUS_FUNC_ERROR ( 128 ) |
| | | |
| | | typedef enum |
| | | { |
| | | HIDO_MODBUS_MODE_MASTER, |
| | | HIDO_MODBUS_MODE_SLAVE, |
| | | } HIDO_ModbusModeEnum; |
| | | |
| | | typedef enum |
| | | { |
| | | HIDO_MODBUS_RESULT_NONE, |
| | | HIDO_MODBUS_RESULT_WAIT, |
| | | HIDO_MODBUS_RESULT_RESPONSE, |
| | | } HIDO_ModbusResultEnum; |
| | | |
| | | typedef struct |
| | | { |
| | | HIDO_VOID *m_pData; |
| | | HIDO_UINT32 m_u32Len; |
| | | HIDO_UINT32 m_u32SerialNumber; |
| | | }HIDO_ModbusDataStruct; |
| | | |
| | | typedef struct HIDO_ModbusStruct HIDO_ModbusStruct; |
| | | typedef HIDO_ModbusResultEnum (* HIDO_ModbusOnRecvFunc)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 _u8Addr, HIDO_UINT8 _u8FuncCode, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len, HIDO_UINT32 _u32SerialNumber); |
| | | typedef HIDO_VOID (* HIDO_ModbusSerialEvent)(HIDO_ModbusStruct *_pstModbus); |
| | | |
| | | struct HIDO_ModbusStruct |
| | | { |
| | | HIDO_UINT32 m_u32TimerID; |
| | | HIDO_UINT32 m_u32SerialTXOver; |
| | | HIDO_UINT32 m_u32SerialRXOver; |
| | | HIDO_UINT32 m_u32SerialRXReady; |
| | | HIDO_FSMStruct m_stFSM; |
| | | |
| | | HIDO_UINT32 m_u32NextSerialNumber; |
| | | HIDO_UINT32 m_u32CurrentSerialNumber; |
| | | |
| | | /* 浠ヤ笅鐢ㄦ埛瀹炵幇 */ |
| | | HIDO_UINT32 m_u32DelayUs; |
| | | |
| | | HIDO_VLQStruct m_stSendQueue; |
| | | |
| | | HIDO_UINT8 *m_pu8SendBuff; |
| | | HIDO_UINT32 m_u32SendBuffSize; |
| | | |
| | | HIDO_UINT32 m_u32TransferIndex; |
| | | HIDO_UINT32 m_u32TransferLen; |
| | | HIDO_UINT8 *m_pu8TransferBuff; |
| | | HIDO_UINT32 m_u32TransferBuffSize; |
| | | |
| | | HIDO_VOID (* m_fnTimerStart)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT32 _u32Us); |
| | | HIDO_VOID (* m_fnTimerStop)(HIDO_ModbusStruct *_pstModbus); |
| | | |
| | | HIDO_VOID (* m_fnSerialEnable)(HIDO_ModbusStruct* _pstModbus, HIDO_BOOL _bRxEnable, HIDO_BOOL _bTxEnable); |
| | | HIDO_INT32 (* m_fnSerialPutByte)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 _u8Byte); |
| | | HIDO_INT32 (* m_fnSerialGetByte)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 *_pu8Byte); |
| | | |
| | | HIDO_VOID *m_pPrivateData; |
| | | |
| | | HIDO_ModbusOnRecvFunc m_fnOnRecv; |
| | | HIDO_ModbusSerialEvent m_fnSerialTXOver; |
| | | HIDO_ModbusSerialEvent m_fnSerialRXOver; |
| | | }; |
| | | |
| | | HIDO_VOID HIDO_ModbusEnterCriticalSection(void); |
| | | HIDO_VOID HIDO_ModbusExitCriticalSection(void); |
| | | |
| | | HIDO_INT32 HIDO_ModbusInit(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusModeEnum _eMode); |
| | | HIDO_INT32 HIDO_ModbusSetOnRecvCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusOnRecvFunc _fnOnRecv); |
| | | HIDO_INT32 HIDO_ModbusSetSerialTXOverCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusSerialEvent _fnSerialEvent); |
| | | HIDO_INT32 HIDO_ModbusSetSerialRXOverCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusSerialEvent _fnSerialEvent); |
| | | HIDO_INT32 HIDO_ModbusFramePack(HIDO_UINT8 *_pu8FrameBuf, HIDO_UINT32 _u32FrameBufSize, HIDO_UINT8 _u8Addr, HIDO_UINT8 _u8FuncCode, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32DataLen, HIDO_UINT32 *_pu32FrameLen); |
| | | |
| | | #endif /* _HIDO_MODBUS_H_ */ |
| | | |