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标准件;
• 调试接口前置:凸轮曲线在线切换这类"调试期高频需求",在架构里专门留了口子。
做包装设备的朋友对照自己的程序看看:状态机序列和运动算法是不是耦在一起了?凸轮曲线改一次要不要停机下载?这份官方示例给出了一套可直接参照的标准答案
作者: