Files
IOT_SIM/samples/p8-t5-历史图片/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

57 lines
5.7 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.
## 任务目标
做"历史报警记录"窗体 `SecurityCameraData`:在校园安防界面点"查看历史图像"打开它,按开始时间、结束时间从数据库里查出这段时间拍下的照片(拍照和入侵时存的),一次显示一张和它的拍摄时间,用左右箭头前后翻;查不到就显示"NO DATA"。
练习重点:ShowDialog 打开对话框式的窗体、日期时间选择器(DateTimePicker)、Dictionary 和 List 集合、运行时改控件的父容器(Parent)和位置(Location)。详细步骤见书 p181–185。
## 先准备数据库
照片在 **WisdomCampus** 库的 **SecurityData** 表里,任务 4 的拍照和入侵检测会往里存;初始数据里这张表是空的,先在校园安防界面拍几张照片再查。查询用任务 3 写好的 `SQLBLL.GetSecurityData(开始日期, 结束日期)`,它返回"拍摄时间 → 照片"的 Dictionary。
## 界面和控件名
接着任务 4 的程序做。
| 窗体 | 名称(Name) | 文字(Text)和用途 |
| ------------ | ------------------------------------ | ----------------------------------------------------------------------------------------- |
| 校园安防 | `btn_history` | 查看历史图像:打开 SecurityCameraData 窗体 |
| 历史报警记录 | `SecurityCameraData` | 无边框、屏幕居中 |
| 历史报警记录 | `panel1` | 标题栏:背景色 100, 116, 133,左边标签 `label1`"历史报警记录"(白字) |
| 历史报警记录 | `pic_close` | 标题栏右边的关闭按钮:背景图片 `windowstate_closed_hover`,背景排列 Center |
| 历史报警记录 | `panel_toolBar` | 工具栏:背景色 229, 229, 229 |
| 历史报警记录 | `dateTimePicker1`、`dateTimePicker2` | 开始时间、结束时间(左边各配一个标签) |
| 历史报警记录 | `btn_get` | 查询 |
| 历史报警记录 | `pic_camera` | 显示照片:背景色 64, 64, 64 |
| 历史报警记录 | `lb_noData` | NO DATA(红字,背景色 64, 64, 64,字号 48),叠在 pic_camera 中间 |
| 历史报警记录 | `lb_time` | TIME(红字,背景色 64, 64, 64),叠在 pic_camera 右下角,显示拍摄时间 |
| 历史报警记录 | `pic_up`、`pic_down` | 左、右翻页箭头:图片 `arrow_left_normal`、`arrow_right_normal`,SizeMode 设为 CenterImage |
> 注意 `pic_up` 是**左**箭头(上一张)、`pic_down` 是**右**箭头(下一张),名字照书上写。
## 实现步骤
1. **项目资源**里再勾选 `windowstate_closed_hover`、`arrow_left_normal`、`arrow_right_normal`。
2. 点 **+ 新建窗体** 建 `SecurityCameraData`,按上表搭界面。
3. 校园安防 `btn_history` 的 Click:`new SecurityCameraData().ShowDialog();`。
4. 引用 `DeviceCtrlLibrary`、`智慧校园.SQLHelpers`,声明字段:照片集合 `ImgDictionary`(`Dictionary<string, Image>`)、当前下标 `index = -1`、当前照片 `img`、时间列表 `Keys`(`List<string>`)。
5. 写 **ImageChanged(char UpOrDown = '+')**:`'+'` 时下标加 1、`'-'` 时减 1,超过最后一张回到第一张、小于 0 回到最后一张;按 `Keys[index]` 从集合里取出照片显示到 `pic_camera`,时间显示到 `lb_time`。
6. 写 **GetData()**:用两个日期时间选择器的 Value 调用 `SQLBLL.GetSecurityData`,下标设回 −1,清空 `Keys`;没有照片就显示 `lb_noData` 并返回,有照片就隐藏它,把所有时间加进 `Keys`,调用 `ImageChanged()` 显示第一张。
7. **SecurityCameraData_Load**:把 `pic_up`、`pic_down` 的 Parent 设成 `pic_camera`,位置分别设为 (20, 0) 和 (560, 0),然后调用 `GetData()`。
8. **btn_get 的 Click**:`GetData();`
9. **pic_up 的 Click**:`ImageChanged('-');` **pic_down 的 Click**:`ImageChanged();`
10. **pic_close 的 Click**:`this.Close();`
## 和书上不一样的地方
> **每次查询前清空 Keys**:书上的 GetData 没有 `Keys.Clear();`,查第二次时 Keys 里还留着上次的时间,翻页时照片和时间就对不上了。在下标设回 −1 的地方加上 `Keys.Clear();`。
## 在平台上怎么试
> 先准备:做过任务 4 的话,SecurityData 表里已经存了任务 4 拍的照片和入侵照片,下面看到的第一张就不是 9:00 那张。先到右上角的**数据库**页面点"恢复实验初始数据",选"项目8 任务5",把表清空(自动评分每次都用干净的库,不受影响)。
1. 在实训台的**时钟**里拨到 9:00:00,运行后打开校园安防,等画面出来点"拍照";再拨到 10:30:00,再拍一张。
2. 点"查看历史图像",打开历史报警记录窗体:两个日期默认都是今天,显示第一张照片,右下角时间是 9:00 左右,"NO DATA"不显示。
3. 点右箭头显示 10:30 那张,再点回到第一张;点左箭头往回翻。
4. 开始时间选 2024-01-01,点"查询",还能查到今天的照片;结束时间再改成 2024-01-31,点"查询",显示"NO DATA"。
5. 点右上角的关闭按钮,回到校园安防界面。