edyang

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

PLC 与上位机握手:处理提前回执和重复消息

上位机已经返回完成,PLC 却还停在等待,或下一轮直接被旧完成码放行。问题往往在接收、锁存与消费的时间关系,需要把消息生命周期写清楚。

上位机已经返回完成,PLC 却还停在等待,或下一轮直接被旧完成码放行。问题往往在接收、锁存与消费的时间关系,需要把消息生命周期写清楚。 外部回执可能先于状态机进入等待步骤。如果值被覆盖,结果会丢失;消费后不清除,旧回执会再次生效。任务序号、锁存状态与明确确认可以约束消息归属。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务语义。一个端口可打开,只证明访问条件...

Modbus 寄存器解析:地址、字节序和数据类型

两个 16 位寄存器读到数值以后,还需要确认它们是两个通道,还是一个 32 位量的高低字。错误拼接可能生成看似连续却完全错误的物理值。

两个 16 位寄存器读到数值以后,还需要确认它们是两个通道,还是一个 32 位量的高低字。错误拼接可能生成看似连续却完全错误的物理值。 协议寄存器宽度固定,不同厂商对多寄存器类型的字序和缩放另有约定。文档的 40001 风格地址与请求中的偏移表示也可能不同,必须核对使用的客户端约定。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务语义。一个端口可打开,只证明...

RS485 采集超时:从物理链路到有效回包

串口软件显示 connected 以后仍然 timeout,说明打开端口与设备返回有效帧是不同阶段。总线、权限、协议参数和寄存器解释需要分别取证。

串口软件显示 connected 以后仍然 timeout,说明打开端口与设备返回有效帧是不同阶段。总线、权限、协议参数和寄存器解释需要分别取证。 RS485 描述电气传输,Modbus RTU 描述帧和功能。设备地址、波特率、校验位、请求间隔与 CRC 决定回包条件;多个主站争用时,参数都正确也可能通信失败。 一、问题的范围与前提 设备接入需要贯通物理连接、通信帧、数据解释与业务...

MQTT 保留消息:最新状态不能当实时事件

新订阅者一连接就收到设备状态,这通常是保留消息的用途。但如果把同一条状态当作新发生的报警,重新连接就可能重复触发业务。

新订阅者一连接就收到设备状态,这通常是保留消息的用途。但如果把同一条状态当作新发生的报警,重新连接就可能重复触发业务。 保留消息为主题保存最近一份内容,不是消息历史,也不保证内容仍新鲜。事件与状态应使用明确的主题和字段,接收者结合采集时间、有效期与 retained 标识解释。 一、问题的范围与前提 消息传输、业务处理与设备执行具有不同完成条件。消息系统可以提供队列和协议确认,但不...

MQTT QoS 与业务去重:收到一次和执行一次不同

设备使用较高 QoS 后,业务仍可能重复处理。协议确认覆盖的是消息传递阶段,应用的数据库写入和执行结果还需要自己的身份与确认机制。

设备使用较高 QoS 后,业务仍可能重复处理。协议确认覆盖的是消息传递阶段,应用的数据库写入和执行结果还需要自己的身份与确认机制。 QoS 0、1、2 表达不同交付语义,QoS 1 可出现重复;QoS 2 的协议去重范围也不是跨系统业务事务。应用重连、消息再发布或处理回执丢失仍可能触发新的业务动作。 一、问题的范围与前提 消息传输、业务处理与设备执行具有不同完成条件。消息系统可以提...

接口重复提交:用幂等键处理回执丢失

请求已经被服务端处理,客户端却因为超时又发一次,会导致重复订单或重复操作。网络结果未知与业务处理失败不能直接画等号。

请求已经被服务端处理,客户端却因为超时又发一次,会导致重复订单或重复操作。网络结果未知与业务处理失败不能直接画等号。 幂等设计为同一业务意图提供稳定身份。服务端在持久化边界内记录幂等键和处理结果,重复请求返回已知结果;请求内容改变时不能仍复用同一个键。 一、问题的范围与前提 接口由请求身份、参数语义、授权条件和结果状态共同构成。HTTP 层成功只描述传输与响应,业务处理还可能处于受...

Git 管理部署版本:代码、配置与镜像一起追踪

代码回退了,服务行为却没有恢复,原因可能是镜像、依赖或数据库状态没有一起回退。交付版本应描述真正运行的组合,而不是只记一个分支名字。

代码回退了,服务行为却没有恢复,原因可能是镜像、依赖或数据库状态没有一起回退。交付版本应描述真正运行的组合,而不是只记一个分支名字。 提交标识代表源码快照,镜像摘要代表构建结果,配置版本代表运行条件,数据迁移则改变持久状态。它们之间需要关联,才能判断一个版本是否可再次部署。 一、问题的范围与前提 技术交付包含环境、接口、数据、权限和验证范围。某个模块演示成功,不代表整套系统已验收。...

设备时间不一致:采集时间、接收时间与时区

同一事件在设备、服务器和页面显示不同时间,可能是时区,也可能是设备时钟漂移。要先确定每个时间字段代表什么,不能把它们按字符串相等来核验。

同一事件在设备、服务器和页面显示不同时间,可能是时区,也可能是设备时钟漂移。要先确定每个时间字段代表什么,不能把它们按字符串相等来核验。 采集时间来自设备观测,接收时间来自平台到达,处理时间来自计算完成。时区转换改变表示,不改变同一个绝对时刻;时钟偏差、队列等待与网络传输却会改变事件排序依据。 一、问题的范围与前提 数据类型、单位、身份、时间与质量构成一份完整观测。传输格式相同不说...

Linux 日志增长:如何保留排查证据并控制磁盘

服务稳定运行一段时间后根分区满,日志可能来自 journal、容器或应用目录。直接删除全部日志会丢失故障证据,应先确认增长源与保留要求。

服务稳定运行一段时间后根分区满,日志可能来自 journal、容器或应用目录。直接删除全部日志会丢失故障证据,应先确认增长源与保留要求。 日志文件大小、目录占用和被进程打开但已删除的文件,是三个不同对象。轮转、压缩与保留周期控制累积量,进程持续写入已删除文件时磁盘空间未必立即回收。 一、问题的范围与前提 单台 Linux 主机上的进程、文件、网络和服务管理有各自边界。排查时先确认当...

Java 数据库连接池:连接超时与 SQL 超时分开查

接口等待很久后报超时,可能在等待连接,也可能已经连接却执行 SQL 缓慢。统一把超时值调大,会增加请求积压并掩盖真正的瓶颈。

接口等待很久后报超时,可能在等待连接,也可能已经连接却执行 SQL 缓慢。统一把超时值调大,会增加请求积压并掩盖真正的瓶颈。 连接池限制同时借出的连接数。获取连接等待、驱动连接建立、SQL 执行和事务持锁属于不同阶段;长事务、连接未归还以及并发突增,都可能耗尽可用连接。 一、问题的范围与前提 应用配置、依赖注入、连接池和事务共同决定运行结果。启动日志没有异常,不代表业务依赖都已就绪...