Files
IOT_SIM/samples/p4-t2-网络摄像机/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

3.6 KiB
Raw Blame History

任务目标

做一个校园监控程序:输入摄像机 IP 点"开",图片框里实时显示摄像机拍到的画面;用四个方向键转动摄像机;点"拍照"把当前画面保存成图片。

练习重点:图片框(PictureBox)、给设备的事件绑定处理方法(+=)、static 变量、文件夹和图片的保存。详细步骤见书 p78–81。

界面和控件名

控件 名称(Name) 文字(Text)和用途
窗体 Form1 网络摄像机
图片框 pictureBox1 显示画面;背景色设为黑色,显示方式选"拉伸填满"(StretchImage)
标签 label1 摄像机IP
文本框 txt_ip 输入摄像机的 IP
按钮 btn_open 开(打开后变成"关")
按钮 btn_up ↑(向上转)
按钮 btn_down ↓(向下转)
按钮 btn_left ←(向左转)
按钮 btn_right →(向右转)
按钮 btn_camera 拍照

实现步骤

  1. 代码开头加上 using System.IO; 和 using DeviceCtrlLibrary;。
  2. 声明 4 个全局变量:拍照保存路径 CameraPath(static,程序所在目录下的 Camera/ 文件夹)、摄像机 IP IpCameraIPAddress(static)、bool IsOpen、存当前画面的 Image ReadImage。
  3. 写一个方法 ipCameraHelper_ImageRead(ImageReadEvenArgs e):把 e.img 存进 ReadImage,再显示到 pictureBox1。
  4. Form1_Load:Camera 文件夹不存在就用 Directory.CreateDirectory 建一个;用 += 把第 3 步的方法绑定到 DeviceCtrlHelper.ipCameraHelper.ImageRead 事件上。
  5. btn_open 的 Click:先把 IsOpen 取反;
    • 打开时:取 txt_ip 里的 IP,调用 ipCameraHelper.Open(IP, "admin", "") 连接,再 Start() 开始传画面,按钮文字改成"关";
    • 关闭时:Stop() 停止传画面,按钮文字改回"开"。
  6. 四个方向键的 Click:分别调用 ipCameraHelper.PanUp()、PanDown()、PanLeft()、PanRight()。
  7. btn_camera 的 Click:ReadImage 不是 null 时,用当前时间做文件名,ReadImage.Save(...) 存成 .jpg 到 CameraPath。

和书上不一样的地方

书上第 6 步只写了 using System.IO.Ports;,可是 Directory 要用 using System.IO;,不加会编译不过。这个任务不用串口,System.IO.Ports 可以不写。

在平台上怎么试

  1. 运行后在 IP 框里填 192.168.2.50(填别的 IP 也能连上,但不能空着:空着点"开",按钮照样变,画面却一直是黑的),点"开",按钮变成"关",图片框里出现东围墙的画面,实训台顶棚的网络摄像头亮起。
  2. 窗体比较大,运行区会缩小显示,可以点运行区右上角的"放大"。点四个方向键,画面应跟着转动:每点一次转一格,左右各 3 格、上下各 1 格,转到头就不再动。
  3. 点"拍照",运行区下方出现"程序保存的图片",点开能看到刚拍的照片(只在这次运行中保留)。
  4. 再点"关",按钮变回"开",画面停止更新。