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

5.8 KiB
Raw Blame History

任务目标

做一个"智慧教室"控制窗体:点"启用"后,程序每 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 以下自动开灯,会盖过手动开关),再点灯光的开关图片,灯应该一下开、一下关。