• 21
    2626-10-09 41:09
    21
    程序架构深挖篇 · 两种送标方案 × EM状态机序列 × 凸轮同步触发 开篇 西门子官方应用示例《SIMATIC S7-1500在双面贴标机的应用》(V1.0),整体硬件架构和技术亮点此前已经拆解过:S7-1515T-2 PN加7台S200伺服,Automation Framework框架,ISA-88分层。 这次换个视角,不聊配置,直接钻进PLC程序块里:官方工程师是怎么把一台双面贴标机写成一套标准序列的? 重点回答三个问题:送标轴为什么推荐交给S200驱动器自己跑?五个设备模块(EM)的状态机序列各自怎么编排?理标环节的凸轮同步在程序里怎么触发? 搞包装设备、做非标程序的朋友,这篇建议收藏。 一、工艺打底:传送、贴标、理标三段式 这台双侧面贴标机参照常见侧面贴标机的工艺与结构,整个设备拆成三大工艺流程: • 传送工艺:负责容器传送、容器姿态和间隔控制。控制对象包括底部传送带、顶部传送带、顶部传送带升降装置、容器间隔控制和容器导向装置。 • 贴标工艺:负责送标、收底纸。左右两侧各配置一套装置,可根据需求选配。 • 理标工艺:负责贴标位置跟踪和标签整理。左右各一套,包含跟踪设备和启动理标刷,为标准配置。 传送部分的逻辑有几个细节值得注意:底部和顶部传送带速度同步,设备启动后即开始运行直至停止,速度可按生产要求调整;顶部传送带升降装置仅允许在手动模式下调整高度;容器间隔控制和容器导向装置为定速运行,速度同样可调。 图片 工艺流程 主要控制对象 关键控制点 传送 底部/顶部传送带、升降装置、间隔控制、导向装置 底顶传送带速度同步;升降仅限手动模式 贴标(左右各一套,可选配) 送标驱动装置、收底纸装置 两种送标方案可选,精度差异明显 理标(左右各一套,标准配置) 跟踪设备、理标气动刷 凸轮同步区间内刷标,曲线可在线切换 整机还配置了大量精密传感器来保证贴标精度,这些传感器信号正是后续贴标序列里"贴标开始/结束信号"的来源。 欢迎加入屯蒙微信社群 屯蒙社群欢迎加入 1.运动控制微信群 2.行业交流专家微信群 (汽车/包装/半导体/物流/橡塑/钢铁) 图片 图片图片 二、程序骨架:AF框架下的Unit与EM分工 整个程序基于西门子官方的 Automation Framework(AF) 框架开发,遵循 ISA-88 将设备层划分为CM(控制模块)、EM(设备模块)、Unit(设备单元)三大层级。这种分层的直接好处是:换一台设备,结构不用动,增减EM/CM模块即可。 程序里,一个Unit下挂多个EM。每个EM的程序结构高度一致,职责划分非常清晰: 程序块 职责 EmX_Main EM主循环 EmX_Startup EM启动OB EmX_CollectAlarms EM故障检测,集中收集报警信息 EmX_CallEquipment EM执行前读取数字量/模拟量输入,所有EM执行完成后统一刷新数字量/模拟量输出 EmX_StepToString EM步序名称设置(用于HMI显示当前步序) EmX_Sequence EM层设备逻辑主体,按作业(Job)编排步骤(Step) EmX_SequenceMotionCycle EM动作启动序列,负责运动位置计算与同步触发 带*号的块(Main、Startup、CollectAlarms、CallEquipment、StepToString)属于AF框架的标准件,设备厂商真正要写的,核心是 Sequence 和 SequenceMotionCycle 这两类块。 除此之外,CM层的调用全部使用LBC(基础控制库),属于标准化编程的基础内容。工艺对象里完成位置轴、同步轴及凸轮曲线的组态;PLC变量定义IO点;PLC数据类型(UDT)统一管理接口数据。 一个值得借鉴的工程习惯:物理IO的读写不放在业务序列里,而是集中到CallEquipment块,在所有EM执行前批量读入、执行后批量刷新。序列逻辑只和"镜像"后的变量打交道,时序行为非常确定。 三、贴标工艺核心:两种送标方案,精度要求决定选型 贴标工艺负责送标和收底纸。官方针对送标动作提供了两套可选方案,文档明确给出了选型建议: 对比项 优选方案:S200 EPOS程序段+传感器校正 备选方案:PLC两段相对定位 执行载体 S200驱动器内部EPOS功能 PLC程序控制 工作方式 借助S200强大功能和极短循环周期,快速识别外部传感器触发信号并切换运动任务 送标轴执行第一段、第二段两段相对定位,由PLC程序接力控制 贴标误差 减小因PLC程序执行周期带来的贴标误差 受程序扫描周期影响,误差相对更大 适用场景 高速、高精度贴标,建议优先选用 低端设备、生产节拍较慢、贴标精度要求不高的场合 这个取舍背后的工程逻辑很直白:贴标是典型的"传感器触发→立即响应"动作,响应链路越短越好。把程序段(EPOS)下放到驱动器里,传感器信号在驱动器侧直接触发运动任务切换,绕开了"信号进PLC→程序扫描→再发指令给驱动器"这一整个扫描周期的延迟。节拍慢、精度要求不高的设备,用PLC两段相对定位也能干,成本和复杂度更低。 四、五个EM状态机:序列到底怎么编排 整台设备划分为一个Unit和多个EM,其中贴标机本体相关的五个EM序列块,每个块都围绕四个标准作业(Job)展开:Starting(启动)、Execute(执行)、Stopping(停止)、Stopped(已停止/急停)。左右两侧设备逻辑对称。 EM块 对应设备 步骤/作业 关键序列逻辑 Em1_Sequence 传送系统 4步/4作业 Starting:底顶传送带回零;Execute:底顶传送带、容器导向、间隔控制驱动全部运行;Stopping/Stopped:统一停止 Em2_Sequence 左侧贴标 5步/4作业 Starting:送标轴回零;Execute Step1等贴标开始信号→送标+收底纸运行;Step2等贴标结束信号→停止(备选方案则拆成两段相对定位);Stopping等结束信号后停止;Stopped立即停止 Em3_Sequence 右侧贴标 5步/4作业 与Em2完全对称 Em4_Sequence 左侧理标 4步/4作业 Starting:理标跟踪设备回零;Execute Step1等理标开始信号→理标设备运行;Stopping/Stopped:凸轮同步指令撤销、气动刷复位 Em5_Sequence 右侧理标 4步/4作业 与Em4完全对称 注意贴标EM为什么是"五个步骤"而传送只有四个:贴标的Execute作业拆成了两步——Step1等待贴标开始信号,Step2等待贴标结束信号,起停动作分别挂在这两个信号沿上。备选方案下,这两步里还各塞了一段相对定位动作(第一段送标、第二段送标并等结束信号)。 而理标EM的停止序列有个特殊动作:停止时不是简单停轴,而是撤销凸轮同步指令并复位气动刷,保证刷子回到安全位。 五、两个SequenceMotionCycle:位置计算与凸轮同步触发 如果说Sequence块管的是"流程走到哪一步",SequenceMotionCycle块管的就是"这一步运动怎么算、何时触发"。贴标机示例里有两个这样的块,对应贴标和理标: Em2_SequenceMotionCycle(贴标动作启动序列) • 输入:start(开始工作信号)、modifyPosition(修正位置值)、unitStatus(当前单元状态)、axisMasterActualPosition(主轴实际位置)、axisMasterJogForward(主轴运动方向) • 输出:workPosition(工作位置) • 逻辑:start变为TRUE时,块计算并输出workPosition;当单元状态变为starting时,workPosition置为-0.1(一个无效/等待位置值) Em4_SequenceMotionCycle(理标动作启动序列) • 输入:在贴标块基础上,增加axisSlave1、axisSlave2两组从轴信号——enable(从轴使能设置)、startSync(从轴与主轴开始同步状态) • 输出:workPosition(工作位置)+ execute(执行指令) • 逻辑:start变为TRUE时计算workPosition,并将execute置TRUE;当两个从轴都进入同步状态后,execute复位为FALSE;单元starting时workPosition同样置-0.1 理标工艺用的是运动控制里的凸轮同步功能:在同步区间内操作理标气动刷,把已经贴在容器上的标纸整理服帖。块里预留的从轴同步状态信号,就是让程序能精确判断"跟踪轴是否已经跟主轴(传送)挂上同步",挂上之后才允许出刷。 还有一个对调试非常友好的设计:示例预留了凸轮曲线切换接口,调试期间想调整凸轮曲线,无需重新下载程序,通过接口即可切换。设备调试期凸轮曲线往往要反复修,这个设计能省下大量下载停机时间。 六、HMI画面:AF模板加LBC库,状态与配方一目了然 HMI项目基于Automation Framework模板组态,涉及CM的画面全部调用LBC库中的标准画面,贴标机特有功能则单独组态。主要画面包括: • 起始界面:设备示意图、设备(单元)状态以及各EM的当前步序——步序名称正是由前面提到的EmX_StepToString块提供 • 运行状态监视(State Model):设备基于OMAC状态机开发,该界面可直接查看OMAC状态 • 配方参数:运行前设置传送带速度、回零模式、送标长度等参数 • 弹出窗口:模式切换弹窗和设备操作弹窗,均需登录相应权限才能操作(项目默认用户名Smith,密码Siemens!123,正式使用务必修改) 写在最后 这份示例真正值得抄走的,不是某一段代码,而是它的分层思路: • Sequence块只管流程:按Job/Step编排状态机,不掺杂IO读写和位置计算; • MotionCycle块只管运动:位置计算、同步触发、从轴状态判断全部收口在这里; • 框架块只管杂务:IO刷新、报警收集、步序命名交给AF标准件; • 调试接口前置:凸轮曲线在线切换这类"调试期高频需求",在架构里专门留了口子。 做包装设备的朋友对照自己的程序看看:状态机序列和运动算法是不是耦在一起了?凸轮曲线改一次要不要停机下载?这份官方示例给出了一套可直接参照的标准答案
    作者: