74 lines
2.7 KiB
C
74 lines
2.7 KiB
C
#ifndef _MODBUS_RTU_MASTER_H_
|
||
#define _MODBUS_RTU_MASTER_H_
|
||
|
||
#include "apps_gather.h"
|
||
#include "modbus_rtu.h"
|
||
|
||
#define TX_BUFF_MAX 128
|
||
#define TX_DATA_MAX 100
|
||
#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_value8[TX_DATA_MAX]; //需要写入的数值,8位
|
||
uint16_t data_tx_value16[TX_DATA_MAX]; //需要写入的数值,16位
|
||
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[100]; //在显示屏上显示读取到的结果
|
||
}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
|
||
|
||
|