actuator/modbus/Inc/modbus.h

117 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __MODBUS_H
#define __MODBUS_H
#include "timer.h"
#include "stdint.h"
#include "uarts.h"
#include "ch395.h"
/*--------------------------------- 宏定义 -----------------------------------*/
//功能码
#define ReadCoilState 0x01 //读取线圈状态
#define ReadDisInputState 0x02 //读取输入状态
#define ReadHoldReg 0x03 //读取保持寄存器
#define ReadInputReg 0x04 //读取输入寄存器
#define WriteSingleCoil 0x05 //强制写单线圈输出状态
#define WriteSingleReg 0x06 //预设(写)单寄存器
#define WriteMultiCoil 0x0F //强制写多线圈输出状态
#define WriteMultiReg 0x10 //预设(写)多寄存器
#define COIL_ADD_MIN 0x10
#define COIL_ADD_MAX 0x5F
#define MAX_COIL_NUM ((COIL_ADD_MAX) - (COIL_ADD_MIN) + 1)
#define DIS_ADD_MIN 0x00
#define DIS_ADD_MAX 0x5F
#define MAX_DIS_NUM ((DIS_ADD_MAX) - (DIS_ADD_MIN) + 1)
#define INPUT_REG_ADD_MIN 0x00
#define INPUT_REG_ADD_MAX 0x5F
#define MAX_INPUT_REG_NUM ((INPUT_REG_ADD_MAX) - (INPUT_REG_ADD_MIN) + 1)
#define HOLD_REG_ADD_MIN 0x00
#define HOLD_REG_ADD_MAX 0x5F
#define MAX_HOLD_REG_NUM ((HOLD_REG_ADD_MAX) - (HOLD_REG_ADD_MIN) + 1)
#define BROADCAST_ADDRESS 0x00
#define LOCAL_ADDRESS 0x01
#define MAKEWORD(a,b) ((uint16_t)(((uint8_t)(a)) | ((uint16_t)((uint8_t)(b))) << 8))
//串口相关定义
#define UART1_RXSIZE 1024 //一帧接收数据的最大值
#define UART1_TXSIZE 1024 //一帧发送数据的最大值
#define MAX_SIZE 1024
#define MODBUS_UART uart1 //将串口改成相应的变量即可例如用到UART1此处改为uart1
#define MODBUS_HUART huart1 //将串口改成相应的变量即可例如用到UART1此处改为huart1
#define MODBUS_HTIM htim7 //将串口改成相应的变量即可例如用到UART1此处改为huart1
#define MODBUS_TCP g_ch395q_sta.socket[CH395Q_SOCKET_0].config
#define MODBUS_SOCKET CH395Q_SOCKET_0
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;
typedef union var_reg
{
uint16_t SamData [MAX_INPUT_REG_NUM]; // 采样数据
uint16_t InputReg[MAX_INPUT_REG_NUM]; // Reg 与 SamData
}Var_Reg;
typedef struct
{
uint8_t *rx_buf; //接收缓冲数组
uint16_t rx_buf_cnt; //接收缓冲计数值
uint16_t rx_size; //接收数据大小
uint8_t rx_flag; //接收完成标志位
uint8_t *tx_buf; //发送缓冲数组
uint16_t tx_buf_cnt; //发送缓冲计数值
uint16_t tx_size; //实际发送数据大小
}UART_BUF;
extern UART_BUF uart1; //串口结构体实体
extern UART_BUF uart6; //串口结构体实体
extern uint8_t RxBuffer; //接收数据中间变量
extern uint8_t u1_RxBuffer,u6_RxBuffer,u2_RxBuffer,u3_RxBuffer; //接收数据中间变量
extern uint8_t CoilState[(MAX_COIL_NUM + 7) / 8];
extern uint8_t DisState [(MAX_DIS_NUM + 7) / 8];
extern uint16_t InputReg[MAX_INPUT_REG_NUM];
extern uint16_t HoldReg[MAX_HOLD_REG_NUM];
extern Var_Reg SamVarReg;
void modbus_rtu_init(void);//RTU初始化
void modbus_rx_cb(void);
uint16_t ModbusCRC16(uint8_t *ptr, uint16_t len);
void GetOneCoilVal(uint16_t wCoilAddr, uint8_t *pCoilVal);
void GetOneDisInputVal(uint16_t wDisInputAddr, uint8_t *pDisInputVal);
uint16_t GetHoldRegData(uint16_t RegAdd);
uint16_t GetInputRegData(uint16_t RegAdd);
void WriteHoldRegData(uint16_t wRegAddr, uint16_t RegData);
void WriteOneCoilData(uint16_t wRegAddr, uint16_t RegData);
void modbus_process_rtu(void);
void modbus_process_tcp(void);
void modbus_analysis_tcp(uint8_t * upRxdbuf, uint16_t wRxdLen);
void ch395_spi_off( void );
#endif