From 67ca69985af9109a0603a1cde71f21b940c059ff Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期四, 15 五月 2025 09:12:53 +0800 Subject: [PATCH] 完全将免布线标签代码移植过来版本 --- keil/include/components/hido/Include/HIDO_Modbus.h | 128 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 128 insertions(+), 0 deletions(-) diff --git a/keil/include/components/hido/Include/HIDO_Modbus.h b/keil/include/components/hido/Include/HIDO_Modbus.h new file mode 100644 index 0000000..d529d5c --- /dev/null +++ b/keil/include/components/hido/Include/HIDO_Modbus.h @@ -0,0 +1,128 @@ +#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_ */ + -- Gitblit v1.9.3