刚写完一个modbus通讯协议,调试完,整理出来了,软件代码只能为大家提供一个思路,仅供参考。
//communication.h
#include "H01_Global\_Define.h"
#include "H01_Global\base_types.h"
#define SIZE_BUF_RECE 100
#define SIZE_BUF_TRAN 100
#define TRANS_TIMER_DELAY_1MS 1
#define TRANS_TIMER_DELAY_10MS 10
#define TRANS_TIMER_DELAY_100MS 100
#define TRANS_TIMER_DELAY_1S 1000
typedef union
{
uint16_t word;
struct
{
uint8_t low;
uint8_t high;
}byte;
struct
{
uint8_t bit0:1;
uint8_t bit1:1;
uint8_t bit2:1;
uint8_t bit3:1;
uint8_t bit4:1;
uint8_t bit5:1;
uint8_t bit6:1;
uint8_t bit7:1;
uint8_t bit8:1;
uint8_t bit9:1;
uint8_t bit10:1;
uint8_t bit11:1;
uint8_t bit12:1;
uint8_t bit13:1;
uint8_t bit14:1;
uint8_t bit15:1;
}BIT;
}WORD_BYTE;
typedef struct
{
uint32_t MODBUS_Reg_Set_Speed;
uint32_t MODBUS_Reg_Set_Enable_VSP;
uint32_t MODBUS_Reg_Set_Dir;
uint32_t MODBUS_Reg_Force_Stop;
}MODBUS_HOLDING_REGISTORS;
typedef struct
{
uint32_t MODBUS_Reg_Get_Motor_Type;
uint32_t MODBUS_Reg_Get_Software_Version;
uint32_t MODBUS_Reg_Get_Running_Status;
uint32_t MODBUS_Reg_Get_Running_Speed;
uint32_t MODBUS_Reg_Get_Phase_Current;
uint32_t MODBUS_Reg_Get_IPM_Temperature;
uint32_t MODBUS_Reg_Get_DC_Voltage;
uint32_t MODBUS_Reg_Get_Running_Dir;
uint32_t MODBUS_Reg_Get_Errors;
}MODBUS_INPUT_REGISTORS;
typedef struct
{
uint32_t dev_comm;
uint32_t delay_tran;
uint32_t Function_Code;
uint32_t flag_state;
uint32_t addr_dev;
uint32_t pt_tran;
uint32_t pt_rece;
uint32_t len_tran;
uint32_t len_rece;
uint32_t xorsum_rece;
uint32_t addsum_rece;
uint32_t xorsum_tran;
uint32_t addsum_tran;
uint32_t flag_trans_start;
uint32_t flag_trans_end;
uint32_t flag_trans_timer_ON;
uint32_t count_trans_timer_1ms;
uint32_t count_trans_timer_10ms;
uint32_t count_trans_timer_100ms;
uint32_t count_trans_timer_1s;
WORD_BYTE address_reg;
WORD_BYTE num_reg;
uint32_t buf_rece[SIZE_BUF_RECE];
uint32_t buf_tran[SIZE_BUF_TRAN];
MODBUS_HOLDING_REGISTORS Modbus_Holding_Reg ;
MODBUS_INPUT_REGISTORS Modbus_Input_Reg;
}MODBUS_COMM;
extern void Uart_Trans(void);
extern void Uart_Receive(void);
extern void Init_Modbus(void);
extern void Timer_Task(void);
extern void Proc_Modbus_Data(void);
extern uint32_t Read_Reg_Modbus(MODBUS_COMM *modbus);
void Set_Reg_Modbus(MODBUS_COMM *modbus, WORD_BYTE data);
extern void CRC_Rece_Check(void);
extern uint32_t Flag_Trans_End;
extern uint32_t Timer_Count;
extern uint32_t Timer_1s;
// communication.c
#include "H05_User\AllInOne.h"
/*****************************************************************************/
/* Local pre-processor symbols/macros ('#defin

1383

被折叠的 条评论
为什么被折叠?



