sggt/App/MODBUS/Inc/modbus_rtu_master.h

73 lines
2.6 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_RTU_MASTER_H_
#define _MODBUS_RTU_MASTER_H_
#include "apps_gather.h"
#include "modbus_rtu.h"
#define TX_BUFF_MAX 32
#define TX_DATA_MAX 16
#define RX_BUFF_MAX 128
#define TX_NONE 0x00 //没有需要发送的数据
#define TX_WAITING 0x01 //数据准备完成,等待发送
#define TX_OK 0x02 //发送完成
#define RX_NONE 0x00 //没有接收到数据
#define RX_WAITING 0x01 //等待接收
#define RX_OK 0x02 //接收完成
typedef enum
{
RX_ERROR_NONE = 0, //数据接收未出现错误
RX_ERROR_TIMEOUT, //接收数据超时
RX_ERROR_OVERFLOW, //接收到的数据超出缓存区
RX_ERROR_WRONG_ID, //接收到的设备ID与目标ID不符
RX_ERROR_WRONG_LENGTH, //数据长度不符
RX_ERROR_WRONG_CMD //命令无效
}ERROR_NESSAGE_RX;
typedef enum
{
TX_ERROR_NONE = 0, //数据发送未出现错误
TX_ERROR_WRONG_CMD, //命令字错误
TX_ERROR_COIL_NUM, //写多个线圈时,线圈数量或字节数错误
TX_ERROR_HOLDREG_NUM //写保持寄存器时,寄存器数量或字节数错误
}ERROR_NESSAGE_TX;
typedef struct
{
uint8_t target_id; //目标ID从设备识别号、地址
uint8_t command_code; //命令字
uint16_t start_address; //起始地址
uint16_t register_num; //线圈、寄存器数量
uint16_t crc16; //MODBUS_CRC16校验码
uint8_t byte_num; //需要写入的线圈、保持寄存器字节数
uint8_t data_tx_value[TX_DATA_MAX]; //需要写入的数值,8位
uint8_t data_tx[TX_BUFF_MAX]; //存放完整的发送数据报
uint8_t data_rx[RX_BUFF_MAX]; //存放完整的接收数据报
uint8_t data_tx_len; //发送的数据报长度
uint8_t data_rx_len; //接收到的数据报长度
ERROR_NESSAGE_RX rx_error_message; //接收过程中的错误信息
ERROR_NESSAGE_TX tx_error_message; //发送过程中的错误信息
uint16_t timeout; //超时、等待时间
uint8_t rx_flag; //接收标志位
uint8_t tx_flag; //发送标志位
char result_display[200]; //在显示屏上显示读取到的结果
}MODBUS_MASTER;
extern MODBUS_MASTER mod_master;
void modbus_rtu_master_init(void);
void modbus_rtu_master_load(void);
void modbus_rtu_master_send(void);
void modbus_rtu_master_analysis(void);
void modbus_rtu_master_data_process(void);
#endif