Files
IOT_SIM/samples/p4-t3-报警灯/task.md
T
xuyueandClaude Opus 5.5 d4b8bf9241 任务说明补齐 23 份;设计器支持窗体改名
- 其余 21 个实验的 task.md:控件名照示例代码,"在平台上怎么试"和评分步骤一致,列出书上的印刷错误和控件名不一致
- 窗体改名:属性窗口里选中窗体可以改名称,类名、构造函数、new X()、Program.cs 和两个文件名一起改;方法名和字符串不变
- 11 个主窗体不叫 Form1 的实验,任务说明提示先改窗体名再双击生成 Load 事件
- 测试:表头只认分隔行上面那一行,数据行里出现"名称"不再被当成表头

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:55:39 +08:00

43 lines
2.3 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.
## 任务目标
做一个报警灯控制程序:选好 ADAM-4150 的串口点"开启",点"开"报警灯亮,点"关"报警灯灭,窗体上的报警灯跟着实训台上的灯一起变。
练习重点:switch 语句、带参数的方法。详细步骤见书 p84–87。
## 界面和控件名
| 控件 | 名称(Name) | 文字(Text)和用途 |
|---|---|---|
| 窗体 | `Form1` | 报警灯 |
| 报警灯 | `alarm1` | 窗体上显示报警灯的亮灭(工具箱"物联网设备"里的**报警灯**) |
| 按钮 | `btn_alarmOpen` | 开(打开报警灯) |
| 按钮 | `btn_alarmClose` | 关(关闭报警灯) |
| 分组框 | `groupBox1` | 配置 |
| 标签 | `label1` | 报警灯 |
| 下拉框 | `com_port` | ADAM-4150 的串口 |
| 按钮 | `btn_open` | 开启(打开后变成"关闭") |
> 书上的表格把报警灯控件的名称写成 `Alarm`,那是控件的类型名;代码里用的名字是 `alarm1`,请按代码写,否则自动评分找不到它。
## 实现步骤
1. 代码开头加上 `using System.IO.Ports;` 和 `using DeviceCtrlLibrary;`。
2. 声明全局变量 `bool IsOpen = false;`。
3. **Form1_Load**:和任务 1 一样,把串口号加进 `com_port`。
4. 写一个方法 `AlarmOnOff(string Device, bool IsOpen)`,用 switch 按设备名分支:
- `"Alarm"`:调用 `adam4150Helper.OnOff(0, IsOpen)` 控制接在 DO0 的报警灯,再调用 `alarm1.OnOff(IsOpen)` 改窗体上的报警灯;
- `"LED1"`、`"LED2"`:分别控制继电器 1、2;
- 其他(default):弹出"没有合适的接口程序!"。
- 每个分支最后都要有 `break;`。
5. **btn_open 的 Click**:把 `IsOpen` 取反,打开时 `adam4150Helper.Open(com_port.Text)`、文字改成"关闭",关闭时 `adam4150Helper.Close()`、文字改回"开启"。这个任务不用定时器。
6. **btn_alarmOpen、btn_alarmClose 的 Click**:分别调用 `AlarmOnOff("Alarm", true)`、`AlarmOnOff("Alarm", false)`。
## 和书上不一样的地方
> 书上的全局变量又印成了 `boolIsOpen = false;`,`bool` 和 `IsOpen` 之间要有空格,照抄会编译不过。
## 在平台上怎么试
1. 运行后串口选 **COM3**(ADAM-4150),点"开启",按钮变成"关闭"。
2. 点"开",窗体上的报警灯和实训台顶棚的**警示灯**应一起亮;点"关",一起灭。