Files
IOT_SIM/samples/p2-t3-LED推送模拟量/task.md
T
xuyueandClaude Opus 5.5 de277d3e9d
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
用 bun fmt 格式化全部代码和文档
- bunfig.toml 的 [fmt]:不写分号、单引号、一行最长 160,和原来的写法一致
- .prettierignore:docs/教材摘要/ 是书上的摘录,不格式化
- 模板里一行写两条语句的事件处理(@keydown.delete、@dblclick)改成调用方法:去掉分号后拆成两行,Vue 编译不过

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:02:33 +08:00

49 lines
3.9 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 合起来:同时打开 ADAM-4017+ 和 LED 屏的串口,点"获取"读出光照度、温度、湿度,显示在文本框里,再拼成一句话推送到 LED 屏,例如"当前环境信息 光照度:500lx温度:25℃湿度:60%"。
练习重点:下拉框(ComboBox)和文本框(TextBox)、字符串拼接、一个按钮同时控制两个设备。详细步骤见书 p42–45。
## 界面和控件名
| 控件 | 名称(Name) | 文字(Text)和用途 |
| ---------- | ---------------------------------------------- | ---------------------------------------- |
| 窗体 | `frm_LED` | LED推送模拟量 |
| LED 显示屏 | `led` | 窗体上方的 LED 控件 |
| 分组框 | `grp_show` | 数据显示 |
| 文本框 | `txt_light`、`txt_temperature`、`txt_humidity` | 显示光照度、温度、湿度的值(前面放标签) |
| 按钮 | `btn_get` | 获取 |
| 分组框 | `grp_config` | 配置 |
| 下拉框 | `com_adamPort` | 模拟量串口(ADAM-4017+) |
| 下拉框 | `com_ledPort` | LED串口 |
| 按钮 | `btn_open` | 开启(打开后变成"关闭") |
> 书上的表格写的是 `btn_Open`,代码里是 `btn_open`(小写 o);表格里也没有列 LED 控件,代码里叫 `led`。请按代码起名,自动评分按这些名字找控件。
> 窗体名:在设计器里点窗体空白处,把属性窗口的**名称**从 `Form1` 改成 `frm_LED`,类名、文件名和 Program.cs 会跟着改。先改名再双击窗体,生成的 Load 事件才叫 `frm_LED_Load`。
## 实现步骤
1. 代码开头加上 `using System.IO.Ports;`、`using DeviceCtrlLibrary;`、`using DeviceCtrlLibrary.Model;`。
2. 声明全局变量:`bool IsOpen = false;`、`ADAM4017ResModel ResModel;`、`String LED_MSG = "";`(要推送的文字)。
3. **frm_LED_Load**:清空两个下拉框,用一个 foreach 把串口号同时加进 `com_adamPort` 和 `com_ledPort`。
4. **btn_open 的 Click**:
- 没打开时:`adam4017Helper.Open(com_adamPort.Text)` 和 `ledHelper.OpenLedCom(com_ledPort.Text)` 打开两个串口,按钮改成"关闭",IsOpen 设为 true;
- 已打开时:`adam4017Helper.Close()` 和 `ledHelper.Close()` 关闭,按钮改回"开启",IsOpen 设为 false。
5. **btn_get 的 Click**:
- 先把 LED_MSG 清空,用 `adam4017Helper.SetData()` 读数据,填进三个文本框(和任务 2 一样);
- 把"当前环境信息"和三个值拼进 LED_MSG(光照度后面加 lx,温度加 ℃,湿度加 %);
- 调用 `ledHelper.SendLedString(LED_MSG)`,返回值里没有 "Error" 时,调用 `led.setLedText` 让窗体上的 LED 控件也显示。
## 和书上不一样的地方
> 书上关闭时调用的 `DeviceCtrlHelper.ledHelper.Close()`,教材配套的类库里其实没有这个方法。平台保留了它(什么也不做),书上的代码可以原样编译。
> 书上的 `True` / `False` 首字母大写是印刷错误,要写成小写的 `true` / `false`。
## 在平台上怎么试
1. 运行后"模拟量串口"选 **COM2**(ADAM-4017+),"LED串口"选 **COM5**(LED 屏),点"开启"。
2. 点"获取",文本框显示温度 25、湿度 60、光照度 500,实训台的 **LED 显示屏**上应出现这三个数。
3. 在实训台上把温度拖到 31,再点"获取",LED 屏上的温度应变成 31。