You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.8 KiB
174 lines
5.8 KiB
#ifndef APPHAL_CAN_CONFIG_H_
|
|
#define APPHAL_CAN_CONFIG_H_
|
|
|
|
#include "cmsis_os2.h"
|
|
|
|
// 大端转小端
|
|
#define INT32_BIG_TO_LITTLE(x) \
|
|
((((x) & 0xFF000000) >> 24) | \
|
|
(((x) & 0x00FF0000) >> 8) | \
|
|
(((x) & 0x0000FF00) << 8) | \
|
|
(((x) & 0x000000FF) << 24))
|
|
|
|
// 小端转大端
|
|
#define INT32_LITTLE_TO_BIG(x) \
|
|
((((x) & 0xFF000000) >> 24) | \
|
|
(((x) & 0x00FF0000) >> 8) | \
|
|
(((x) & 0x0000FF00) << 8) | \
|
|
(((x) & 0x000000FF) << 24))
|
|
|
|
#define SWAP_16(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
|
|
|
|
// 电机驱动板 can_frame_id 由 拨码器 1234 配置 【范围 0~15】
|
|
#define CAN_BASE_FRAME_ID 0x08 // CAN 响应帧ID = CAN_BASE_FRAME_ID + can_frame_id
|
|
#define CAN_FRAME_RANGE 0x20
|
|
// ---- ---- CAN 接收【控制帧】 ID ---- ----
|
|
// #define CAN_X_MOTOR_FRAME_ID (CAN_BASE_FRAME_ID + 0x01)
|
|
// #define CAN_Y_MOTOR_FRAME_ID (CAN_BASE_FRAME_ID + 0x02)
|
|
// #define CAN_Z_MOTOR_FRAME_ID (CAN_BASE_FRAME_ID + 0x03)
|
|
|
|
#define CAN_X_MOTOR_FRAME_ID 0x09
|
|
#define CAN_Y_MOTOR_FRAME_ID 0x0A
|
|
#define CAN_Z_MOTOR_FRAME_ID 0x0B
|
|
|
|
// ---- ---- CAN 发送【主动上报】帧 ID ---- ----
|
|
#define UPLOAD_MOTOR_POS_ID (CAN_BASE_FRAME_ID + 0x04) // 电机驱动板 电机位置 + 电机 状态 上传帧
|
|
//#define UPLOAD_MOTOR_SPEED_ID (CAN_BASE_FRAME_ID + 0x02) // 电机驱动板 电机位置 + 电机 状态 上传帧
|
|
#define UPLOAD_MOTOR_SENSOR (CAN_BASE_FRAME_ID + 0x05) // 电机驱动板 电机位置 + 电机 状态 上传帧
|
|
|
|
|
|
// 主动推送事件
|
|
#define UPLOAD_EVENT_ID 0x10
|
|
// 定时推送状态
|
|
#define UPLOAD_STATUS_ID 0x11
|
|
|
|
|
|
// 基础功能码
|
|
#define CMD_FUN_CODE 0x5A
|
|
#define UPLOAD_FUN_CODE 0xA0
|
|
|
|
// ==== ==== ==== ==== 线圈地址 ==== ==== ==== ====
|
|
#define MOTOR_ENABLE_ADDRESS 0x00 // 定义电机使能地址
|
|
#define STOP_ADDRESS 0x01 // 定义停止地址
|
|
#define RESET_POSITION_ADDRESS 0x02 // 定义重置位置地址
|
|
#define MOVE_HOME_ADDRESS 0x03 // 回 HOME
|
|
#define CLEANING_VALVE_ADDRESS 0x21 // 清洗阀
|
|
#define NOZZLE_VALVE_ADDRESS 0x22 // 喷嘴阀
|
|
#define DEHUMIDIFICATION_VALVE_ADDRESS 0x23 // 除湿阀
|
|
#define LIGHTING_PANEL_ADDRESS 0x24 // 照明灯板
|
|
#define LASER_ADDRESS 0x25 // 激光
|
|
#define HIGH_VOLTAGE_PACK_POWER_ON_ADDRESS 0x26 // 高压包供电开启
|
|
#define PUMP_DRIVER_ADDRESS 0x27 // 注射泵驱动
|
|
#define THREE_VALVE_ADDRESS_VT 0x28 // 三通阀 VT
|
|
#define THREE_VALVE_ADDRESS_POWER 0x29 // 三通阀 POWER
|
|
|
|
|
|
#define MOVE_FINISHED_READ_ADDRESS 0x10
|
|
#define AT_ORIGIN_READ_ADDRESS 0x11
|
|
#define AT_LIMIT_READ_ADDRESS 0x12
|
|
|
|
#define E_STOP_READ_ADDRESS 0x60
|
|
#define PAUSE_READ_ADDRESS 0x61
|
|
#define THREE_WAY_VALVE_READ_ADDRESS 0x62
|
|
#define SYRINGE_PUMP_READ_ADDRESS 0x63
|
|
|
|
#define RT_POS_READ_ADDRESS 0x00 // 实时位置
|
|
#define RT_SPEED_READ_ADDRESS 0x02 // 实时速度
|
|
|
|
#define T_RH_READ_ADDRESS 0x60 // 湿度 + 温度
|
|
#define FLOW_READ_ADDRESS 0x62 // 流量计
|
|
#define MOTOR_XYZ_ADDRESS 0x80 // 获取xyz device 地址
|
|
|
|
#define BOARD_INFO_READ_COILS 0x48 // 板卡线圈
|
|
#define BOARD_INFO_READ_ADDRESS 0xB0 // 板卡寄存器
|
|
|
|
#define QUERY_MOTOR_STATUS 0xA5
|
|
|
|
|
|
// ==== ==== ==== ==== 寄存器地址 ==== ==== ==== ====
|
|
#define SPEED_ADDRESS 0x00 // 定义速度地址
|
|
#define TARGET_POSITION_ADDRESS 0x02 // 定义目标位置地址
|
|
#define I_RUN_ADDRESS 0x04 //电机运行电流地址
|
|
#define V_SPEED_ADDRESS 0x06 // 电机 速度模式 闭环控制 目标速度
|
|
#define V_TARGET_POSITION_ADDRESS 0x08 // 电机 速度模式 闭环控制 目标位置
|
|
#define SHIFT_TARGET_POSITION_ADDRESS 0x0A // 电机 位置模式 闭环控制 相对位置
|
|
#define HIGH_VOLTAGE_PACK_SET_ADDRESS 0x20 // 高压电包设置寄存器
|
|
#define PUMP_DRIVER_SPEED_ADDRESS 0x21 // 注射泵速度 ML
|
|
#define LASER_POWER_ADDRESS 0x22 // 激光控制
|
|
#define PUMP_DRIVER_SET_SPEED_ADDRESS 0x23 // 设置注射泵速度 ML
|
|
|
|
// 主动推送事件 功能码
|
|
#define UPLOAD_FUN_CODE_MOTOR_X 0x5A
|
|
#define UPLOAD_FUN_CODE_MOTOR_Y 0x5B
|
|
#define UPLOAD_FUN_CODE_MOTOR_Z 0x5C
|
|
// 定时推送状态 功能码
|
|
// [0] 功能码
|
|
enum UploadStatusCode {
|
|
USC_MotorXPos = 0x1A, // [1-4] 位置(大端) + [5] 运动状态 + [6] 原点 + [7] 限位
|
|
USC_MotorXSpeed = 0x1B, // [1-4] 速度
|
|
USC_MotorYPos = 0x3A, // [1-4] 位置(大端) + [5] 运动状态 + [6] 原点 + [7] 限位
|
|
USC_MotorYSpeed = 0x3B, // [1-4] 速度
|
|
USC_MotorZPos = 0x5A, // [1-4] 位置(大端) + [5] 运动状态 + [6] 原点 + [7] 限位
|
|
USC_MotorZSpeed = 0x5B, // [1-4] 速度
|
|
USC_Sensor_D_1 = 0x7A, // 数字量 [1] 急停 + [2] 暂停 + [3] 三通阀 + [4] 注射泵
|
|
USC_Sensor_A_1 = 0x8A, // 模拟量 [1-2] 流量计(大端) + [3-4] 湿度(大端) + [5-6] 温度(大端)
|
|
};
|
|
#define UPLOAD_STUTUS_MOTOR_X_POS 0x0A
|
|
|
|
#define UPLOAD_STUTUS_MOTOR_ 0x5B
|
|
#define UPLOAD_FUN_CODE_MOTOR_Z 0x5C
|
|
|
|
enum CAN_PDU_FunCode
|
|
{
|
|
CAN_PDU_READ_COILS = 0x01,
|
|
CAN_PDU_READ_DISCRETE_INPUTS = 0x02,
|
|
CAN_PDU_READ_HOLDING_REGISTERS = 0x03,
|
|
CAN_PDU_WRITE_SINGLE_COIL = 0x05,
|
|
CAN_PDU_WRITE_SINGLE_REGISTER = 0x06,
|
|
CAN_PDU_WRITE_MULTIPLE_COILS = 0x0F,
|
|
CAN_PDU_WRITE_MULTIPLE_REGISTERS = 0x10
|
|
};
|
|
|
|
enum CanPDUErrorCodes {
|
|
CAN_PDU_OK = 0x00,
|
|
CAN_PDU_ILLEGAL_FUNCTION = 0x01,
|
|
CAN_PDU_ILLEGAL_DATA_ADDRESS = 0x02,
|
|
CAN_PDU_ILLEGAL_DATA_VALUE = 0x03,
|
|
CAN_PDU_ILLEGAL_EXCEPTION = 0x10,
|
|
CAN_PDU_ILLEGAL_TIME_OUT = 0x44
|
|
};
|
|
|
|
#define CAN_CONFIG CanConfig::getInstance()
|
|
|
|
class CanConfig {
|
|
private:
|
|
// 私有构造函数,防止外部实例化
|
|
CanConfig();
|
|
|
|
// 禁止拷贝构造函数和赋值运算符
|
|
CanConfig(const CanConfig&) = delete;
|
|
CanConfig& operator=(const CanConfig&) = delete;
|
|
|
|
// 静态成员变量,保存单例实例
|
|
static CanConfig* instance;
|
|
|
|
// CAN 帧 ID
|
|
uint32_t can_frame_id;
|
|
|
|
public:
|
|
// 互斥锁句柄,用于线程安全
|
|
static osMutexId_t mutex;
|
|
|
|
public:
|
|
// 静态方法,获取单例实例
|
|
static CanConfig* getInstance();
|
|
|
|
|
|
// 设置 CAN 帧 ID
|
|
void setCanFrameId(uint32_t id);
|
|
|
|
// 获取 CAN 帧 ID
|
|
uint32_t getCanFrameId() const;
|
|
};
|
|
|
|
#endif /* APPHAL_CAN_CONFIG_H_ */
|