简介Sicar-Training-show-V16程序面向工业自动化工程师、西门子PLC编程学习者及产线调试人员围绕Sicar标准程序框架提供一套可参考的培训示例工程用于理解标准程序的分层结构、设备组态、报警与画面资源组织方式适合具备一定TIA Portal与Profinet基础的中级读者对照学习。压缩包共106个文件约38.19MB包含ap14项目归档及xml、ini等配置与描述文件bmp、png、ico等设备图标和界面素材以及cfs、dat、idx等运行与索引数据另有xsl、hsf、plf等辅助文件基本覆盖标准程序从项目工程到可视化资源的常见组成。该资源已有654人学习下载可作为Sicar标准程序入门与框架梳理的参考样本。读者可从中了解培训示例工程的目录组织、设备图片与GSDML描述文件的配套关系以及标准程序在项目归档中的资源分布便于后续按模块查阅、对照自身项目进行结构分析和二次整理。1. 把 V16 当骨架看Sicar 标准程序培训演示包先解决哪三个落地问题第一次拿到 Sicar 标准程序培训演示包 V16我没有急着打开画面而是先看它把设备控制拆成了什么形状。很多同行找 sicar标准程序表面是找一份能演示的工程实际要的是三件事设备层和工艺层怎么解耦、报警和配方怎么不写成一锅粥、换一个工位时哪些接口能原样复用。这套 V16 培训演示程序的价值不在“能跑”而在它把标准程序的骨架摆出来了统一的单元接口、配方参数校验位置、报警与诊断的落点。适合正在从单机程序往标准模板迁移的工程师也适合刚接手一套历史工程、想把黑匣子拆开看的人。它不承诺直接上产线但能当对照表用。2. 先看骨架V16 标准程序的四层划分与统一接口2.1 设备层、单元层、工艺层、管理层怎么切我一般先把工程里的程序块按调用关系摊开不看画面只看谁调用谁。标准程序最容易翻车的地方是把设备动作、工艺判断和报警文本全塞进一个功能块里前期跑得挺顺后期加一个工位就要复制三遍。V16 培训演示程序的结构更适合按四层去读设备层只处理 IO 映射、驱动状态和硬件诊断单元层处理工步、互锁和单步/自动切换工艺层处理配方、参数窗口和节拍管理层处理报警归档、权限和追溯。这样切的好处是设备层换模块时不用动工艺判断工艺层调参数时不用碰 IO 地址。读工程时我会先画一张调用关系草表不追求好看只标三件事每个功能块的输入来自哪里、输出被谁消费、异常码在哪个层被翻译成文本。常见误用是把配方计算写在设备层结果换一台设备就要改一遍配方逻辑另一种是把报警复位放在 HMI 脚本里PLC 侧没有首出记录出了问题只能靠猜。V16 的演示程序把复位和首出放在单元层HMI 只下发命令这个边界值得抄。设备层不写工艺条件单元层不直接写 IO 地址工艺层不直接驱动输出管理层不参与实时互锁这四条守住后面加功能才不容易乱。我还会看程序块的命名和分组。标准程序不是名字越整齐越好而是从名字能看出层级和职责比如设备层块带Drv或Io单元层块带Unit工艺层块带Rcp或Par管理层块带Alm或Trace。如果打开工程发现所有块都叫FB1、FC2那这套演示程序只能当参考不能直接当模板。V16 的培训演示包在这一点上比较克制至少能让人顺着块名找到调用入口。读的时候不要一上来改代码先把调用链和接口表抄下来后面调试会省很多后悔药。2.2 统一接口表把“能跑”变成“可复用”标准程序能不能复用关键不在代码写得多巧而在接口是不是闭合。我习惯给每个单元功能块定一张最小接口表输入侧有使能、复位、模式、启动、参数结构输出侧有就绪、忙、完成、错误码、诊断文本。输入只读输出只写内部步序号不暴露给调用方。这样 HMI 只认命令和状态工艺层只认参数结构设备层只认 IO 和驱动状态谁也别越界。V16 的演示程序里单元块基本按这个思路留了口子读的时候可以拿这张表去对照缺哪一项就记下来。接口表不是越全越好。我见过一种写法把一个单元的所有中间变量都做成输入输出结果调用方要填二十多个引脚换一个工位就漏填。更稳的做法是只暴露调用方真正需要改的东西模式、启动、复位、配方号、少量工艺参数诊断信息用错误码加文本输出不把内部步序号抛出去。这样调用方不需要知道内部怎么走步内部改步序也不会影响上层。常见做法是给每个单元块配一个参数结构体结构体里只放工艺层关心的字段设备层字段留在设备块内部。这样接口表能稳住复用才有基础。下面这段 ST 代码是我在读这类标准程序时常用的最小接口骨架不是 V16 的原样代码但结构能对上。它把输入输出和内部步序分开调用方只看Ready、Busy、Done、ErrCode和Diag。参数结构体ST_UnitPar只放工艺层需要调的字段设备层地址不在这里出现。FUNCTION_BLOCK FB_UnitBase VAR_INPUT Enable : BOOL; // 单元使能FALSE 时输出回安全位 Reset : BOOL; // 故障复位上升沿有效 Mode : INT; // 0手动 1单步 2自动 Start : BOOL; // 启动命令单步模式下走一个工步 Par : ST_UnitPar; // 工艺参数不含 IO 地址 END_VAR VAR_OUTPUT Ready : BOOL; // 无故障且使能到位 Busy : BOOL; // 工步执行中 Done : BOOL; // 当前周期完成 ErrCode: WORD; // 错误码0 表示无错误 Diag : STRING[80]; // 诊断文本只给 HMI 看 END_VAR VAR step : INT : 0; // 内部步序不暴露给调用方 tStep : TON; // 步超时定时器 END_VAR这段代码的逻辑说明不复杂Enable为假时块内部应该把输出和步序拉回安全状态而不是继续走步Reset只在上升沿清错误码和首出不能把正在执行的工步直接清掉Mode决定Start的语义手动模式只允许点动单步模式走一个工步自动模式才连续执行Par从工艺层下发单元层只做范围检查和互锁不在这里改配方来源。ErrCode用WORD是为了留出设备层、单元层、工艺层的分段比如16#1000段给 IO16#2000段给互锁16#3000段给配方。Diag只做显示不参与逻辑判断避免有人拿文本比较当条件。参数说明要落到调用方怎么用调用方在每个周期调用一次块先给Enable和Mode再给Start一个上升沿Reset用按钮上升沿不要用常闭点Par在配方切换时整体赋值不要逐字段散写。如果ErrCode非零先看Diag定位层再去对应层查首出。这个骨架不追求功能完整但能把“能跑”变成“可复用”的起点。2.3 用一段 ST 代码验证接口是否闭合读完接口表我会做一次接口闭合检查每个输出有没有被消费每个输入有没有被赋值错误码有没有被翻译复位有没有清首出。这个检查不需要仿真器静态看调用关系就能发现一半问题。V16 培训演示程序里有些块是演示用的输出可能只接到画面不接后续逻辑读的时候要区分“演示接线”和“标准接口”。如果是准备拿来改自己工程演示接线不能直接当正式接线用。下面这段检查代码不是运行逻辑而是我常用来验证接口字段有没有漏的静态清单式写法。它把单元块的输出逐个映射到监控结构编译期能发现字段名对不上运行期能看出哪个输出一直没动。// 接口闭合检查每个输出都要有消费点 gMon.Unit01.Ready : fbUnit01.Ready; gMon.Unit01.Busy : fbUnit01.Busy; gMon.Unit01.Done : fbUnit01.Done; gMon.Unit01.ErrCode : fbUnit01.ErrCode; gMon.Unit01.Diag : fbUnit01.Diag; // 错误码分段翻译不要在 HMI 里写一长串 IF CASE fbUnit01.ErrCode OF 0: gMon.Unit01.ErrText : OK; 16#1001: gMon.Unit01.ErrText : IO 映射不一致; 16#2001: gMon.Unit01.ErrText : 互锁条件未满足; 16#3001: gMon.Unit01.ErrText : 配方超窗口; ELSE gMon.Unit01.ErrText : 未定义错误; END_CASE;逻辑说明前半段把单元块输出抄到监控结构不是为了多写几行而是让编译器和后续逻辑都盯着这些点如果某个输出没人消费监控结构里就会空着读工程时一眼能看出来。后半段用CASE把错误码翻译成文本HMI 只显示ErrText不参与判断。参数说明gMon是监控结构按单元编号分组错误码分段要和接口表一致16#1000段留给设备层16#2000段留给单元互锁16#3000段留给工艺参数。这样排查时先看错误码段再看具体码不用在几百行文本里翻。接口闭合检查还有一个动作把每个输入列出来看有没有默认值。Enable默认 FALSEReset默认 FALSEMode默认手动Start默认 FALSEPar用配方默认值初始化。没有默认值的输入在首次扫描时可能是随机态标准程序最怕这个。V16 的演示程序在初始化块里做了默认赋值读的时候可以对照自己的工程看看有没有漏掉的保持型变量。这一步做完再去碰硬件组态心里才有底。3. 把程序跑起来从工程恢复到首轮空载调试的检查顺序3.1 工程导入与硬件组态核对工程恢复不是点一下打开就完事。我一般先备份原始包再确认工程软件版本和演示程序要求的版本是否对得上库文件有没有缺失硬件组态里的模块顺序和实际设备是否一致。V16 培训演示程序是演示工程硬件组态可能是虚拟配置直接下载到实机会报错所以第一步不是下载而是把组态改成自己的设备配置。常见做法是新建一个副本工程保留原始包不动在副本里改组态、改 IO 映射、改单元数量。这样后面翻车了还能回到原始包对照。硬件组态核对我按一张表走表里只列会直接影响首轮调试的项。模块顺序错了IO 地址会整体偏移分布式从站看门狗时间太短上电会掉站模拟量模块的量程卡和程序里的缩放系数不匹配HMI 数值会跳急停链路如果没有在程序里做首出复位后可能直接重启输出。下面这张表是我读这类标准程序时常用的核对项不是 V16 的官方清单但能覆盖大部分首轮问题。检查项看什么失败表现工程软件版本打开时是否提示库缺失或块升级编译报错、块被替换模块顺序槽位和实际设备是否一致IO 地址整体偏移分布式从站看门狗时间、站点数量上电掉站、诊断闪断模拟量量程量程卡、缩放上下限HMI 数值跳变或超量程急停链路急停输入是否进首出复位后输出直接吸合输出禁止首轮调试是否有输出禁止位空载测试变成带载动作核对完组态再编译一次。编译不要只看“0 错误”还要看警告。标准程序里常见的警告是变量未使用、类型隐式转换、块接口变更。未使用变量可能是演示接线没接完隐式转换可能是INT和REAL混用块接口变更可能是库版本不对。这些警告在首轮调试时不一定报错但会在某个配方切换或模拟量缩放时冒出来。我一般把警告也当问题记能清就清清不了就写明原因。3.2 符号映射与地址漂移检查符号映射是标准程序从演示走向复用的关键一步。演示工程里常用绝对地址因为看着直观正式工程里更稳的是符号寻址加结构体映射把 IO 地址收口到一个映射块里其他块只认符号。这样换模块时只改映射块不用全工程搜地址。V16 的演示程序里能看到这种收口思路但演示工程为了短可能只映射了一部分。读的时候要检查每个设备块的输入输出是不是都从映射结构取有没有人绕过映射直接写%I0.0这种绝对地址。地址漂移的典型现象是改了组态之后某个传感器信号跑到另一个工位程序不报错动作却错位。原因通常是绝对地址散落在多个块里改组态时只改了一处。解决方法是把 IO 映射做成一个独立功能块上电时检查映射地址和期望地址是否一致不一致就置错误码不进入自动。下面这段 ST 代码是我常用的映射检查骨架参数说明放在代码后面。FUNCTION_BLOCK FB_IoMapCheck VAR_INPUT Enable : BOOL; // 使能检查首轮调试时常开 END_VAR VAR_OUTPUT MapOk : BOOL; // 映射一致为 TRUE FirstErr : WORD; // 第一个不一致的序号0 表示无错误 END_VAR VAR i : INT; END_VAR MapOk : FALSE; FirstErr : 0; IF NOT Enable THEN RETURN; END_IF; FOR i : 1 TO 32 DO // gIoMap 是映射表PlcAddr 是实际地址ExpectedAddr 是期望地址 IF gIoMap[i].PlcAddr gIoMap[i].ExpectedAddr THEN FirstErr : INT_TO_WORD(16#1000 i); RETURN; END_IF; END_FOR; MapOk : TRUE;逻辑说明上电初始化时调用一次Enable常开循环检查映射表里的实际地址和期望地址发现第一个不一致就记录序号并返回不继续检查避免错误码被覆盖。MapOk为假时单元层不应该进入自动模式HMI 显示FirstErr对应的映射点。参数说明gIoMap是全局映射结构PlcAddr在组态变更后更新ExpectedAddr是程序侧期望值16#1000是错误码段加序号后能直接定位到第几个映射点。这个检查不能替代硬件诊断但能挡住大部分地址漂移。符号映射还要注意数据类型。模拟量输入常见是INT程序里做缩放时先转REAL再乘系数不要直接INT * REAL后截断。HMI 上显示小数点错位很多时候不是画面问题是缩放系数和量程卡不匹配。映射块里把原始值、缩放值、量程上下限都留出来调试时能一眼看出是原始值不对还是缩放不对。V16 演示程序里如果有模拟量演示可以顺着这条链对一遍。3.3 首轮空载测试的四个闸门首轮空载测试不是“按一下启动看动不动”而是按闸门走。我一般设四个闸门输出禁止、急停链路、强制表清零、单步走步。输出禁止是第一步把所有执行输出锁在安全位只让程序跑逻辑和报警急停链路是第二步按急停看程序是否记录首出、复位后是否要求重新启动强制表清零是第三步仿真时留下的强制值不清实机会出现“程序里没写但输出动了”的鬼故事单步走步是第四步手动模式点动每个输出单步模式走每个工步自动模式最后再开。输出禁止的做法不是拔保险而是在程序里加一个调试禁止位所有单元块的输出先经过禁止位再落到映射。这样空载测试时逻辑照跑输出不动能看清步序和报警。急停链路要检查首出急停按下时哪个单元先报错错误码是不是急停段复位后Ready是不是要等启动命令才恢复。强制表清零要在下载后、上电前做仿真器里的强制值有时不会跟着工程走实机下载后第一件事就是清强制、清保持型变量。单步走步时我会盯三个东西步序是否按预期递增超时定时器是否在每一步重新计时错误码是否在步序回安全位后才清除。V16 演示程序的单元块如果带step和tStep可以顺着看每一步的进入条件和退出条件。常见翻车是步超时定时器没有在步切换时复位导致第二步刚进来就报超时另一种是错误复位把步序清到 0 但输出没回安全位下一步直接带着旧输出启动。空载测试就是把这些问题在带载前逼出来。提示首轮空载测试前把原始工程再备份一份下载后先清强制表和保持型变量再按输出禁止、急停、单步、自动的顺序走。4. 参数怎么设配方、报警限值与节拍参数的落点4.1 配方参数的三层校验配方参数不是填进去就完事。我一般分三层校验第一层量程第二层互锁第三层工艺窗口。量程校验是最基础的温度设定不能超过设备允许范围压力设定不能为负时间设定不能是 0互锁校验看参数之间是否打架比如阀门模式是手动关闭时压力设定还给非零值或者加热和冷却同时使能工艺窗口校验看这批产品允不允许这个组合比如保温时间低于下限、升温速率超过材料允许值。三层校验放在工艺层不放在 HMI 脚本里HMI 只负责提示不负责放行。V16 培训演示程序里如果有配方演示可以看它把校验放在哪个块。常见误用是只在 HMI 输入框做上下限PLC 侧不校验结果配方从外部导入或从旧工程迁移时绕过画面非法值直接进逻辑。更稳的做法是 PLC 侧有一个FB_RecipeCheck任何来源的配方切换都走这个块校验不通过就拒绝装载并给出错误码。下面这段 ST 代码是三层校验的最小写法参数说明在后面。FUNCTION FB_RecipeCheck : BOOL VAR_INPUT Recipe : ST_Recipe; // 待校验配方 END_VAR VAR ok : BOOL : TRUE; END_VAR // 第一层量程校验 IF Recipe.TempSet 20.0 OR Recipe.TempSet 180.0 THEN ok : FALSE; END_IF; IF Recipe.HoldTime 5 OR Recipe.HoldTime 120 THEN ok : FALSE; END_IF; // 第二层互锁校验 IF Recipe.PressureSet 0.0 AND Recipe.ValveMode 0 THEN ok : FALSE; END_IF; IF Recipe.HeatEnable AND Recipe.CoolEnable THEN ok : FALSE; END_IF; // 第三层工艺窗口校验 IF Recipe.TempSet 120.0 AND Recipe.HoldTime 10 THEN ok : FALSE; END_IF; FB_RecipeCheck : ok;逻辑说明三层校验按顺序执行任何一层不通过都返回 FALSE调用方不装载配方保持旧配方或回默认配方。量程校验用常量边界互锁校验看字段组合工艺窗口校验看跨字段关系。参数说明TempSet是温度设定HoldTime是保温时间PressureSet是压力设定ValveMode是阀门模式HeatEnable和CoolEnable是加热冷却使能。边界值不要散写在多个块里最好放一个参数常量表改工艺窗口时只改一处。校验失败时给出具体错误码不要只给一个“配方无效”否则现场只能猜是哪一层没过。配方切换还要注意保持型变量。新配方装载后旧配方的中间计算结果如果没复位会出现“配方号变了但动作还是旧参数”的残留。我一般在新配方装载后强制走一次单元复位把中间变量、积分项、超时定时器清掉再允许启动。这个动作在演示程序里可能被简化了读的时候要留意。校验通过不等于切换完成切换完成要等单元块回到Ready且ErrCode为 0。4.2 报警限值HH/H/L/LL 之外还要加什么报警限值最容易写成四个数HH、H、L、LL。实际现场只写四个数不够还要加延时、回差和首出。延时是防止数值在限值附近抖动导致报警反复触发回差是报警恢复后要回到更安全的区间才允许复位首出是多个报警同时出现时记录谁先来。V16 演示程序里的报警块如果只有比较器没有延时和回差读的时候可以把它当简化版自己工程里要补上。常见翻车是报警复位后马上再次触发现场以为是复位按钮坏了其实是数值还在限值内复位条件没消失。我一般把报警参数做成一张表每个报警点有四个限值、一个延时、一个回差、一个屏蔽位。延时用TON不要用循环计数循环计数会随扫描周期变化回差用恢复阈值比如高报警在 80 触发恢复到 75 才允许复位屏蔽位只屏蔽显示和归档不屏蔽联锁联锁该动还要动。首出用报警字的第一位置位复位时只清已恢复的报警未恢复的保持。下面这张表是参数落点不是 V16 的原始参数表但结构可以照着建。参数含义常见取值方式HH/H/L/LL报警限值按工艺窗口和传感器量程取Delay触发延时3 到 10 个扫描周期按信号噪声调Deadband恢复回差量程的 1% 到 3%FirstOut首出字每个报警点占一位Mask屏蔽位只屏蔽显示归档不屏蔽联锁报警文本不要写太长HMI 上显示不下现场也不看。我一般用“单元 参数 方向 限值”的短文本比如“单元01 温度 HH”详细原因放诊断码。报警归档要带时间戳和首出复位后还能查。V16 演示程序里如果有报警演示可以看它有没有把报警和错误码分开报警是工艺越限错误码是逻辑故障两者不要混在一个字里否则排查时分不清是工艺问题还是程序问题。4.3 节拍参数别拿扫描周期硬凑节拍参数和扫描周期是两件事。扫描周期是 PLC 跑一圈的时间节拍是工艺动作之间的时间间隔。常见误用是用循环计数当定时比如“循环 100 次算 1 秒”换了 PLC 或加了程序块扫描周期变了节拍就漂了。标准程序里应该用定时器或时间戳节拍参数以毫秒为单位下发单元层用TON或R_TRIG加时间差实现。V16 演示程序如果为了短用了循环计数读的时候要标出来自己工程里换掉。节拍参数还要和超时参数分开。节拍是正常动作间隔超时是动作没完成的容忍时间。比如一个气缸动作节拍 500ms超时设 2s不能把超时也设 500ms否则正常波动就报错。我一般给每个工步配一个节拍参数和一个超时参数节拍参数放工艺层超时参数放单元层调试时先放宽超时等节拍稳定再收紧。下面这段 ST 代码是节拍定时器的常见写法参数说明在后面。// 节拍定时用 TON 而不是循环计数 tStep(IN : (step 0) AND (step lastStep), PT : gUnitPar.StepTime[step]); IF tStep.Q THEN // 节拍到允许进入下一步 StepDone : TRUE; END_IF; // 步切换时复位定时器 IF step lastStep THEN lastStep : step; StepDone : FALSE; END_IF;逻辑说明tStep在当前步有效且步号变化时开始计时计时到StepTime[step]后置StepDone步号变化时清完成位让下一步重新计时。参数说明StepTime是工艺层下发的节拍数组按步号索引step是内部步序lastStep用来检测步切换。这里没有用循环计数所以扫描周期变化时只要定时器分辨率够节拍不会明显漂。节拍数组的默认值要在初始化块里给不能留 0否则第一步就立即完成。节拍参数调的时候先看空载再看带载。空载时动作快节拍可以短带载后机械惯性、气压建立时间都会拉长节拍要放宽。不要为了追产能把节拍压到设备极限超时和报警会教做人。V16 演示程序里的节拍参数如果只是演示值不要直接抄到产线按自己设备的动作时间重新测。测的时候用趋势图看输入输出时间差比拍脑袋靠谱。5. 避坑与排查这套标准程序最容易翻车的五个位置5.1 下载后首扫描就报错现象工程编译通过下载后 PLC 一上电就报错单元块ErrCode非零复位也清不掉。原因通常不是程序逻辑而是初始化顺序。标准程序里很多块依赖全局结构体和映射表如果初始化块在单元块之后执行首扫描时全局结构还是默认值映射检查、配方校验、报警限值都会报错。另一种原因是保持型变量从旧工程带过来新工程的默认值没覆盖首扫描读到旧值。解决先看初始化块在任务里的执行顺序确保全局结构、映射表、默认配方在单元块之前初始化。保持型变量在下载时选择复位或者在上电初始化里显式赋默认值。映射检查块首扫描可以延时一个周期再使能等硬件组态稳定。复位清不掉时看错误码段16#1000段查映射16#2000段查互锁16#3000段查配方不要一上来改逻辑。V16 演示程序如果带初始化块可以对照它的执行顺序。5.2 HMI 数值跳变或小数点错位现象HMI 上温度、压力数值乱跳或者小数点错一位PLC 内部趋势看是正常值。原因多半是数据类型和缩放系数不匹配。模拟量输入是INT程序里做INT_TO_REAL后乘系数如果系数写错一位HMI 就错位如果 HMI 侧又做了一次缩放等于缩放两遍。另一种原因是 HMI 读写的是绝对地址程序里改用了符号映射地址漂移后画面读到别的变量。解决先看映射块里的原始值和缩放值确认量程上下限和模块量程卡一致再看 HMI 变量连接的是符号还是绝对地址标准程序里统一用符号最后看 HMI 侧有没有二次缩放有就删掉。数值跳变还要看滤波模拟量输入加一阶滤波或移动平均滤波时间不要大于工艺响应时间。V16 演示程序里的画面如果只是演示变量连接可能不完整读的时候以 PLC 侧映射为准。5.3 配方切换后旧值残留现象配方号已经切到新配方HMI 显示新参数但设备动作还是旧参数或者第一步用新值、第二步又回旧值。原因是保持型中间变量没复位配方装载只写了参数结构没清单元块内部的积分项、步序、超时定时器和上次配方缓存。标准程序里如果配方切换和单元复位是两条路径很容易只走了一条。解决配方切换做成一个完整事务校验新配方、装载参数结构、复位单元块、等Ready、再允许启动。单元复位要清内部步序和保持型变量不要只清错误码。下面这段 ST 代码是常见写法的对比错误写法只写新值正确写法先装载再复位。// 错误写法只写新配方不清内部状态 IF RecipeChange THEN gRcp : NewRecipe; END_IF; // 正确写法装载后强制走一次单元复位 IF RecipeChange AND FB_RecipeCheck(NewRecipe) THEN gRcp : NewRecipe; gUnit.Par : gRcp.Par; gUnit.Reset : TRUE; gUnit.Reset : FALSE; END_IF;逻辑说明先校验再装载装载后给Reset一个上升沿让单元块把步序和保持型变量清回初始态Reset只给一个周期不能常开否则单元块一直复位无法启动。参数说明NewRecipe是待切换配方gRcp是当前配方缓存gUnit.Par是单元块参数输入。切换完成后要等gUnit.Ready为真再给启动命令不要在同一周期给启动。5.4 报警复位后马上再次触发现象按复位按钮报警消失松手又报反复几次后现场不敢复位。原因是复位条件没消失数值还在限值内或者报警块没有回差复位后立刻重新比较触发。另一种原因是复位只清了显示位没清首出和锁存下一次扫描又根据旧首出置位。解决复位逻辑加“恢复条件确认”只有数值回到回差区间内才允许复位报警块加触发延时和恢复延时不要用瞬时比较复位时清显示位、首出位和锁存位但保留未恢复报警。联锁报警不要用复位按钮反复清先处理工艺条件。V16 演示程序里的报警块如果简化了回差自己工程里补上。5.5 仿真正常、实机动作错位现象仿真器里步序、报警、配方都正常下载到实机后某个气缸或电机动作错位程序不报错。原因通常是 IO 映射和实机不一致或者仿真时留下的强制表没清。标准程序里如果演示接线只接了一部分输出实机下载后未接的输出可能保持上次状态另一种原因是输出禁止位在仿真时被强制为 TRUE实机没清程序逻辑跑了但输出没动。解决下载后先清强制表和保持型变量再核对 IO 映射逐个点动输出。仿真和实机的差异列一张表哪些输入是强制模拟的哪些输出没接哪些从站仿真时不存在。首轮实机调试一定从输出禁止开始确认逻辑跑通再放开输出。V16 培训演示程序的输出如果只是演示实机接线要按自己设备重做映射不要直接套演示地址。6. 进阶验证用回放与注入把标准程序压到边界标准程序跑通之后我会做一轮回放和注入把参数压到边界看报警、配方校验和单元复位是不是真的按接口表工作。回放不是拿真实产线数据直接灌而是先用脚本造测试序列覆盖最小值、最大值、非法值和跳变值再通过仿真器或离线回放工具按时间戳注入。常见做法是用 Python 生成 CSV字段包括用例号、变量名、注入值、期望结果和备注回放时逐行读记录实际错误码。import csv # 边界用例每个参数取低于下限、下限、上限、高于上限 cases [ (TempSet, 20.0, 180.0, 0.5), (HoldTime, 5, 120, 1), (PressureSet, 0.0, 0.8, 0.01), ] with open(boundary_cases.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([case_id, variable, value, expected_ok, note]) cid 0 for name, low, high, step in cases: for value in (low - step, low, high, high step): cid 1 writer.writerow([cid, name, value, low value high, range])这段脚本只做一件事按参数量程生成四类边界值expected_ok记录期望校验结果。low - step和high step是越界值low和high是边界值。回放时把value注入配方结构调用FB_RecipeCheck对比实际返回和expected_ok。参数说明step不要取太小否则浮点误差会让边界值看起来越界整数参数步长取 1浮点参数按工程量取。回放记录要带时间戳和用例号失败时能直接定位到哪一行。边界矩阵还要覆盖组合条件不只单参数。比如温度上限加保温时间下限、压力非零加阀门手动关闭、加热和冷却同时使能。这些组合在单参数回放里看不出来要单独造用例。验收口径我一般定三条非法值必须拒绝装载且错误码可定位边界值必须按工艺窗口放行或拒绝不能一会儿行一会儿不行回放后单元块必须能回到Ready不能停在半复位状态。血泪经验是标准程序最容易在“看起来没问题”的地方翻车单参数校验都过组合条件漏了仿真回放都过实机强制表没清配方切换都过保持型积分项没复位。从那以后我每次拿到一套标准程序都先跑接口闭合检查和边界回放再碰工艺逻辑不急着改画面。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?