78 lines
2.6 KiB
C
78 lines
2.6 KiB
C
|
/*
|
|||
|
* @Author: mypx
|
|||
|
* @Date: 2025-08-01 16:41:56
|
|||
|
* @LastEditTime: 2025-09-25 16:52:54
|
|||
|
* @LastEditors: mypx mypx_coder@163.com
|
|||
|
* @Description:
|
|||
|
*/
|
|||
|
#ifndef __MB_COMMAND_H__
|
|||
|
#define __MB_COMMAND_H__
|
|||
|
#include "mb_regs_def.h"
|
|||
|
#include "nanomodbus.h"
|
|||
|
#include "pm_common.h"
|
|||
|
#include "pm_params.h"
|
|||
|
#include <stdint.h>
|
|||
|
// RT-Thread API
|
|||
|
#include <rtthread.h>
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
SYS_CTRL_INIT_CODE = 0x0001, // 设备初始化
|
|||
|
SYS_CTRL_START_MEAS_CODE = 0x0002, // 开始测量
|
|||
|
SYS_CTRL_STOP_MEAS_CODE = 0x0003, // 停止测量
|
|||
|
SYS_CTRL_CLEAR_DATA_CODE = 0x0004, // 数据清零
|
|||
|
SYS_CTRL_START_TEMP_CTRL_CODE = 0x0005, // 开始控温
|
|||
|
SYS_CTRL_STOP_TEMP_CTRL_CODE = 0x0006, // 停止控温
|
|||
|
} SysCtrlCode;
|
|||
|
|
|||
|
typedef int (*system_ctrl_handler_t)(SysCtrlCode code);
|
|||
|
typedef void (*meas_mode_handler_t)(uint8_t mode);
|
|||
|
typedef void (*target_temp_handler_t)(float temp);
|
|||
|
typedef void (*tube_length_handler_t)(uint16_t length);
|
|||
|
typedef void (*meas_precision_handler_t)(uint8_t precision);
|
|||
|
typedef void (*auto_measure_count_handler_t)(uint8_t count);
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
system_ctrl_handler_t system_ctrl_handler;
|
|||
|
meas_mode_handler_t meas_mode_handler;
|
|||
|
target_temp_handler_t target_temp_handler;
|
|||
|
tube_length_handler_t tube_length_handler;
|
|||
|
meas_precision_handler_t meas_precision_handler;
|
|||
|
auto_measure_count_handler_t auto_measure_count_handler;
|
|||
|
} mb_cmd_handler_t;
|
|||
|
|
|||
|
#define IR_BUF_SIZE 128
|
|||
|
#define REG_BUF_SIZE 128
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint16_t regs[REG_BUF_SIZE]; // 保持寄存器(可读写)
|
|||
|
uint16_t input_regs[IR_BUF_SIZE]; // 输入寄存器(只读)
|
|||
|
mb_cmd_handler_t *handler;
|
|||
|
/* 保护 input_regs 的互斥锁 */
|
|||
|
rt_mutex_t input_lock;
|
|||
|
} mb_command_t;
|
|||
|
|
|||
|
// 初始化命令处理模块
|
|||
|
void mb_command_init(mb_command_t *handler);
|
|||
|
|
|||
|
// 返回当前命令实例(用于访问 input_regs/regs)
|
|||
|
mb_command_t *get_command_instance(void);
|
|||
|
|
|||
|
// 处理保持寄存器写入(3xxxx)
|
|||
|
nmbs_error mb_handle_write_holding_registers(uint16_t address, uint16_t quantity, const uint16_t *registers);
|
|||
|
|
|||
|
// 处理输入寄存器读取(4xxxx)-0x04
|
|||
|
nmbs_error mb_handle_read_input_registers(uint16_t address, uint16_t quantity, uint16_t *registers_out);
|
|||
|
|
|||
|
// 输入寄存器同步接口声明
|
|||
|
void mb_sync_running_status_reg(PmRunningState state);
|
|||
|
void mb_sync_exception_reg(uint32_t exception, bool set);
|
|||
|
void mb_sync_realtime_temp(float temperature);
|
|||
|
void mb_sync_realtime_rotation(float rotation);
|
|||
|
void mb_sync_result(uint8_t mode, float value, float temp);
|
|||
|
void mb_sync_meas_done_flag(bool done);
|
|||
|
|
|||
|
#endif
|