edyang

我干了什么 究竟拿了时间换了什么
技术分享时间线软件开发、设备接入、视觉与运维实践

USB 扩展异常:用交叉测试区分线材与驱动

串口接原接口正常,接扩展坞失败,继续修改串口参数可能无效。加入鼠标等简单设备,可以判断异常是否超出某个业务驱动。

串口接原接口正常,接扩展坞失败,继续修改串口参数可能无效。加入鼠标等简单设备,可以判断异常是否超出某个业务驱动。 USB 枚举、Hub 状态与协议传输发生在串口业务之前。内核的 -71 表达协议错误线索,可能与线材、接触、供电或兼容条件有关,错误码本身不能确定唯一故障件。 一、问题的范围与前提 规格、安装与实际工作条件需要分别核对。接口外形相同不证明电气和数据能力相同,标称性能也不...

USB 串口稳定命名:编号变化与设备身份

多个适配器插拔以后 ttyUSB 编号变化,应用可能连上错误的设备。问题应由设备身份与映射管理解决,不能假设第一个端口永远属于同一模块。

多个适配器插拔以后 ttyUSB 编号变化,应用可能连上错误的设备。问题应由设备身份与映射管理解决,不能假设第一个端口永远属于同一模块。 内核编号依赖发现顺序,udev 可以根据设备属性建立稳定链接。适配器是否具有唯一序列号需要实查;相同型号或无序列号设备可能只能结合物理端口路径区分。 一、问题的范围与前提 规格、安装与实际工作条件需要分别核对。接口外形相同不证明电气和数据能力相同...

SQLite 边缘存储:事务、并发写入与备份

边缘设备需要离线保存事件,SQLite 便于单机部署,但把每个线程直接写数据库,会遇到锁等待与状态不一致。存储方案要结合写入节奏和恢复要求设计。

边缘设备需要离线保存事件,SQLite 便于单机部署,但把每个线程直接写数据库,会遇到锁等待与状态不一致。存储方案要结合写入节奏和恢复要求设计。 SQLite 事务具有本地提交边界,WAL 模式可以改善读写并行条件,却仍然通常只有一个写者。连接的线程使用约束、busy timeout 与事务长度影响排队。 一、问题的范围与前提 数据库连接、事务、SQL 执行和数据结果应分别验证。一...

配置文件更新:临时文件与原子替换的边界

程序写配置时被中断,下一次启动读到半个 JSON,说明文件写入也需要发布边界。直接打开原文件覆盖,会把读者暴露在中间状态。

程序写配置时被中断,下一次启动读到半个 JSON,说明文件写入也需要发布边界。直接打开原文件覆盖,会把读者暴露在中间状态。 同一文件系统上的原子替换可以让读者看到旧文件或新文件,临时文件先完整写入再替换目标。原子可见性与断电后的持久性不同,后者还涉及文件和目录同步。 一、问题的范围与前提 解释器、依赖、进程与任务状态是不同层次。代码能在一个目录执行,不表示服务或另一个虚拟环境使用相...

Python 异常处理:保留错误原因并明确恢复范围

用一个 except 包住整个程序,可以让进程不退出,却也容易让错误数据继续进入后续流程。异常边界应和可恢复的操作范围一致,而不是尽量吞掉所有错误。

用一个 except 包住整个程序,可以让进程不退出,却也容易让错误数据继续进入后续流程。异常边界应和可恢复的操作范围一致,而不是尽量吞掉所有错误。 网络暂时失败、输入格式错误与程序逻辑缺陷具有不同处理方式。捕获具体异常后,分别决定重试、拒绝或终止;日志保留异常链,调用者获得明确失败结果。 一、问题的范围与前提 解释器、依赖、进程与任务状态是不同层次。代码能在一个目录执行,不表示服...

Python 导入异常:定位同名模块与解释器环境

标准库函数突然不存在,未必是 Python 安装损坏。项目中的 platform、json 或 logging 同名文件可能改变导入来源,同时多个解释器也会让安装与运行不属于同一环境。

标准库函数突然不存在,未必是 Python 安装损坏。项目中的 platform、json 或 logging 同名文件可能改变导入来源,同时多个解释器也会让安装与运行不属于同一环境。 Python 沿搜索路径寻找模块,入口目录与环境影响解析顺序。模块已在进程中缓存,改名后长期运行的解释器可能仍持有旧对象。依赖版本与文件来源应分别核对。 一、问题的范围与前提 解释器、依赖、进程与任...

无人值守称重:一车多次读数如何形成业务记录

地磅持续输出重量,但业务需要一条完整称重记录。车辆驶入、停稳、离开,以及重复称重,都需要通过过程状态而非单次数值判断。

地磅持续输出重量,但业务需要一条完整称重记录。车辆驶入、停稳、离开,以及重复称重,都需要通过过程状态而非单次数值判断。 重量流与称重会话有不同粒度。会话关联设备、对象与时间范围,稳定判断需要结合连续观测;入库记录再通过业务唯一键避免同一过程重复创建。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务语义。一个端口可打开,只证明访问条件的一部分;收到变化数值也不...

污染源监测数据接入:时间、质量码与补传

在线监测平台需要持续采集,并在网络恢复后补齐历史。数据接入不能只保存一个数值,设备状态、质量码、采样时间与接收时间影响后续统计含义。

在线监测平台需要持续采集,并在网络恢复后补齐历史。数据接入不能只保存一个数值,设备状态、质量码、采样时间与接收时间影响后续统计含义。 一次测量的有效性与传输成功是不同属性。离线补传会让旧采样晚到,统计应按业务时间归属;缺测、维护与故障值也不能简单替代为零。 一、问题的范围与前提 数据类型、单位、身份、时间与质量构成一份完整观测。传输格式相同不说明物理含义相同,接收成功也不说明数据新...

设备在线判断:心跳、数据新鲜度和业务可用性

终端还在发送心跳,测量值却很久没有更新。只用在线图标描述系统状态,会让使用者误以为采集功能也正常。

终端还在发送心跳,测量值却很久没有更新。只用在线图标描述系统状态,会让使用者误以为采集功能也正常。 心跳证明某条通信路径有活动,数据时间证明观测是否新鲜,功能探针证明目标业务是否可用。它们的周期、超时和恢复条件应独立定义。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务语义。一个端口可打开,只证明访问条件的一部分;收到变化数值也不证明单位正确。测点身份、量程...

Node-RED 数据入口:先统一状态语义再写规则

同一设备数据可能以 Buffer、字符串或对象到达,而组合信号可能把多个条件压成一个布尔值。入口不统一,业务层会把格式错误和真实状态混在一起。

同一设备数据可能以 Buffer、字符串或对象到达,而组合信号可能把多个条件压成一个布尔值。入口不统一,业务层会把格式错误和真实状态混在一起。 数据解析解决格式,状态建模解决含义。一个“两条件同时满足”的 false 无法推导是哪项未满足,软件不能凭字段重命名恢复没有观测到的信息。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务语义。一个端口可打开,只证明访...