实训台接线:串口要选对。接线做成数据(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+
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s

上课前逐个检查 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>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-28 17:40:57 +08:00
1 parent 163e553de4
commit 46e0f40cce
35 files changed
+637 -98

No files matched your search

+2 -2
View File
@@ -22,7 +22,7 @@
1. 平台已经引用好了 `DeviceCtrlLibrary.dll` 和 `WinFormsDeviceControlLibrary.dll`,不用像书上那样复制 dll、添加引用;LED 显示屏、灯泡、报警灯这些控件直接在工具箱的"物联网设备"里。
2. 代码开头加上 `using System.IO.Ports;`、`using DeviceCtrlLibrary;`、`using WinFormsDeviceControlLibrary;`。
3. **com_Port 的 Click**(在 ⚡ 事件里双击 Click):先清空下拉框,再用 foreach 把 `SerialPort.GetPortNames()` 的每个串口号加进去。这样每次点开下拉框都会刷新串口列表。
3. **com_Port 的 Click**(在 ⚡ 事件里双击"单击",即 Click):先清空下拉框,再用 foreach 把 `SerialPort.GetPortNames()` 的每个串口号加进去。这样每次点开下拉框都会刷新串口列表。
4. **btn_Open 的 Click**:调用 `DeviceCtrlHelper.ledHelper.OpenLedCom(com_Port.Text)` 打开选中的串口。
5. **btn_Send 的 Click**:调用 `DeviceCtrlHelper.ledHelper.SendLedString(txt_SendText.Text)`,把返回的字符串存到变量 res;如果 res 里含有 "Error"(`res.IndexOf("Error") >= 0`)就用 MessageBox 显示出来,否则调用 `led.setLedText(res)` 让窗体上的 LED 控件显示。
@@ -34,4 +34,4 @@
1. 运行后点开"串口"下拉框,选 **COM5**(LED 屏),点"打开"。
2. 输入"欢迎光临",点"推送",实训台的 **LED 显示屏**和窗体上的 LED 控件都应显示"欢迎光临"。
3. 重新运行,不点"打开"直接推送,应弹出"Error:发送失败"。
3. 重新运行,先点实训台的"实训台复位"清掉 LED 屏上的字(和真的 LED 屏一样,上次显示的字会一直留着),再不点"打开"直接推送:应弹出"Error:发送失败",LED 屏不显示,实训台最上方用红字提示串口没有打开。
+1
View File
@@ -14,6 +14,7 @@
| 文本框 | `txt_light`、`txt_temperature`、`txt_humidity` | 显示光照度、温度、湿度的值 |
| 按钮 | `btn_get` | 获取 |
| 分组框 | `grp_config` | 配置 |
| 标签 | `lbl_port` | 串口 |
| 下拉框 | `com_port` | 串口 |
| 按钮 | `btn_Open` | 开启(打开后变成"关闭") |
+1 -1
View File
@@ -37,7 +37,7 @@
## 和书上不一样的地方
> 书上关闭时调用的 `DeviceCtrlHelper.ledHelper.Close()`,教材配套的类库里其实没有这个方法。平台保留了它(什么也不做),书上的代码可以原样编译。
> 书上关闭时调用的 `DeviceCtrlHelper.ledHelper.Close()`,教材配套的类库里其实没有这个方法。平台补上了这个方法(关闭 LED 屏的串口),书上的代码可以原样编译。
> 书上的 `True` / `False` 首字母大写是印刷错误,要写成小写的 `true` / `false`。
+1
View File
@@ -13,6 +13,7 @@
- select: { control: com_port, item: COM4 }
- click: btn_open
- click: rb_Open
- expect: { zigbee: 1, on: true, desc: 先打开 }
- click: rb_Close
- expect: { zigbee: 1, on: false }
- expect: { control: lamp1, on: false }
@@ -13,6 +13,8 @@
| 按钮 | `btn_lampOpen` | 开(手动开灯) |
| 按钮 | `btn_lampClose` | 关(手动关灯) |
| 分组框 | `groupBox1` | 配置 |
| 标签 | `lbl_lamp` | 路灯 |
| 标签 | `lbl_environment` | 环境采集 |
| 下拉框 | `com_lamp` | 路灯(ZigBee 协调器)的串口 |
| 下拉框 | `com_environment` | 环境采集(ADAM-4150)的串口 |
| 复选框 | `ch_bodyInfrared` | 人体开关 |
@@ -33,7 +35,7 @@
- 取消时:关闭串口,停止 `timer1`,两个按钮恢复可用。
7. **timer1 的 Tick**:读 `adam4150Helper.SetData().bodyInfraredValue`,是 `true`(有人)就开灯,否则关灯。
> 书上第 15 步说"进入 Click 事件",定时器的事件其实是 **Tick**:在设计器里双击 timer1 就会生成 `timer1_Tick`。
> 书上第 15 步说"进入 Click 事件",定时器的事件其实是 **Tick**(事件窗口里叫"计时到"):在设计器里双击 timer1 就会生成 `timer1_Tick`。
## 在平台上怎么试
+2 -2
View File
@@ -37,7 +37,7 @@
## 在平台上怎么试
1. 运行后在 IP 框里填 **192.168.2.50**(填别的 IP 也能连上),点"开",按钮变成"关",图片框里出现东围墙的画面,实训台顶棚的**网络摄像头**亮起。
2. 点四个方向键,画面应跟着转动:每点一次转一格,左右各 3 格、上下各 1 格,转到头就不再动。
1. 运行后在 IP 框里填 **192.168.2.50**(填别的 IP 也能连上,但不能空着:空着点"开",按钮照样变,画面却一直是黑的),点"开",按钮变成"关",图片框里出现东围墙的画面,实训台顶棚的**网络摄像头**亮起。
2. 窗体比较大,运行区会缩小显示,可以点运行区右上角的"放大"。点四个方向键,画面应跟着转动:每点一次转一格,左右各 3 格、上下各 1 格,转到头就不再动。
3. 点"拍照",运行区下方出现"程序保存的图片",点开能看到刚拍的照片(只在这次运行中保留)。
4. 再点"关",按钮变回"开",画面停止更新。
+1
View File
@@ -13,6 +13,7 @@
- select: { control: com_port, item: COM3 }
- click: btn_open
- click: btn_alarmOpen
- expect: { relay: 0, on: true, desc: 先打开 }
- click: btn_alarmClose
- expect: { relay: 0, on: false }
- expect: { control: alarm1, on: false }
+4 -1
View File
@@ -1,4 +1,7 @@
{
"title": "项目7 任务1 智慧教室",
"source": "教材书 p133–137,界面和代码取自配套参考工程(手动开关灯的判断书上写反了,参考工程是对的);开关图片来自平台素材库"
"source": "教材书 p133–137,界面和代码取自配套参考工程(手动开关灯的判断书上写反了,参考工程是对的);开关图片来自平台素材库",
"wiring": {
"adam4150": "COM2"
}
}
+2 -2
View File
@@ -56,8 +56,8 @@
## 在平台上怎么试
1. 运行后串口选 **COM2**,点"启用",按钮变成"关闭"。两个采集器都用这个串口打开(书上就是这样写的)。
1. 运行后串口选 **COM2**,点"启用",按钮变成"关闭"。两个采集器都用这个串口打开(书上就是这样写的);这几个实验的实训台把 ADAM-4150 和 ADAM-4017+ 并在 COM2 的同一条 485 总线上,所以能行。
2. 在实训台上拖动光照、温度、湿度的滑块,2 秒内三个文本框应跟着变。
3. 把光照拖到 400 以下,窗体上的灯泡和实训台 ADAM-4150 的 **DO1 照明灯**应一起亮;拖到 800 以上应熄灭。
4. 把温度拖到 30℃ 以上,空调滑块应停在 26;拖到 5℃ 以下停在 25;其他温度回到 18。
5. 点灯光的开关图片,灯应该一下开、一下关。
5. 先把光照拖回 400–800 之间(光照在 800 以上时程序每 2 秒自动关一次灯,400 以下自动开灯,会盖过手动开关),再点灯光的开关图片,灯应该一下开、一下关。
+1
View File
@@ -25,6 +25,7 @@
- expect: { control: trb_curtain, value: 0, desc: 上课模式窗帘全开 }
- clock: '21:30:00'
- expect: { control: lbl_mode, contains: 回寝模式, within: 5s, desc: 21:30 是回寝模式 }
- expect: { relay: 1, on: true, desc: 回寝模式打开灯光 }
- expect: { control: trb_curtain, value: 10, desc: 回寝模式关窗帘 }
- clock: '23:00:00'
- expect: { control: lbl_mode, contains: 熄灯模式, within: 5s, desc: 23:00 是熄灯模式 }
+4 -1
View File
@@ -1,4 +1,7 @@
{
"title": "项目7 任务2 智慧寝室",
"source": "教材书 p141–145,界面和代码取自配套参考工程;开关图片和铃声来自平台素材库。按时刻切换情景模式:在实训台的时钟上拨时间"
"source": "教材书 p141–145,界面和代码取自配套参考工程;开关图片和铃声来自平台素材库。按时刻切换情景模式:在实训台的时钟上拨时间",
"wiring": {
"adam4150": "COM2"
}
}
+1 -1
View File
@@ -63,7 +63,7 @@
## 在平台上怎么试
1. 运行后串口选 **COM2**,点"开启情景模式",按钮变成"停止情景模式",`txt_time` 每秒走一次,拖动实训台的光照、温度、湿度滑块,文本框跟着变。
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,广播响铃。
+4 -1
View File
@@ -1,4 +1,7 @@
{
"title": "项目7 任务3 智慧会议室",
"source": "教材书 p148–153,界面和代码取自配套参考工程;补上书上漏写的填充串口列表。预约时刻:在实训台的时钟上拨时间"
"source": "教材书 p148–153,界面和代码取自配套参考工程;补上书上漏写的填充串口列表。预约时刻:在实训台的时钟上拨时间",
"wiring": {
"adam4150": "COM2"
}
}
+5 -3
View File
@@ -78,7 +78,9 @@
## 在平台上怎么试
1. 运行后串口选 **COM2**(程序一启动就在采集,不用点别的按钮)。在实训台上拖动光照、温度滑块;气压、空气质量在 ADAM-4017+ 那块点"Vin3–6 更多传感器"展开。几秒内文本框应跟着变。
2. 把时钟拨到 **13:19:54**;模式选"讨论",时分秒填 13、20、00,点"预约"。
1. 运行后串口选 **COM2**(程序一启动就在采集,不用点别的按钮)。这几个实验的实训台把 ADAM-4150 和 ADAM-4017+ 并在 COM2 的同一条 485 总线上,书上在一个串口上打开两个模块也能用。在实训台上拖动光照、温度滑块;气压、空气质量在 ADAM-4017+ 那块点"Vin3–6 更多传感器"展开。几秒内文本框应跟着变。刚运行还没选串口时,实训台会提示串口没选(书上在定时器里每秒打开一次串口),选了 COM2 就消失。
2. 先点"实训台复位"(上次运行开着的灯会一直亮着)。模式选"讨论",时分秒填 13、20、00,然后把时钟拨到 **13:19:40**,马上点"预约"。
3. 预约时间没到时,ADAM-4150 的 **DO1 照明灯**不亮;到 13:20:00 后,应显示"智慧会议室已开启讨论模式",照明灯亮,窗帘滑块到 0,主、客话筒都是开。
4. 点"退出",灯、话筒都关掉。想再试一次,重新运行程序。
4. 点"退出",灯、话筒都关掉。想再试一次,先点"实训台复位",再重新运行程序。
> 模式开启后第一次点灯光或话筒的开关图片没有反应,第二次才变:书上的 ChooseMode 只换了开关图片,没有改记录开关状态的变量,参考工程也是这样,不是你写错了。
+2
View File
@@ -47,6 +47,8 @@
## 在平台上怎么试
> 先准备:做过任务 4 的话,SecurityData 表里已经存了任务 4 拍的照片和入侵照片,下面看到的第一张就不是 9:00 那张。先到右上角的**数据库**页面点"恢复实验初始数据",选"项目8 任务5",把表清空(自动评分每次都用干净的库,不受影响)。
1. 在实训台的**时钟**里拨到 9:00:00,运行后打开校园安防,等画面出来点"拍照";再拨到 10:30:00,再拍一张。
2. 点"查看历史图像",打开历史报警记录窗体:两个日期默认都是今天,显示第一张照片,右下角时间是 9:00 左右,"NO DATA"不显示。
3. 点右箭头显示 10:30 那张,再点回到第一张;点左箭头往回翻。