尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

上位机没有中断只能轮询,协议怎么设计?五条指令闭环就够了

上位机没有中断只能轮询,协议怎么设计?五条指令闭环就够了 上位机没有中断只能轮询协议怎么设计五条指令闭环就够了一句话: 客户上位机不做中断、不解析屏协议只会定时发一条命令、收一条应答。与其把屏上每个按钮都映射成一条指令不如精简成五条写使能、写功率、写通道、初始查询、周期状态——配合回显确认约定一次交互闭环。适合谁读要给设备写上位机协议但对方上位机很笨纯轮询、无状态、不搞事件协议越简单越好的嵌入式工程师。场景上位机比屏笨得多设备本身带触摸屏屏端协议是按控件事件设计的按钮按下、输入完成、状态变化固件都会主动推送。屏很聪明协议可以复杂。但客户上位机不一样不会解析屏的推送只能我发一条、你回一条没有事件机制只能定时轮询不想管控件 ID只关心使能、功率、通道、读状态如果照搬屏协议给上位机几十条控件命令、主动推送客户集成成本极高还容易出错。解法给上位机单独精简一套五条指令核心思路上位机只需要写什么和读什么不需要显示什么。屏管显示上位机管控制。精简之后只留五条指令方向功能数据写使能上位机→设备开/关发光1 字节 01/00写功率上位机→设备设目标功率4 字节 float写即生效写通道上位机→设备切通道2 字节通道号初始查询设备→上位机上电/连接时拉一次全量参数起始频率、精度、通道数、当前通道、目标功率周期状态设备→上位机轮询时读实时状态实际功率 float 运行状态 1 字节五条指令覆盖客户所有需求上位机集成代码就是定时发查询 需要时发写命令不需要任何状态机。三个设计细节少了必乱1. 初始查询 vs 周期状态职责分开初始查询连接时发一次拿不常变的全量参数——起始频率、精度、通道数、当前通道、目标功率。上位机用它初始化界面。周期状态定时轮询只拿实时变化的——实际功率、运行状态。数据短、频率高。把两种信息混在一条命令里要么每次应答太长要么初始化信息拿不全。分开后查询一次管界面轮询只管刷新各司其职。2. 回显确认接受回显请求值拒绝回显当前值上位机发写命令后怎么知道固件接受还是拒绝了约定一条规则固件接受 → 回显请求的值拒绝 → 回显当前的值。比如写功率 5.00回显 5.00 说明接受了回显 3.50当前值说明被拒。上位机收到应答对比请求值和回显值就知道成没成不需要专门的错误码。这条约定要写进协议文档不然两边对回显什么理解不一致又得扯皮。3. 未使能时状态推 -1.0语义别和 0 混淆周期状态里功率字段在未使能时推什么推 0 会被上位机当成目标功率 0推旧值会让客户以为还在发光。约定未使能推 -1.0上位机一看到负数就知道无有效功率显示空白即可。一字节状态位停机/启动中/运行配合使用语义完全无歧义。五条指令闭环的交互流程上位机连接 └→ 初始查询 ──→ 拿到全量参数初始化界面 └→ 周期状态 ──→ 每 500ms 轮询刷新功率状态 └→ 写通道/写功率/写使能 ──→ 回显确认 └→ 继续周期状态轮询界面自动跟上上位机全程一个循环定时发周期状态 → 需要时发写命令 → 对比回显。不需要中断、不需要事件、不需要解析主动推送。总结上位机协议单独精简屏管显示、上位机管控制各五条指令初始查询管初始化周期状态管刷新职责分开回显确认约定接受回显请求值/拒绝回显当前值省掉错误码未使能推 -1.0语义清晰不歧义给笨上位机设计协议原则就一条让客户的集成代码简单到不需要看你的状态机。协议越精简集成越快返工越少。实测对比让上位机复刻屏的操作流程命令多时序乱 | 精简为写参数初始查询周期状态五条客户一行循环代码搞定有用的话点个收藏下次给客户写上位机协议直接照这个五条结构设计。有问题欢迎评论区交流看到了都会回。
返回列表