# Oxygen_Ctrl.py 函数文档

氧化测试仪器的核心控制模块，负责整个系统的运行控制、数据采集、温度控制和通信管理。

## 全局常量

- **coeff_flow**: 流量系数 (10)
- **coeff_Flow_k**: 触摸屏K值系数 (100)
- **coeff_Flow_b**: 触摸屏B值系数 (10)
- **MEASURE_TEMP_COFF**: 温度小数点系数 (1)
- **CONFIG_TEMP_COFF**: 配置温度小数点系数 (100)

## GPIO 定义

- **LED_SLAVE**: GPIO16，维电器指示灯
- **LED_4G**: GPIO38，4G状态指示灯
- **LED_Wifi**: GPIO39，WiFi状态指示灯
- **LED_Heat**: GPIO40，加热状态指示灯
- **LED_RELAY**: GPIO15，加热控制继电器

## Oxygen_Ctrl 类

### 初始化函数
```python
def __init__(self, port=2, baudrate=9600)
```
- **功能**: 初始化氧化测试仪器控制系统
- **参数**:
  - port: 串口号，默认2
  - baudrate: 波特率，默认9600
- **初始化内容**:
  - EEPROM配置
  - Modbus通信
  - 触摸屏控制
  - 温度流量数据缓存
  - LED指示灯状态
  - 系统状态机
  - AI控制器

### 核心控制函数

#### Heat_ctrl(self, bHeat)
- **功能**: 控制加热器开关
- **参数**: 
  - bHeat: 布尔值，True开启加热，False关闭加热

#### set_p_out(self, pwm_width)
- **功能**: 设置PWM输出控制加热
- **参数**: 
  - pwm_width: PWM脉宽，控制加热功率

#### Ai_read(self)
- **功能**: 读取温度和流量传感器数据
- **实现**: 通过Modbus协议读取4路温度和12路流量数据

#### Ai_write(self)
- **功能**: 写入12路流量控制值
- **实现**: 通过Modbus协议写入流量控制数据

#### state_machine(self)
- **功能**: 系统状态机
- **状态定义**:
  - 0-1: 等待氧化
  - 2-3: 加热至目标温度
  - 4: 系统就绪等待测试
  - 5: 氧化测试运行中

### 数据处理函数

#### update_Anlog_in_value(self)
- **功能**: 更新模拟量输入值的校准数据
- **处理内容**: 
  - 温度校准换算
  - 12路流量校准换算

#### update_flow_out_value(self)
- **功能**: 更新流量输出值
- **实现**: 根据配置参数计算12路流量输出值

### 通信接口函数

#### Ai_Dwin_show(self)
- **功能**: 显示数据到DWIN触摸屏
- **显示内容**: 
  - 12路流量数据
  - 温度数据

#### updateMqtt_dwin(self, updatePeriod)
- **功能**: 更新MQTT和触摸屏数据
- **参数**:
  - updatePeriod: 更新周期
- **上传数据**:
  - 12路流量值
  - 温度值
  - 系统状态
  - 剩余时间

### 任务管理函数

#### add_task(self)
- **功能**: 添加系统任务
- **任务列表**:
  - Modbus数据读取 (200ms周期)
  - 触摸屏更新 (5ms周期)
  - 状态机运行 (100ms周期)
  - 模糊控制 (PWM周期)

## 全局函数

### ctrl_run()
- **功能**: 系统主运行函数
- **执行流程**:
  1. 等待硬件初始化
  2. 初始化任务系统
  3. 连接4G网络
  4. 初始化MQTT
  5. 启动任务调度

### Connect4G_NTP()
- **功能**: 连接4G网络并同步时间
- **实现**: 
  - 同步网络时间
  - 更新LED状态
  - 更新显示信息

### Task_refresh_modbus_in()
- **功能**: Modbus数据刷新任务
- **实现**: 
  - 读取传感器数据
  - 更新校准值
  - 更新显示

### Task_refresh_dwin_input()
- **功能**: 触摸屏输入刷新任务
- **实现**: 运行触摸屏处理程序

### Task_state_machine()
- **功能**: 状态机任务
- **实现**: 运行系统状态机

## 使用示例

```python
from Oxygen_Ctrl import ctrl_run

if __name__ == '__main__':
    ctrl_run()
```

## 依赖模块
- modbus: Modbus通信协议
- eeprom: 配置存储
- config: 系统配置
- DwinTest: 触摸屏控制
- fuzzy: 模糊控制算法
- task: 任务调度
- IOT_4G: 4G通信
- mqtt: MQTT协议

## 注意事项
1. 系统启动前需要等待5秒让硬件稳定
2. 温度和流量数据有不同的单位换算系数
3. 状态机状态转换需要注意安全性
4. 加热控制需要注意过温保护
5. 网络通信需要考虑断线重连
