Files
IOT_SIM/samples/p7-t1-智慧教室/task.md
T
xuyueandClaude Opus 5.5 46e0f40cce
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
实训台接线:串口要选对。接线做成数据(BoardState.wiring),默认按教材布局图 COM2 ADAM-4017+、COM3 ADAM-4150、COM4 ZigBee 协调器、COM5 LED 屏,实验可在 meta.json 的 wiring 里改:项目 7 的书上代码在一个串口上打开两个模块,这三个实验把 4150 并到 COM2 的 485 总线上。选错串口时返回值照反编译的真机版 dll(4017 全 null、4150 全 false,4150 的 OnOff 和 LED 推送返回成功但设备不动作,ZigBee 返回 false);串口没打开时照教材仿真版。Open / Close / 没打开就读写报告给服务器,实训台最上方用红字提示("程序在 COM2 上打开 ADAM-4150,它接在 COM3""ADAM-4150 的串口没有打开,程序却在读写它"),评分不通过时也附上。只读接线展示:鼠标移到实训台设备上,标题栏写出线路,对应通道、模块、串口高亮;串口服务器按接线列出设备,程序打开的口亮绿点;程序里串口下拉框的灰字按当前接线。打开实验时浏览器发 experiment 消息换接线,老师看学生提交时按作业的实验接线(提交接口返回 sampleId)。"4017"统一写成 ADAM-4017+
上课前逐个检查 23 个实验后的修改:补上三处评分漏洞(项目 3 任务 1、项目 4 任务 3 的关闭和项目 7 任务 2 的熄灯,程序什么都不做也能通过);评分说明的空格;任务说明按实测补充(项目 2 任务 1–3、项目 3 任务 2、项目 4 任务 2、项目 7 任务 1–3、项目 8 任务 5)。使用说明、设计方案同步,设计方案记下以后可能扩展"物联网设备安装与调试"课

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:40:57 +08:00

64 lines
5.8 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.
## 任务目标
做一个"智慧教室"控制窗体:点"启用"后,程序每 2 秒读一次光照度、温度、湿度并显示出来,再按读数自动控制设备——光线暗就开灯、太亮就关灯;太热或太冷就开空调并调好温度,否则关空调。灯也可以点开关图片手动开关。
练习重点:滑动条(TrackBar)的 Minimum / Maximum / Value,图片框(PictureBox)显示项目资源里的图片,定时器 Tick 里的 if / else if 判断。详细步骤见书 p133–137。
## 先添加项目资源
开关图片用 `switch_on`(开)和 `switch_off`(关)。书上是"项目属性 → 资源 → 添加资源",平台上点代码上方的**项目资源**,在素材库里勾选这两张图(名字和书上一样,不能自己上传图片)。
加好后,图片框的**图片**属性可以直接选 `Resources.switch_off`;代码里写 `Properties.Resources.switch_on`。
## 界面和控件名
| 控件 | 名称(Name) | 文字(Text)和用途 |
| ------ | ---------------------------------------------- | ----------------------------------------------- |
| 窗体 | `frm_control` | 智慧教室情景控制 |
| 分组框 | `grp_mode` | 模式选择 |
| 标签 | `lbl_mode` | 智慧教室将开启(启用后变成"智慧教室已开启") |
| 按钮 | `btn_apply` | 启用(启用后变成"关闭") |
| 分组框 | `grp_input` | 采集量 |
| 下拉框 | `com_import` | 采集器的串口 |
| 文本框 | `txt_light`、`txt_temperature`、`txt_humidity` | 光照度、温度、湿度 |
| 分组框 | `grp_status` | 状态栏 |
| 图片框 | `pic_airconditioneStatus` | 空调开关状态,图片选 switch_off |
| 滑动条 | `trb_airconditione` | 模拟空调温度:最小值 18,最大值 32,值 18 |
| 图片框 | `pic_lightsStatus` | 灯光开关状态,图片选 switch_off;点它手动开关灯 |
| 灯泡 | `lamp` | 窗体上显示灯的亮灭 |
| 定时器 | `timer` | 间隔 2000(2 秒) |
其余标签(串口、光照度、温度、湿度、空调、灯光、18℃、32℃)照书上的图摆好,名字不影响评分。
> 窗体名:在设计器里点窗体空白处,把属性窗口的**名称**从 `Form1` 改成 `frm_control`,类名、文件名和 Program.cs 会跟着改。先改名再双击窗体,生成的 Load 事件才叫 `frm_control_Load`。
## 实现步骤
1. 代码开头加上 `using System.IO.Ports;`、`using DeviceCtrlLibrary;`、`using DeviceCtrlLibrary.Model;`。
2. 声明全局变量:串口是否打开、灯是否打开、空调是否打开(三个 bool,都是 false),以及 `ADAM4017ResModel ResModel`。
3. **Load**:用 `SerialPort.GetPortNames()` 把串口号加进 `com_import`。
4. **btn_apply 的 Click**:
- 没打开时:用 `com_import.Text` 打开 `adam4017Helper` 和 `adam4150Helper`,按钮改成"关闭",`lbl_mode` 改成"智慧教室已开启",启动 `timer`;
- 已打开时:关闭两个采集器,停止 `timer`,文字改回"启用""智慧教室将开启"。
5. **timer 的 Tick**:
- `adam4017Helper.SetData()` 读出数据,把 lightValue、temperatureValue、humidityValue 填进三个文本框;
- 光照度(用 `Convert.ToInt16` 转成数字)**小于 400** 开灯:图片换成 switch_on,`lamp.OnOff(true)`,`adam4150Helper.OnOff(1, true)`,记下灯已打开;**大于 800** 关灯(反过来做一遍);
- 温度**高于 30℃**:空调图片换成 switch_on,`trb_airconditione.Value = 26`;**低于 5℃**:图片换成 switch_on,`Value = 25`;其他情况:图片换成 switch_off,`Value = 18`。
6. **pic_lightsStatus 的 Click**:灯开着就关(图片、灯泡、实训台照明灯一起关),关着就开。
## 和书上不一样的地方
> **手动开关灯的判断写反了**:书上 pic_lightsStatus_Click 写的是 `if (!IsLampOpen) { 关灯 }`,这样灯关着时点了还是关。应该是 `if (IsLampOpen) { 关灯 } else { 开灯 }`。
> **滑动条要设最小值 18、最大值 32**:书上的表格没写。滑动条默认最大值是 10,代码里把 Value 设成 26 时程序会出错。
> 书上表格里温度文本框写的是 `txt_temperation`,代码里用的是 `txt_temperature`,请按代码写,自动评分按 `txt_temperature` 找。
## 在平台上怎么试
1. 运行后串口选 **COM2**,点"启用",按钮变成"关闭"。两个采集器都用这个串口打开(书上就是这样写的);这几个实验的实训台把 ADAM-4150 和 ADAM-4017+ 并在 COM2 的同一条 485 总线上,所以能行。
2. 在实训台上拖动光照、温度、湿度的滑块,2 秒内三个文本框应跟着变。
3. 把光照拖到 400 以下,窗体上的灯泡和实训台 ADAM-4150 的 **DO1 照明灯**应一起亮;拖到 800 以上应熄灭。
4. 把温度拖到 30℃ 以上,空调滑块应停在 26;拖到 5℃ 以下停在 25;其他温度回到 18。
5. 先把光照拖回 400–800 之间(光照在 800 以上时程序每 2 秒自动关一次灯,400 以下自动开灯,会盖过手动开关),再点灯光的开关图片,灯应该一下开、一下关。