3. 配方管理相关SECS-II消息详解
配方在SECS/GEM体系中并不是一个“文件”概念,而是一组由设备与主机共同约定的结构化数据对象。主机要读取、上传、下载、删除或比对配方,靠的是一组语义明确、方向固定的SECS-II消息。理解这些消息的关键,不是背编号,而是搞清楚三件事:谁发起、携带什么数据、设备如何应答。本章围绕S7F1/F2、S7F3/F4、S7F5/F6、S7F17/F18、S7F19/F20、S7F23/F24、S7F25/F26逐对展开。
先建立一个总览:S7系列消息中,奇数号(F1、F3、F5…)通常由主机发往设备(或作为请求),偶数号(F2、F4、F6…)是设备对奇数号的应答。方向约定是本章所有讨论的基准——下文凡说“主机→设备”,均指主机主动发起;说“设备→主机”,均指设备作为应答方或主动上报方。切换方向时会明确说明。
S7F1/F2:上传前的“握手”
S7F1是主机向设备请求上传配方的第一步,它并不携带配方内容,只携带PPID(配方标识)和可选的PPBODY长度。设备收到后用S7F2应答,核心字段是GRANT(授权状态):GRANT=0表示允许上传,GRANT=1表示拒绝。实际工程中,设备拒绝的常见原因是配方正在被使用、权限不足或存储空间不够。主机必须先收到GRANT=0,才能继续发S7F3,否则流程终止。这一对消息的价值在于:把“能不能传”和“传什么”分开,避免无效的大数据量传输。
S7F3/F4:配方主体的下发
S7F3是主机向设备下发配方内容的正式消息,数据项为PPID + PPBODY。PPBODY是配方主体,通常是一段结构化文本或二进制块,其内部格式由设备与主机在GEM模型之外另行约定(例如按行分隔的参数表)。设备收到后校验并存储,用S7F4应答,携带ACKC7:0表示接受,1表示已存在,2表示空间不足,3表示无效PPID,4表示其他错误。这里要特别注意:S7F4只表示“设备是否收下”,不表示“配方是否已生效”。配方生效往往还需要后续的PP-SELECT或S7F23比对确认。
S7F5/F6:读取设备上的配方
S7F5是主机请求读取设备当前保存的某个配方,携带PPID。设备用S7F6返回PPID + PPBODY。与S7F3方向相反,S7F5/F6是“设备→主机”的数据回流,常用于主机侧做版本备份或差异比对。如果PPID不存在,设备通常返回S7F6但PPBODY为空,或通过S7F0(错误消息)报告。工程上建议主机在收到S7F6后立即计算校验值(如CRC或哈希),作为后续版本比对的基准。
S7F17/F18:删除配方
S7F17由主机发起,携带一个或多个PPID,请求设备删除对应配方。设备用S7F18应答,ACKC7语义与S7F4类似:0成功、1不存在、2被占用、3权限不足。删除操作不可逆,因此实际产线中通常要求先确认该配方未被任何PP-SELECT引用。若设备返回“被占用”,主机应先执行配方切换,再重发S7F17。
S7F19/F20:获取配方目录
S7F19是主机请求设备返回当前所有可用配方的PPID列表,设备用S7F20返回一个PPID数组。这一对消息是版本管理的基础:主机通过S7F20拿到设备侧配方清单,再与本地数据库比对,就能发现“设备上有而主机没有”“主机有而设备没有”“两边都有但版本不同”三类差异。S7F20通常不返回PPBODY,只返回标识,因此数据量小、响应快,适合在每次配方同步前先执行一次。
S7F23/F24与S7F25/F26:比对与校验
S7F23是主机向设备发起配方比对请求,携带PPID和主机侧计算的校验值(如MD5或CRC)。设备用S7F24返回比对结果:一致或不一致,并可附带设备侧校验值。S7F25/F26则用于更细粒度的配方参数校验,例如逐项比对关键工艺参数。这两对消息在版本管理中承担“确认”角色——S7F3下发后,主机不应仅凭S7F4就认为版本一致,而应再发S7F23做一次内容级确认。若S7F24返回不一致,说明传输或存储环节出了问题,需要重新下发。
典型组合场景
把上述消息串起来,一个完整的“主机下发新版本配方”流程是:S7F19获取设备现有目录 → S7F1请求上传 → S7F2授权 → S7F3下发PPBODY → S7F4确认接收 → S7F23比对校验 → S7F24确认一致。若中途S7F2拒绝或S7F4返回错误码,主机应记录失败原因并终止,而不是继续后续步骤。反过来,“主机从设备备份配方”则是:S7F19列目录 → S7F5逐个读取 → S7F6返回PPBODY → 主机本地存档并计算校验值。
需要强调的是,这些消息只定义了“传输什么、怎么应答”,并不规定PPBODY内部格式。实际项目中,PPBODY常被设计为带版本号、参数名、参数值、单位、上下限的文本结构。主机侧在S7F3下发前应完成格式校验,设备侧在S7F4应答前应完成语法与范围检查,二者配合才能让版本管理真正可靠。