实训台接线:串口要选对。接线做成数据(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>
This commit is contained in:
1 parent
163e553de4
commit
46e0f40cce
35 files changed
+637
-98
No files matched your search
@@ -1,5 +1,7 @@
|
||||
import { expect, test } from 'bun:test'
|
||||
import { DEFAULT_WIRING, describePortProblem, portProblems } from '@iot/shared'
|
||||
import { Board } from '../src/board'
|
||||
import { sampleWiring } from '../src/samples'
|
||||
|
||||
test('滑块输入取整并限制在范围内,开关输入只接受布尔值', () => {
|
||||
const board = new Board()
|
||||
@@ -31,3 +33,50 @@ test('学生程序控制输出设备:LED 屏、4150 继电器、ZigBee 继电
|
||||
expect(board.state.relays.every((on) => !on)).toBe(true)
|
||||
expect(board.state.ledText).toBe('')
|
||||
})
|
||||
|
||||
test('接线:记下程序打开的串口,指出打开错了的设备;复位不改接线,程序结束时串口关闭', () => {
|
||||
const board = new Board()
|
||||
board.applyDevice({ type: 'device', device: 'adam4017', action: 'open', data: 'COM2' })
|
||||
board.applyDevice({ type: 'device', device: 'adam4150', action: 'open', data: 'com2' })
|
||||
board.applyDevice({ type: 'device', device: 'led', action: 'open', data: '' })
|
||||
expect(portProblems(board.state).map(describePortProblem)).toEqual([
|
||||
'程序在 com2 上打开 ADAM-4150,它接在 COM3',
|
||||
'程序没有选串口就打开了 LED 屏,它接在 COM5',
|
||||
])
|
||||
|
||||
// 项目 7:4150 并到 COM2 的 485 总线上
|
||||
expect(board.setWiring({ ...DEFAULT_WIRING, adam4150: 'COM2' })).toBe(true)
|
||||
expect(board.setWiring({ ...DEFAULT_WIRING, adam4150: 'COM2' })).toBe(false)
|
||||
expect(board.runnerInputs().wiring?.adam4150).toBe('COM2')
|
||||
expect(portProblems(board.state).map((w) => w.device)).toEqual(['led'])
|
||||
|
||||
board.applyDevice({ type: 'device', device: 'led', action: 'close', data: null })
|
||||
expect(portProblems(board.state)).toEqual([])
|
||||
board.reset()
|
||||
expect(board.state.wiring.adam4150).toBe('COM2')
|
||||
expect(board.state.opened.adam4017).toBe('COM2')
|
||||
board.programExited()
|
||||
expect(Object.values(board.state.opened).every((port) => port === null)).toBe(true)
|
||||
})
|
||||
|
||||
test('串口没打开(或已关闭)时程序还在读写设备:提示一次,打开后、程序结束时清除', () => {
|
||||
const board = new Board()
|
||||
expect(board.applyDevice({ type: 'device', device: 'adam4150', action: 'unopened', data: null })).toBe(true)
|
||||
expect(board.applyDevice({ type: 'device', device: 'adam4150', action: 'unopened', data: null })).toBe(false)
|
||||
expect(portProblems(board.state).map(describePortProblem)).toEqual(['ADAM-4150 的串口没有打开,程序却在读写它(它接在 COM3)'])
|
||||
|
||||
board.applyDevice({ type: 'device', device: 'adam4150', action: 'open', data: 'COM3' })
|
||||
expect(portProblems(board.state)).toEqual([])
|
||||
board.applyDevice({ type: 'device', device: 'adam4150', action: 'close', data: null })
|
||||
board.applyDevice({ type: 'device', device: 'adam4150', action: 'unopened', data: null })
|
||||
expect(portProblems(board.state).map((p) => p.device)).toEqual(['adam4150'])
|
||||
board.programExited()
|
||||
expect(portProblems(board.state)).toEqual([])
|
||||
})
|
||||
|
||||
test('实验的接线:项目 7 把 4150 并到 COM2,其他实验和未知实验用默认接线', async () => {
|
||||
expect(await sampleWiring('p7-t1-智慧教室')).toEqual({ ...DEFAULT_WIRING, adam4150: 'COM2' })
|
||||
expect(await sampleWiring('p4-t3-报警灯')).toEqual(DEFAULT_WIRING)
|
||||
expect(await sampleWiring('../p7-t1-智慧教室')).toEqual(DEFAULT_WIRING)
|
||||
expect(await sampleWiring()).toEqual(DEFAULT_WIRING)
|
||||
})
|
||||
Reference in new issue
Block a user