Files
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

72 lines
6.7 KiB
Markdown
Raw Permalink 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.
## 任务目标
做一个"智慧寝室"控制窗体:点"开启情景模式"后,程序每秒显示当前时间和光照度、温度、湿度,并按时间段自动切换四种情景模式,控制灯光、窗帘和广播:
| 时间段 | 模式 | 灯光 | 窗帘(滑动条) | 广播 |
| ----------- | -------- | ---- | -------------- | ------ |
| 6:45–7:30 | 起床模式 | 开 | 5(半开) | 放铃声 |
| 7:30–21:00 | 上课模式 | 关 | 0(全开) | 关 |
| 21:00–22:00 | 回寝模式 | 开 | 10(全关) | 放铃声 |
| 其他时间 | 熄灯模式 | 关 | 10(全关) | 关 |
练习重点:DateTime 的比较,自己写方法(CheckMode、PlayMp3),用线程(Thread)播放声音,媒体播放器控件。详细步骤见书 p141–145。
## 先添加项目资源
点代码上方的**项目资源**,在素材库里勾选开关图片 `switch_on`、`switch_off` 和铃声 `ring`(就是书上的 ring.mp3,可以先试听)。名字和书上一样,不能自己上传。
广播图片框的**图片**属性选 `Resources.switch_off`。
## 界面和控件名
| 控件 | 名称(Name) | 文字(Text)和用途 |
| ---------- | ---------------------------------------------- | ------------------------------------------------------------- |
| 窗体 | `frm_control` | 智慧寝室情景控制 |
| 分组框 | `grp_mode` | 模式选择 |
| 文本框 | `txt_time` | 显示当前时间 |
| 标签 | `lbl_mode` | 显示现在是哪种模式(文字先空着) |
| 按钮 | `btn_apply` | 开启情景模式(开启后变成"停止情景模式") |
| 分组框 | `grp_input` | 采集量 |
| 下拉框 | `com_import` | 采集器的串口 |
| 文本框 | `txt_light`、`txt_temperature`、`txt_humidity` | 光照度、温度、湿度 |
| 分组框 | `grp_status` | 状态栏 |
| 滑动条 | `trb_curtain` | 模拟窗帘:0 全开,10 全关(最小值 0、最大值 10 用默认的就行) |
| 图片框 | `pic_boardcastStatus` | 广播状态,图片选 switch_off |
| 灯泡 | `lamp` | 窗体上显示灯的亮灭 |
| 定时器 | `timer` | 间隔 1000(1 秒) |
| 媒体播放器 | `axWindowsMediaPlayer1` | 播放铃声;可见设为 False |
其余标签(当前时间、串口、光照度、温度、湿度、窗帘、全开、全关、广播、灯光)照书上的图摆好,名字不影响评分。
媒体播放器在工具箱的"物联网设备"里,直接拖到窗体上就行,不用像书上小贴士那样去"选择工具箱项"添加 COM 组件。
> 窗体名:在设计器里点窗体空白处,把属性窗口的**名称**从 `Form1` 改成 `frm_control`,类名、文件名和 Program.cs 会跟着改。先改名再双击窗体,生成的 Load 事件才叫 `frm_control_Load`。
## 实现步骤
1. 代码开头加上 `using System.IO.Ports;`、`using DeviceCtrlLibrary;`、`using DeviceCtrlLibrary.Model;`、`using System.Threading;`。
2. 声明全局变量:串口、灯、广播是否打开(三个 bool),`ADAM4017ResModel ResModel`,`DateTime now`,以及四个时间点:起床 `DateTime.Today.AddHours(6.75)`、上课 `AddHours(7.5)`、回寝 `AddHours(21.0)`、熄灯 `AddHours(22.0)`。
3. **Load**:清空 `com_import`,把串口号加进去。
4. **btn_apply 的 Click**:没打开时打开 `adam4017Helper`、`adam4150Helper`,按钮改成"停止情景模式",启动 `timer`;打开着就反过来。
5. 写 **PlayMp3()** 方法:广播图片换成 switch_on,给媒体播放器的 `URL` 设铃声文件的路径(`AppDomain.CurrentDomain.BaseDirectory + "//Resources//ring.mp3"`),调用 `Ctlcontrols.play()`,`Thread.Sleep(4000)` 等 4 秒,图片换回 switch_off。
6. 写 **CheckMode()** 方法:用 `now` 和四个时间点比较,判断现在是哪种模式,`lbl_mode` 显示"智慧寝室正处于××模式",再按上面的表格控制:
- 开灯 / 关灯:`adam4150Helper.OnOff(1, ...)` 和 `lamp.OnOff(...)`,只在状态要变时才做;
- 放铃声:广播还没开时 `new Thread(PlayMp3).Start()`,让铃声在另一个线程里放,不卡住界面;关广播:图片换成 switch_off;
- 窗帘:设 `trb_curtain.Value`。
7. **timer 的 Tick**:`now = DateTime.Now`,`txt_time` 显示 `now.ToString("HH:mm:ss")`,读出数据填进三个文本框,最后调用 `CheckMode()`。
## 在平台上怎么用时钟和广播
- **时钟**在实训台上:填一个时刻点"拨到",程序里的 `DateTime.Now` 就从这个时刻往后走;还可以选 10×、60× 倍速,点"恢复真实时间"回到现在。不用等到早上 6:45 才能测试起床模式。
- 拨时间时**日期别动**:四个时间点是程序启动时按"今天"算好的,改了日期就对不上了。
- 程序放铃声时,实训台上的**广播**喇叭亮起,浏览器里能听到声音(电脑要开音量)。
## 在平台上怎么试
1. 运行后串口选 **COM2**(这几个实验的实训台把 ADAM-4150 和 ADAM-4017+ 并在 COM2 的同一条 485 总线上,所以书上在一个串口上打开两个模块也能用),点"开启情景模式",按钮变成"停止情景模式",`txt_time` 每秒走一次,拖动实训台的光照、温度、湿度滑块,文本框跟着变。
2. 在实训台的时钟上拨到 **06:50:00**:应显示起床模式,ADAM-4150 的 **DO1 照明灯**亮,窗帘滑块到 5,广播响一声铃。
3. 拨到 **08:00:00**:上课模式,灯灭,窗帘到 0。
4. 拨到 **21:30:00**:回寝模式,灯亮,窗帘到 10,广播响铃。
5. 拨到 **23:00:00**:熄灯模式,灯灭,窗帘到 10。
6. 也可以拨到 6:44:50,看程序到 6:45 时自己切进起床模式。