injectorCTL/protocol.h

147 lines
5.5 KiB
C
Raw Normal View History

2024-12-10 12:01:16 +00:00
#ifndef PROTOCOL_H
#define PROTOCOL_H
#include <stdint.h>
// 帧头帧尾定义
#define FRAME_HEADER 0xA55A5AA5
#define FRAME_TAIL 0x5AA5A55A
// 功能码定义
#define CMD_STATUS_QUERY 0x0001 // 状态查询
#define CMD_VALVE_CTRL 0x0002 // 三通阀控制
#define CMD_PUMP_RUN_TIME 0x0003 // 泵运行时长控制
#define CMD_PUMP_RUN_SPEED 0x0004 // 泵运行速度设置
#define CMD_SOFT_STOP 0x0005 // 软急停功能
#define CMD_PUMP_RUN_STEP 0x0006 // 泵步进设置
#define CMD_SYSTEM_INIT 0x0007 // 系统初始化
// MOONS驱动器支持的Modbus功能码如下
// 0x03读取保持寄存器
// 0x06写单个寄存器
// 0x10写多个寄存器
#define RTU_PUMP_FUNC_READ_REG 0x03 // 读取保持寄存器
#define RTU_PUMP_FUNC_WRITE_REG 0x06 // 写单个寄存器
#define RTU_PUMP_FUNC_WRITE_MULTI_REG 0x10 // 写多个寄存器
/* 设置加速度、减速度、速度和目标位置对应MOONS SCL指令如下
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
| SCL指令 | | | | | | |
| | | | | | | |
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
| AC | 100 | Rps/sec | 40028 | 001B | 600 | 10040028 |
| | | | | | | 600(0x0258) |
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
| DE | 100 | Rps/sec | 40029 | 001C | 600 | 10040029 |
| | | | | | | 600(0x0258) |
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
| VE | 1 | Rps | 40030 | 001D | 240 | 140030 |
| | | | | | | 240(0x00F0) |
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
| DI | 200000 | Counts | 40031,40032 | 001E,001F | 200000 | 2000004003140032 |
| | | | | | | 200000(0x00030D40) |
+----------+----------+----------+--------------+--------------+--------------+--------------------------------------------------+
*/
#define RTU_PUMP_CMD_AC 0x001B // 加速度
#define RTU_PUMP_CMD_DE 0x001C // 减速度
#define RTU_PUMP_CMD_VE 0x001D // 速度
#define RTU_PUMP_CMD_DI 0x001E // 目标位置
// 错误码定义
typedef enum {
ERR_NONE = 0x00,
ERR_COMM = 0x01,
ERR_CTRL = 0x02,
// 其他错误码待定
} ErrorCode_t;
// 设备状态相关定义
// 1. 下挂设备状态
typedef enum {
DEVICE_OFFLINE = 0,
DEVICE_ONLINE = 1
} DeviceStatus_t;
// 2. 三通阀角度
typedef enum {
VALVE_ANGLE_120 = 120,
VALVE_ANGLE_210 = 210
} ValveAngle_t;
// 3. 泵状态
typedef enum {
PUMP_STOP = 0,
PUMP_CLOCKWISE = 1,
PUMP_ANTICLOCKWISE = 2
} PumpStatus_t;
// 4. 泵速度范围
#define PUMP_SPEED_MIN 0
#define PUMP_SPEED_MAX 100
// 5. 气泡状态
typedef enum {
BUBBLE_NONE = 0,
BUBBLE_DETECTED = 1
} BubbleStatus_t;
// 6. 急停按键状态
typedef enum {
ESTOP_NORMAL = 0,
ESTOP_PRESSED = 1
} EstopStatus_t;
// 7. 初始化状态
typedef enum {
INIT_IN_PROGRESS = 0,
INIT_SUCCESS = 1,
INIT_FAILED = 2
} InitStatus_t;
// 三通阀结构体
typedef struct {
uint8_t angle1; // 阀门1角度 (120/210)
uint8_t angle2; // 阀门2角度 (120/210)
} ValveStatus;
// 泵结构体
typedef struct {
uint8_t status1; // 泵1运行状态 (停止/顺时针/逆时针)
uint8_t status2; // 泵2运行状态 (停止/顺时针/逆时针)
uint8_t speed1; // 泵1速度百分比 (0-100)
uint8_t speed2; // 泵2速度百分比 (0-100)
} PumpStatus;
// 设备状态结构体
typedef struct {
uint8_t deviceStatus; // 下挂设备状态
ValveStatus valves; // 两个三通阀状态
PumpStatus pumps; // 两个泵状态
uint8_t bubbleStatus; // 气泡状态
uint8_t stopStatus; // 急停状态
uint8_t errorCode; // 错误码
uint8_t initStatus; // 初始化状态
} DeviceStatus;
// 定义协议消息结构
typedef struct {
uint8_t device_id;
uint8_t func;
uint8_t reg_addr[2];
uint8_t reg_cnt[2];
uint8_t data_cnt;
uint8_t data[0];//柔性数组大小由data_cnt决定
uint8_t crc[2];
} RTU_Frame;
// 函数声明
uint8_t ProcessCommand(uint8_t *rxBuf, uint16_t rxLen, uint8_t *txBuf, uint16_t *txLen);
uint16_t CalculateCRC16(uint8_t *data, uint16_t length);
#endif // PROTOCOL_H