# 氧化测试仪器控制系统 API 参考
## 核心控制 API
### 温度控制
python
# 设置目标温度
Oxygen_Ctrl.ctrl_stove(c_open=True, cur_temp=[3000], l_dest_temp=8000) # 设置80.00℃
# 停止加热
Oxygen_Ctrl.stop_heat()
# 模糊控制参数设置
fuzzy.AI_Control.KC = 1 # 控制差异
fuzzy.AI_Control.Ki = 1 # 积分系数
fuzzy.AI_Control.KI = 960 # 积分时间
fuzzy.AI_Control.Kp = 320 # 比例系数
### 流量控制
python
# 设置流量值
config.Flow01 = 1000 # 设置流量1为100.0ml/min
config.Flow02 = 500 # 设置流量2为50.0ml/min
# 流量校准
config.Flow01_k = 1000 # 设置流量1校准系数k
config.Flow01_b = 0 # 设置流量1校准偏移b
## 通信接口
### Modbus通信
python
# 创建Modbus主机
modbus_485 = modbus_host(port=2, baudrate=9600)
# 读取寄存器
values = modbus_485.H03_read_hold_register(
slave_addr=1,
starting_address=0,
register_quantity=4,
signed=True
)
# 写入寄存器
modbus_485.H06_write_single_register(
slave_addr=1,
register_address=0,
register_value=100
)
### MQTT通信
python
# 初始化MQTT客户端
mqtt_client = init_mqtt()
# 发送数据
mqtt_client.update({
"Temperature": 25.5,
"Flow01": 45.3,
"Status": "Running"
})
# 注册回调
def on_message(data):
print(f"Received: {data}")
mqtt_client.reg_callback('_recv_callback', on_message)
### 显示屏通信
python
# 初始化显示屏
dwin = DWIN(uart_id=1, tx_pin=10, rx_pin=9)
# 页面切换
dwin.jump_page(page_id=1)
# 写入变量
dwin.write_var(addr=0x1000, value=2500) # 写入数值
dwin.write_const_string("Hello", addr=0x160) # 写入字符串
## 任务管理
### 任务调度
python
# 添加任务
scheduler.add_task(
task_id=TASK_ID_CUSTOM,
mode=TASK_MODE_PERIOD,
name="CustomTask",
period=1000,
task_proc=custom_task
)
# 激活任务
scheduler.active_task(TASK_ID_CUSTOM, 1000)
# 挂起任务
scheduler.suspend_task(TASK_ID_CUSTOM)
### 定时器管理
python
# 创建定时器
timer = myTimer()
# 开始计时
timer.start()
# 获取时间
elapsed_time = timer.elapsed() # 秒
elapsed_ms = timer.elapsed_ms() # 毫秒
# 使用装饰器
@measure_time(unit='ms', print_result=True)
def custom_function():
pass
## 配置管理
### EEPROM操作
python
# 创建EEPROM实例
eeprom = EEPROM()
# 读写字节
eeprom.write_byte(addr=0, value=0xFF)
value = eeprom.read_byte(addr=0)
# 读写字
eeprom.write_word(addr=0, value=0x1234)
value = eeprom.read_word(addr=0)
# 保存到NVS
eeprom.write_to_NVS()
### 系统配置
python
# 创建配置实例
config = Config(eeprom)
# 设置参数
config.SET_TestTime = 500 # 测试时间
config.SetTempra = 500 # 设定温度
config.KP1 = 320 # 比例系数
config.KI1 = 960 # 积分系数
# 保存配置
config.save_param(eeprom)
# 加载配置
config.load_param(eeprom)
## 工具函数
### 时间处理
python
from task import seconds_to_hms
# 转换秒数为时分秒格式
time_str = seconds_to_hms(3665) # 返回 "01:01:05"
### CRC校验
python
from serial import Serial
# 计算CRC16
serial = Serial(uart_id=2)
crc = serial._calculate_crc16(data)
## 常量定义
### Modbus功能码
python
READ_COILS = 0x01 # 读线圈
READ_DISCRETE_INPUTS = 0x02 # 读离散输入
READ_HOLDING_REGISTERS = 0x03 # 读保持寄存器
READ_INPUT_REGISTER = 0x04 # 读输入寄存器
WRITE_SINGLE_COIL = 0x05 # 写单个线圈
WRITE_SINGLE_REGISTER = 0x06 # 写单个寄存器
WRITE_MULTIPLE_REGISTERS = 0x10 # 写多个寄存器
### 任务模式
python
TASK_MODE_ONCE = 0 # 单次执行
TASK_MODE_PERIOD = 1 # 周期执行
TIMER_MODE_TIMER = 0 # 定时器模式
TIMER_MODE_ONCEROUTINE = 1 # 单次回调
TIMER_MODE_CYCROUTINE = 2 # 循环回调
## 错误处理
### 异常类型
python
try:
# Modbus操作
pass
except ValueError as e:
print(f"数值错误: {e}")
except OSError as e:
print(f"通信错误: {e}")
## 系统状态
### 状态定义
python
state_str_list = [
"Awaiting oxidation",
"Awaiting oxidation",
"Heating to Target",
"Heating to Target",
"System Ready for Testing",
"Oxidation Test Running"
]
## 注意事项
1. 参数范围
- 温度: 0-200℃ (0-2000)
- 流量: 0-100ml/min (0-1000)
- PID参数: 根据实际情况调整
2. 通信超时
- Modbus: 40次轮询(约2秒)
- MQTT: 60秒重连
- 串口: 50ms超时
3. 任务调度
- 避免长时间阻塞
- 合理分配任务周期
- 注意任务优先级
4. 存储限制
- EEPROM: 512字节
- 配置参数: 16位整数
- 字符串: 最大28字节