polarimeter_software/User/app/mb_hmi/mb_command.h
2025-09-30 10:37:23 +08:00

78 lines
2.6 KiB
C
Raw Permalink 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.

/*
* @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