Files
IOT_SIM/samples/p5-t3-推送灾情/task.md
T
xuyueandClaude Opus 5.5 d4b8bf9241 任务说明补齐 23 份;设计器支持窗体改名
- 其余 21 个实验的 task.md:控件名照示例代码,"在平台上怎么试"和评分步骤一致,列出书上的印刷错误和控件名不一致
- 窗体改名:属性窗口里选中窗体可以改名称,类名、构造函数、new X()、Program.cs 和两个文件名一起改;方法名和字符串不变
- 11 个主窗体不叫 Form1 的实验,任务说明提示先改窗体名再双击生成 Load 事件
- 测试:表头只认分隔行上面那一行,数据行里出现"名称"不再被当成表头

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:55:39 +08:00

65 lines
4.2 KiB
Markdown
Raw 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.
## 任务目标
把任务 1、任务 2 合在一起:点"获取"时同时读火焰和烟雾传感器,显示在窗体上,把灾情推送到 LED 屏(实训台的屏和窗体上的 LED 控件都显示);每次发现灾情都记进一个二维数组,点"历史灾情信息"打开第二个窗体,在列表框里列出全部记录。
练习重点:二维数组、静态类成员、continue 语句、两个窗体、列表框(ListBox)。详细步骤见书 p104–107。
## 界面和控件名
主窗体 Form1:
| 控件 | 名称(Name) | 文字(Text)和用途 |
|---|---|---|
| 窗体 | `Form1` | 火焰烟雾 |
| LED 显示屏 | `led1` | 窗体顶部,显示推送的灾情 |
| 分组框 | `groupBox2` | 数据采集 |
| 标签 | `lbl_time`、`lbl_fire`、`lbl_smoke` | 时间、火焰、烟雾 |
| 文本框 | `txt_time`、`txt_fire`、`txt_smoke` | 显示时间、火焰状态、烟雾状态 |
| 按钮 | `btn_get` | 获取 |
| 分组框 | `groupBox1` | 配置 |
| 标签 | `lbl_Ledport` | LED |
| 下拉框 | `com_ledPort` | LED 屏的串口 |
| 标签 | `lbl_4150port` | 环境采集 |
| 下拉框 | `com_environmentPort` | ADAM-4150 的串口 |
| 按钮 | `btn_Open` | 开启(打开后变成"关闭") |
| 按钮 | `OpenRecord` | 历史灾情信息 |
历史记录窗体 Form2:
| 控件 | 名称(Name) | 文字(Text)和用途 |
|---|---|---|
| 窗体 | `Form2` | 历史灾情记录 |
| 列表框 | `lstbRecored` | 一行一条灾情记录 |
> 书上表 5-6 没列 `btn_get`、`OpenRecord`、`groupBox2`,照图加上。`lstbRecored` 的拼写就是这样(不是 Record),照着写。
## 实现步骤
1. 点 **+ 新建类**,建 `RecordClass`,写两个静态成员:`string[,] record = new string[50, 2]`(每条记录存时间和内容)、`int recoudeindex = 0`(下一条记录存在第几行)。
2. Form1 的代码开头加上 `using System.IO.Ports;`、`using DeviceCtrlLibrary;`、`using DeviceCtrlLibrary.Model;`;全局变量:`ADAM4150ResModel ResModel;`、`bool IsOpen = false;`、`string LED_MSG = "";`。
3. **Form1_Load**:清空两个下拉框,用 for 循环加串口号;遇到 `COM1`(电脑自带的串口)就 `continue` 跳过。
4. **btn_Open 的 Click**:打开时调用 `adam4150Helper.Open(com_environmentPort.Text)` 和 `ledHelper.OpenLedCom(com_ledPort.Text)`,按钮改成"关闭";关闭时关闭 ADAM-4150 串口,按钮改回"开启"。
5. **btn_get 的 Click**:
- 用 `adam4150Helper.SetData()` 读出数据存进 `ResModel`,清空 `LED_MSG`,显示当前时间,火焰、烟雾两个框先写"正常";
- `fireValue` 为 `true`:火焰框写"发现火情",`LED_MSG` 加上"发现火情",把时间和内容记进数组当前行,`recoudeindex` 加 1;
- `smokeValue` 为 `true`:同样处理,写的是"发现烟情";
- 用 `ledHelper.SendLedString(LED_MSG)` 推送到 LED 屏,返回的字符串里没有 "Error" 时,再用 `led1.setLedText(...)` 显示到窗体上。
6. 点 **+ 新建窗体**,建 Form2,放列表框 `lstbRecored`。
7. **OpenRecord 的 Click**:`new` 一个 Form2 并 `Show()`。
8. **Form2_Load**:for 循环从 0 到 `recoudeindex - 1`,把每条记录的"时间 + 内容"加进 `lstbRecored`。
## 和书上不一样的地方
> **烟雾记录写成了火情**:书上烟雾分支往数组里记的内容是" 发现火情",要改成" 发现烟情",否则历史记录里看不到烟情。
> **列表框的名字**:书上 Form2_Load 里写的是 `listBox1`,表 5-7 和界面里叫 `lstbRecored`,代码要写 `lstbRecored`。
> 书上烟雾分支有一行注释只写了一个 `/`,照抄会编译不过,要写成 `//`。
## 在平台上怎么试
1. 运行后"LED"选 **COM5**(LED 屏),"环境采集"选 **COM3**(ADAM-4150),点"开启"。
2. 在实训台上把**火焰传感器**点成"有火焰",点"获取":火焰框显示"发现火情"、烟雾框显示"正常",实训台的 LED 屏和窗体上的 LED 控件都显示"发现火情"。
3. 把火焰点回"正常"、**烟雾传感器**点成"有烟雾",再点"获取",火焰框显示"正常"、烟雾框显示"发现烟情"。
4. 点"历史灾情信息",列表里应有"发现火情"和"发现烟情"两条,每条前面是时间。