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

5.7 KiB
Raw Permalink Blame History

任务目标

做"历史报警记录"窗体 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. 点右上角的关闭按钮,回到校园安防界面。