[SECS/GEM研究] (五) SECS-II 是什么
SECS/GEM 协议栈开发笔记 · 第 5 篇基于代码库Libsecs一个 C 实现的 SEMI 协议栈说在前面由于工作的原因本人早些年开发了一套SEMI标准的协议栈用于公司的SECS标准实现为了防止经验遗忘特写下本专辑以免后续忘记。前面几篇聊了SECS-I/HSMS分别来自标准SEMI-E4和SEMI-E37这俩标准其实都是规定如何把消息可靠的送给通讯的对方。那么消息是什么之前一直用SxFy指代真正的业务消息却没解释SxFy到底是啥、括号里那串东西又是什么结构。这一篇就来讨论下消息内部看看 SECS-IISECS-II其实就是SECS协议的消息体标准来自SEMI-E5。SECS-I / HSMS管的数据是怎么运SECS-II 管的是货长啥样。我个人觉得这一层才是整个协议栈里最该花篇幅的——因为设备跟工厂所有对话内容最终都落在这套数据类型上。一、SECS-II 是内容层一句话定位SECS-I 和 HSMS 把消息当不透明的字节流搬来搬去SECS-II 则定义了这些字节流的语法——什么类型、几个元素、怎么嵌套。它不规定你该发什么业务消息那是以后的 GEM 层干的它只规定数据的最小单元长什么样。这个最小单元在 SECS-II 里叫Data Item数据项。这是SECS协议中的最小单元。二、12 种数据类型ItemSECS-II 把数据归成十来种基础类型一般来说其中常用的有 12 种。我把它列成一张表format byte 那列就是它在线上真正的身份证号E5 标准定的类型含义format byte例子LList容器可嵌套0x00L ...BBinary字节串0x20B 0x01 0x02BOOLEAN布尔0x24BOOLEAN 1AASCII字符串0x40A OKI1/I2/I4/I8有符号整数1/2/4/8 字节0x64/0x68/0x70/0x60I4 -100U1/U2/U4/U8无符号整数1/2/4/8 字节0xA4/0xA8/0xB0/0xA0U2 500F4/F8浮点4/8 字节0x90/0x80F8 3.14159标准里其实呢还有个 JIS8那是一个日文旧字符集现在基本没人用了我在我的协议栈中也没去实现有兴趣的可以去阅读SEMI-E5标准文献细心的人这里能看出规律I 系列 format 高字节是 0x6xU 是 0xAxF 是 0x8x/0x9xA/B/Boolean 落在 0x0x~0x4x 档。我想这不是巧合——E5 把类型 每个元素占几字节编码进了一个字节。具体哪几位代表啥我建议直接翻 E5 原文档至于你要说为什么这样定义那我也不知道这是之前的半导体专家标准组织决定的。很多人第一次看 S1F1 / S6F11 这种编号以为是哪家设备厂的内部代号其实完全是 SEMI 标准拍板的跟厂家无关。三、一个 Item 具体是怎么个结构光看类型名不够得知道它在网线上到底几个字节。一个 Item 的线格式就三段[ format byte ] [ length 字段 ] [ 数据体 ]重点在 length 字段——它是可变长的这是 SECS-II 一个很聪明的设计format byte 的低 2 位表示长度字段本身占几个字节1、2 或 3 字节长度 ≤ 255 用 1 字节长度就够了超过 255自动升到 2 字节最多 65535再大就 3 字节。长度这里其实比较搞混我在我的协议栈里面写L::toByteArray()时会先算长度0xff 就把长度字节数加 10xffff 再加 1最后把FORMAT_CODE | 长度字节数写进 format byte再按字节数吐出长度最后递归写子项。如下伪代码思路intnoOfLengthBytes1;if(len0xffff)noOfLengthBytes;// 升到 3 字节if(len0xff)noOfLengthBytes;// 升到 2 字节//1. 写 format byte//2. 写 length 字段1/2/3 字节按 len 大小//3. 递归写子项字节这种设计带来很大的好处一条消息无论多长接收端看一眼 format byte 的低 2 位就知道后面要读几个长度字节、数据有多长完全自描述不用提前约定上限。四、List 嵌套一条消息就是一棵树12 种类型里只有LList是容器它可以装任意 Item包括别的 L。这就让 SECS-II 能表达任意复杂的层级结构——按照数据结构来讲一条消息本质是一棵Item 树。我在代码里面实现L这个类值类型就是std::vectorItemPtrItem 的智能指针数组所以L能add()任意子项子项还能是另一个L。所以可以无限制的嵌套。最终行成一颗可以有任意节点的Item树,这颗树还可以用16进制完整描述。举个真实结构的例子一台设备上报当前状态可能是这样一棵树L (根) ├── A RUNNING ← 状态字符串 ├── U1 1 ← 某开关量 ├── F4 98.6 ← 温度 └── L (子列表) ├── U2 500 ← 产量 └── U2 3 ← 报警数这就是 SECS-II 表达复杂数据的全部秘密用 L 把基础类型一层层包起来。没有 JSON 那种花括号全靠 List 的层层嵌套。一开始不习惯看多了 SML第六节就顺了。五、SxFy 编号到底怎么读回到开头那个SxFy。S Stream流F Function功能。它俩合起来唯一标识这是条什么消息。StreamS—— 主题分类。SEMI 给每个数字段分配了大致主题常用的Stream主题S1设备状态、在线识别、通信建立S1F1/S1F2、S1F13/S1F14S2远程命令、时间、设备信息S5报警AlarmS6事件与报告Collection Event / ReportS7配方Process RecipeS9通信异常 / 错误消息S10终端服务TerminalS11/S12设备控制ControlFunctionF—— 具体操作而它的奇偶性有个标准规定的规矩这个标准是强制性的必须遵循奇数 Function primary主动发起 / 询问偶数 Function reply应答比如 S1F1 是设备问你在吗primaryhost 回 S1F2 “在我是 host”replyS5F1 设备报报警来了host 回 S5F2 “收到”。这个的好处也显而易见看编号就能猜出谁问谁答。再回想第三篇讲的W-bit消息头 stream 字节最高位置 1 表示我这条要你回正好跟奇数询问呼应——primary 消息一般带 W-bitreply 不带。六、SML让人能读的文本表示字节流人眼看不懂调试会疯。SECS-II 配套了一个文本表示法叫SMLSECS Message Language把那棵树写成带尖括号的嵌套文本。上节那棵树的 SML 长这样L[4] A RUNNING U1 1 F4 98.6 L[2] U2 500 U2 3 L[4]表示这是个含 4 个子项的 ListA RUNNING是 ASCII 串U1 1是无符号 1 字节整数。一眼就能看出结构排错时比抓包里的十六进制友好多了。七、小结SECS-IIE5这一层记住这几句它是内容层定义数据的最小单元 Item 和消息结构不关心怎么运12 种基础类型L/A/B/Boolean/I1-8/U1-8/F4/F8每种一个 format byte 身份证Item 线格式 format byte低 2 位标长度字段几字节 可变长长度 数据完全自描述靠 L 嵌套表达任意复杂结构一条消息就是一棵 Item 树SxFy 里 S 是主题、F 是操作F 奇数是询问、偶数是应答跟 W-bit 呼应SML 是消息的文本表示libsecs 支持 Item 树与 SML 双向转换。下一篇聊 SML 更细的用法以及多块multi-block拆分那点事——前面说过 HSMS 一条消息多大都能一次发完但 SECS-II 自己还有一套大消息拆成多块传输的机制跟 SECS-I 那种 254 字节硬砍不是一回事下篇捋清楚。本人不是 SEMI 专家上面这些也是当年啃 E5 文档一点点试出来的哪里理解有偏差评论区直接拍我。

相关新闻

【微调】大模型微调(Fine-tuning)

【微调】大模型微调(Fine-tuning)

第一部分:概述 大模型微调(Fine-tuning),在什么业务场景下需要微调而不是直接使用基础模型? 1. 从“通才”到“专才” 可以把基础大模型(如GPT-4、Llama)看作一位接受了通识教育(海量互联网文本&#xff09…

2026/8/1 5:54:06阅读更多 →
技术人夏季办公降温指南:4款实测装备提升编码舒适度

技术人夏季办公降温指南:4款实测装备提升编码舒适度

最近天气越来越热,办公室的空调开得再足,也挡不住从外面带进来的那股燥热。很多技术人一坐就是一天,颈椎、腰椎本来就容易出问题,再加上高温带来的烦躁,工作效率直接打对折。今天要聊的这几款降温消暑好物,…

2026/8/1 5:54:06阅读更多 →
3种内容管理场景下的抖音批量下载解决方案:douyin-downloader深度解析

3种内容管理场景下的抖音批量下载解决方案:douyin-downloader深度解析

3种内容管理场景下的抖音批量下载解决方案:douyin-downloader深度解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser…

2026/8/1 5:52:06阅读更多 →
Chrome浏览器localhost:6667无法访问?解析ERR_UNSAFE_PORT与端口安全策略

Chrome浏览器localhost:6667无法访问?解析ERR_UNSAFE_PORT与端口安全策略

1. 问题现场:当localhost:6667在Chrome中“消失”如果你是一名开发者,或者经常需要在本机搭建测试环境,那么对http://localhost:8080或http://127.0.0.1:3000这样的地址一定不会陌生。localhost代表本机回环地址,是我们进行本地开…

2026/8/1 7:08:34阅读更多 →
Starrocks 4.0.2索引技术解析与性能优化实践

Starrocks 4.0.2索引技术解析与性能优化实践

1. Starrocks 4.0.2索引技术全景解析Starrocks作为新一代MPP分析型数据库,在4.0.2版本中对索引系统进行了重要升级。与传统数据库的B树索引不同,Starrocks采用了更适合OLAP场景的混合索引架构。在实际测试中,一个包含1亿条数据的表使用N-gram…

2026/8/1 7:08:34阅读更多 →
【AI物流降本增效实战指南】:20年行业专家亲授5大落地场景+3个避坑红线

【AI物流降本增效实战指南】:20年行业专家亲授5大落地场景+3个避坑红线

更多请点击: https://kaifayun.com 第一章:AI物流降本增效的底层逻辑与价值锚点 AI在物流领域的价值并非源于算法本身的复杂性,而在于其对“不确定性”的系统性消解能力。传统物流依赖经验决策与静态规则,在需求波动、运力错配、…

2026/8/1 7:08:34阅读更多 →
网站病毒清除怎么做?公司网站维护与网站木马解决全流程方案,公司网站被病毒入侵、被挂木马?专业网站病毒清除+公司网站维护+

网站病毒清除怎么做?公司网站维护与网站木马解决全流程方案,公司网站被病毒入侵、被挂木马?专业网站病毒清除+公司网站维护+

网站病毒清除怎么做?公司网站维护与网站木马解决全流程方案“公司网站突然跳转到博彩页面”、“网站文件被加密勒索”、“服务器里多了好多不认识的文件”——这些是网站病毒入侵后的典型症状。对于企业而言,网站不仅是品牌展示的窗口,更是业…

2026/8/1 7:08:34阅读更多 →
AI摆摊:在 muShanghai × 观猹 AI 练摊集市的一次高密度体验

AI摆摊:在 muShanghai × 观猹 AI 练摊集市的一次高密度体验

AI摆摊:在 muShanghai 观猹 AI 练摊集市的一次高密度体验 那天下午,我拖着行李箱站在上海静安寺附近一个不起眼的弄堂口,里面传来此起彼伏的键盘敲击声和机器人关节电机转动的声音。门口挂着一块手写牌:「muShanghai 观猹 AI 练…

2026/8/1 7:08:34阅读更多 →
Python脚本在cmd中无输出?系统化排查与解决方案

Python脚本在cmd中无输出?系统化排查与解决方案

1. 问题现象与初步排查如果你在Windows的cmd命令行里,输入python3 your_script.py后,光标闪了一下,然后什么也没发生——没有输出,没有报错,程序也没运行,cmd只是安静地回到了命令提示符状态——那你大概率…

2026/8/1 7:06:34阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →