ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

西门子自动化项目架构实践:AF V1.2构建可复用PLC程序体系

西门子自动化项目架构实践:AF V1.2构建可复用PLC程序体系 干西门子自动化这些年我最大的一个感触是程序写得好不好其实从你打开博途、新建第一个项目的时候就已经决定了。很多人拿到控制需求就直接拖梯形图一个电机一个电机地写一个阀一个阀地复制最后项目是跑通了但下一台设备、下一个相似项目来了又得从头来一遍。Automation Framework V1.2以下简称AF架构就是冲着这个痛点来的——它不只是一个程序模板而是一整套从软件栈选型、通讯规划、功能块封装到项目交付的构建蓝图。这套东西适合做S7-1200/1500项目的电气工程师、非标设备开发商和产线集成商。特别是那些经常被“这程序明明是我写的三个月后自己都看不懂”困扰的人这架构能帮你把项目做成一栋能持续加楼层的房子而不是一堆堆到哪算哪的砖。1. AF架构的核心思路先搭软件栈再谈写程序1.1 AF架构到底是个什么东西很多人第一次听到Automation Framework以为西门子又出了个新软件。其实不是。AF更像是一个方法论加一套工程模板的组合体它把TIA博途、Step 7 Professional、WinCC、Startdrive这些离散的工具串成一条完整的流水线让一个自动化项目从硬件选型、通讯配置、控制逻辑到HMI画面都有统一的章法。V1.2这个版本号我个人理解更多是对工程结构、功能块库和文档模板的一次规范化。它不是死板的规则而是一套可以被裁剪的框架。我见过很多工程师把AF理解成“库”以为装完库文件就完事了结果项目里照样是瀑布一样的梯形图。真正的AF不是给你现成的功能块让你拖而是告诉你这些功能块应该怎么长、放在哪一层、由谁来调用。打个比方传统做法是买砖、买水泥到现场边想边砌AF架构是先画好施工图把每一面墙在哪、水电管线走哪、门窗开在哪都定下来再开始砌砖。砖还是那些砖但有了蓝图之后施工效率完全不同。1.2 AF V1.2的软件栈全景AF架构的软件栈可以按层拆开看。每一层选什么工具、配什么版本直接决定了后面开发顺不顺。层级主要组件作用与选型逻辑工程平台TIA博途V17含Step 7 Professional、WinCC全家桶式组态CPU和HMI同项目变量和画面联动方便控制器层S7-1200 / S7-1500中小项目选1200复杂工艺、重数据处理选1500驱动层SINAMICS V90 / G120通过Startdrive集成在博途里直接配置驱动参数、报文、诊断不用单独开软件分布式IO层ET 200系列、IM60等现场布线缩短IO就近采集AF架构里统一做硬件配置通讯层PROFINET、Modbus RTU/TCP、ProfiBus老旧项目按设备分布和实时性要求选不盲目上PROFINET数据交互层OPC UA、S7通讯、HMI连接上位机、MES数据采集AF里要预留接口为什么反复强调软件栈因为自动化项目的痛很多时候不是PLC程序本身而是“工具之间接不上”。比如你用了博途V15.1建的库到客户现场发现人家是博途V17升级要半天碰到第三方设备没有GSD文件PROFINET根本组不上。这种问题在项目规划阶段不想清楚后面全是擦屁股的活。AF V1.2在软件栈这一层给出的答案很明确工程平台统一到TIA博途驱动用Startdrive集成第三方设备提前准备GSD/EDS文件EPLAN部件库和博途变量做到一一对应。这一套东西拉通之后从电气图纸到PLC变量再到HMI画面数据一致性会好非常多。1.3 用分层思路拆解一个标准自动化项目一个标准产线项目我习惯按物理设备层、控制层、HMI层、数据层四层来看。物理设备层是电机、阀、传感器、变频器、伺服控制层是PLC和分布式IOHMI层是触摸屏、工控机、WinCC Runtime数据层是历史数据、配方、报表和上位机接口。AF架构的核心动作就是让每一层只跟相邻层打交道不让数据满天飞。举个实际例子一条包装线有30个电机、12个阀、8台变频器。传统做法是HMI直接操作每个设备的启停、状态程序里散落着几十个M点和DB点。用AF的思路控制层先抽象出“电机FB”“阀FB”“变频器FB”每个FB把命令、反馈、故障整理成标准接口。HMI不直接碰设备而是通过一个“工位FB”去操作。这样想加一台设备就是在工位FB里增加一个设备FB实例然后画面做一个面板实例其他不用动。真实项目里这么做的收益最明显的是调试阶段。原来改一台电机的逻辑要翻遍整个程序找它的启停、反馈、故障、保护现在打开对应的FB背景DB所有东西都在一个表里直观得不行。2. AF架构中的编程范式与核心细节2.1 多重实例DB爆炸的终结者AF架构里最基础也最容易被忽略的一个概念就是多重实例Multi-instance。简单说就是在一个FB里面调用另一个FB时把被调用FB的实例数据嵌在调用方的背景DB里而不是单独生成一个DB。举个场景一条线有30台电机每台电机用一个FB_Motor控制。如果用单实例项目里就有30个背景DB比如DB100、DB101、DB102……不仅看着头疼交叉引用表拉出来一大片而且以后复制粘贴改错地方的风险极高。用多重实例你只需要建一个工位FB然后在工位FB的静态变量区声明电机FBFUNCTION_BLOCK FB_Station VAR Motor1 : FB_Motor; // 多重实例 Motor2 : FB_Motor; Valve1 : FB_Valve; END_VAR这样30台电机的背景数据全部存在于FB_Station的背景DB里DB数量从30个变成1个。好处不仅仅是看起来清爽更重要的是在线监控时能在一个界面里同时看整个工位的所有设备状态逻辑关系一目了然。我见过不少工程师习惯用全局DB加UDT的方式管理设备数据比如建一个DB_AllMotor里面放30个UDT类型变量。这种方式在数据组织上没问题但有一个软肋设备的逻辑封装。UDT解决了数据结构但没法把设备的启停逻辑、保护逻辑、报警逻辑一起带过去。多重实例是“数据逻辑”一起带着走的复用性比纯UDT高一个档次。2.2 UDT让数据结构跟着设备走UDT用户自定义类型在AF架构里是数据地基。它的作用是把设备的数据结构固定下来以后改设备类型只要改UDT不需要满程序找变量。举个例子定义一个阀的UDTTYPE UDT_Valve STRUCT OpenCmd : Bool; // 打开命令 CloseCmd : Bool; // 关闭命令 OpenFb : Bool; // 开到位反馈 CloseFb : Bool; // 关到位反馈 Fault : Bool; // 故障信号 AutoMode : Bool; // 是否允许自动模式 PulseTime : Time; // 输出脉冲时间 END_STRUCT END_TYPEUDT定义出来后FB_Valve的内部静态变量就可以用这个类型。以后阀从两位式变成调节型需要增加模拟量开度你只需要在UDT里加一个Real类型变量并在FB里加对应逻辑调用这个FB的所有实例自动拥有新变量。这就是AF架构里“少改、只加、不覆盖”原则的落地方式。2.3 设备级、单元级、线体级三级FB体系AF架构的程序组织我强烈建议用三级调用结构。第一级是设备级FB像FB_Motor、FB_Valve、FB_VFD、FB_Servo它们封装的都是单台设备的控制和保护逻辑。第二级是单元级FB像FB_Station、FB_Cell它们把若干设备FB组合成一个完整工艺单元处理单元内的联锁、顺序、模式切换。第三级是线体级逻辑这一层主要是生产模式、全线启停、节拍控制、配方切换通常在OB1里直接组织或者用更高层的FB。这三级的调用关系很清晰OB1调用线体级线体级调用单元级单元级调用设备级不允许跨级调用。举例来说触摸屏上按下“线体启动”这个命令进入线体级逻辑线体级判断所有单元状态是否允许然后逐个给单元级下发“允许运行”命令单元级再去触发具体设备的运行。这样就把“全线启动”这种大动作变成“一层一层放行”的安全流程出了故障也容易定位。三级体系最直接的好处是团队协作。A工程师管设备FBB工程师管单元逻辑C工程师管线体调度大家改的地方不重叠SVN/Git合并冲突非常少。小项目不需要全部铺开至少也要把设备级和单元级分开否则程序一长就是一团乱麻。2.4 SCL与LAD的分工很多老工程师对SCL有抵触觉得梯形图直观、好查线。这个我理解但AF架构下我强烈建议多写SCL尤其是算法和通讯部分。LAD适合做纯逻辑比如互锁、启停、急停回路这些用触点线圈最清晰。但处理数组循环、数据解析、通讯报文、浮点运算LAD写起来非常痛苦。SCL在这类场景下几乎就是降维打击。实用建议设备级FB的时序控制和工艺逻辑优先用SCL写安全回路和硬互锁可以在OB里用LAD拉得非常直白HMI操作面板上的“手动/自动/复位”逻辑习惯用什么就用什么。AF不限制语言但要求逻辑层次清楚别在同一个FC里混用七八种风格。3. 实操过程用AF架构从零构建一个变频器通讯项目这一部分我拿一个非常典型的项目来讲1个S7-1200通过Modbus RTU控制3台变频器HMI用MTP1000触摸屏现场要求每台变频器可以启停、设定频率、读取运行电流和故障状态。3.1 需求与配置变频器与PLC的Modbus通讯是热词里反复出现的场景也是很多工程师的第一道坎。这项目如果用AF架构来做需求量化为下表项目参数PLCS7-1200 1214C DC/DC/DC通讯模块CM1241 RS485变频器3台Modbus RTU从站地址1/2/3通讯参数9600波特率、8数据位、无校验或偶校验、1停止位HMIMTP1000以太网连接PLC控制要求每台变频器启停、频率设定、频率/电流读取、故障复位接线是第一步也是最容易出问题的一步。CM1241的RS485端子一般标A和B对应变频器通讯端子的T/T-或者A/B具体看变频器手册。需要提醒的是RS485的A/B接反是通讯不上的经典原因而且很多国产变频器的接线端子标注和西门子不一样千万别照着习惯想当然。终端电阻首尾各一个屏蔽层单端接地。3.2 通讯规划与轮询设计AF架构里不建议直接在OB里零散地调MODBUS_Master指令而是做一个通讯管理器FB统一调度。Modbus RTU通讯有轮询模型主站一帧一帧地发不能同时发多帧。3台变频器如果每一台要读4个字写2个字估算每帧10~20ms一轮下来大概150ms足够现场控制用。但如果你接到的问题是“一个S7-1200能不能连32台变频器”那就要算账了。按32台、每台收发3帧一轮通讯可能就要1秒以上。频率设定和故障读取延迟高不高取决于工艺要求。如果只是调速和监视勉强能用如果有同步性要求基本扛不住。这时候AF架构的答案就很明确要么上PROFINET把变频器换成带PN接口的要么用Modbus TCP走星型网络要么接受轮询周期调整控制策略。所以我经常说AF架构不是不允许你连32台Modbus从站而是它在项目规划阶段就会强迫你想清楚这个轮询周期你能不能接受通讯故障后的默认动作是什么3.3 FB库的实现从“裸指令”到“设备抽象”第一步在博途里建UDT_ModbusChan把每个从站的通讯参数结构化TYPE UDT_ModbusChan STRUCT SlaveAddr : USInt; // 从站地址 Execute : Bool; // 触发 Mode : USInt; // 0读 1写 DataAddr : UDInt; // 寄存器地址 DataLen : UInt; // 数据长度 Done : Bool; Error : Bool; ErrorID : Word; END_STRUCT END_TYPE第二步封装通讯调度FB_FB_ModbusMaster。它的核心逻辑是用数组存储多个通道通过轮询指针依次触发MODBUS_Master指令同一个时刻只允许一个通道在跑。关键的SCL逻辑大致是IF NOT busy THEN // 轮流处理通道 index : index MOD MAX_CHANNEL; IF ch[index].Execute THEN mbReq : TRUE; mbMode : ch[index].Mode; mbAddr : ch[index].DataAddr; mbLen : ch[index].DataLen; mbPtr : ch[index].DataPtr; END_IF; END_IF;做完通讯层再做一个变频器设备FB_FB_VFD。这个FB是AF架构里典型的设备级封装对外接口尽量简单输入参数说明Run启动命令Stop停止命令FreqSet频率设定值Reset故障复位Enable设备允许信号内部做的事情控制字写入、频率写入、状态字读取、运行频率/电流读取、故障标志转换。HMI操作员看到的只是一个简单的“启动、停止、设定、复位”面板背后所有的Modbus寄存器读写都在FB内部完成这样HMI的逻辑就不会被通讯细节污染。3.4 主程序与HMI联动OB1里的组织顺序AF架构建议按“通讯管理-设备控制-HMI面板刷新”三段来写。通讯管理先执行让设备FB读取到最新的变频器数据设备控制根据数据和命令做逻辑HMI面板刷新用于更新画面显示状态。HMI侧用MTP1000关键不是把一堆按钮拖到画面里而是做面板类型。在WinCC里创建一个“变频器控制面板”包含启动、停止、频率设定、运行频率、电流然后绑定到FB_VFD的背景数据接口。3台变频器只需要在画面上放3个面板实例改数据源就行。以后扩展到8台、10台就是复用面板的事情。3.5 下载调试与验收下载顺序建议先硬件组态再PLC程序再HMI画面。硬件组态下载完成后先在线检查模块状态尤其是CM1241是否被识别然后下载程序用监控表强制测试最后连HMI。调试时用监控表把三台变频器的状态字、控制字、频率设定值、反馈值放一起看一次能看十几个变量。这样排查通讯故障比满屏乱翻快得多。有条件的话用Trace抓一下频率设定值和实际反馈值的曲线看响应是否滞后是否有跳变。AF架构的验收标准不只是“设备能动”而是“每个接口变量的数值和预期一致、每个设备的FB调用稳定不报错、HMI面板和PLC变量一一对应”。4. 常见问题与排查技巧实录4.1 Modbus通讯失败的快速定位Modbus通讯不上是西门子PLC与变频器项目里最高频的问题。按下面顺序排查能解决九成问题。先看接线A/B是否接反、屏蔽层是否单端接地、终端电阻是否按厂家要求连接。再看从站参数变频器地址必须和PLC发的地址一致波特率、校验位必须完全一样很多时候“参数看起来一样但实际就是不通”都是因为校验位错了一位。然后看轮询间隔PLC发帧太快从站响应不过来程序会一直报超时错误这个就要在通讯FB里加至少50ms的帧间隔。最后看错误码博途Modbus指令的错误代码非常具体比如8200系列错误的含义都写在帮助文档里但很多人不看帮助。我整理了一个速查表错误码/现象大概率原因通讯指令超时无响应接线错误、从站地址错误、波特率不一致偶尔通、偶尔不通RS485 A/B接反、干扰大、屏蔽层未接地能读不能写寄存器地址错误、从站写保护、功能码不支持读回来的值全是最大值寄存器地址偏移错误、数据格式不对4.2 博途版本、GSD与第三方设备集成接第三方变频器ABB、施耐德ETA系列等时如果是走PROFINET需要安装对应GSD文件如果是走Modbus就省去这一步。GSD文件安装方法很简单博途里在设备和网络界面点“安装GSD文件”选择下载好的XML/GSDML文件安装完成后在硬件目录里就能找到对应设备。注意GSD版本要与博途版本兼容高版本软件可以安装低版本GSD低版本软件不认高版本GSD。EPLAN部件下载也是很多人的需求。西门子官网提供EPLAN部件库下载后导入EPLAN电气图纸里的设备编号就能直接对应博途里的硬件目录。AF架构非常看重这一环因为如果图纸里的IO点和PLC程序里的I/O地址不一致调试时就是灾难。所以建议做项目时先统一EPLAN部件版本和博途硬件目录。版本问题再强调一句博途项目文件的向下兼容很差V17打开V15的项目要升级V15打开V17的项目想都别想。交付给客户之前确认客户用的博途版本不能低于你用的版本否则程序打不开前功尽弃。4.3 多重实例、DB与版本管理的坑多重实例虽然解决了DB爆炸但也有自己的坑。最大的坑是数据块兼容性。一旦CPU在线运行你改了FB的接口实例DB的“离线/在线”状态就会不一致下载时如果选择不正确很容易把设备正在跑的数据覆盖掉。我推荐的做法是每次下载前在博途里右键实例DB做“离线与在线比较”逐项看差异只下载修改过的块。这个习惯能避免很多现场事故。另一个坑是FB改名后背景DB的引用关系会变。如果你要重构FB千万别直接改原FB名字而是新建一个FB把旧FB的代码复制过去再在调用处替换。这样万一新FB有问题还能回滚。AF架构讲究“可回滚”不是程序写得快就完事。4.4 HMI与触摸屏的实操问题热词里提到的Smart 700IE开机报USB或TF卡问题我碰到过几次大多是存储介质质量差或者操作时断电导致镜像损坏。解决思路有两种如果卡还能被电脑识别重新刷一遍镜像如果卡已经废了换一张工业级TF卡。博途下载到精致面板时会提示是否启用扩展存储建议不要启用默认用内部存储稳定性好很多。MTP1000这种新面板更常见的坑是“允许远程设备访问”的开关。在WinCC项目属性里如果这个选项没开触摸屏远程下载或者是上位机通过以太网访问时就会失败。另外IP地址冲突也经常遇到尤其是在现场有多个网段的产线上。AF架构里建议把所有HMI、PLC、上位机的IP规划做成一个固定表格贴在电气柜门内侧或者做成项目文档第一页。4.5 现场调试的几条经验调试多年有些经验是写不进手册的。第一状态机是万能钥匙。设备的每个动作都设计成状态待机、启动中、运行、停止中、故障、急停。AF架构里的单元FB强烈建议有一个State变量。这样HMI可以显示“当前状态”报警原因也用状态变化来触发而不是靠一堆互锁点的组合猜。第二程序设计阶段就要区分“手动模式”和“自动模式”。是谁都可以操作的通用逻辑。AF架构要求模式切换有专门的FB处理不能让操作员在手动模式下还能触发自动指令也不能在自动模式下轻易把手动信号叠进去。第三不要忽略急停和安全的透明性。急停回路最好用LAD直接画在独立的FC里硬件接线和程序逻辑一一对应。AF架构允许你把安全回路放在最高优先级但不允许你用复杂SCL藏掉急停逻辑。安全逻辑必须能让任何一个人三分钟看懂。第四多聊一句红绿灯这类基础应用。很多新手从红绿灯PLC控制梯形图入门觉得简单。其实红绿灯就是典型的状态机例子绿灯、黄灯、红灯的时序切换跟设备工位的自动流程是同一类逻辑。把基础状态机练熟了再看AF架构的大框架会通透很多。5. AF架构的团队协作、文档与进阶方向5.1 库管理与版本发布AF架构落地到团队不能靠口头约定。博途的项目库和全局库要用起来。项目库是当前项目内部的库适合放项目专用的FB、UDT、面板全局库是跨项目复用的适合放企业标准设备库。建库时要注意版本号比如FB_Valve_v1_0、FB_Valve_v1_1改动不破坏旧引用。之前就吃过亏直接在原FB上改了接口结果用了这个FB的历史项目全部编译报错最后花了半天一个个改回来。版本发布的时候建议把库的变更记录写成一个简单的Excel或Markdown表记录版本号、修改人、修改内容、影响范围。这个表可能看起来繁琐但半年之后你会谢天谢地。5.2 从AF架构看SICAR、FactoryIO等高级形态AF架构的指导思想在西门子的很多行业解决方案里都能看到影子。比如汽车行业常用的SICAR项目本质上就是一套针对汽车产线的标准化AF库。它把汽车行业的设备类型、控制模式、诊断机制做了标准化封装让项目交付从“写程序”变成“配置库”。这种做法单看一个FB可能感觉不到厉害但整个产线几十个工位所有程序结构完全一致的时候调试、培训、后期维护的成本会大幅下降。这也是AF架构最想达到的效果让项目的复杂度不再随设备数量线性增长。还有追飞剪电子凸轮这类高级应用非常典型。因为飞剪的同步控制涉及高速计数、凸轮曲线、位置同步程序结构不好根本没法维护。AF架构在设备级把追剪FB封装好单元级管整机时序线体级管上下游衔接这样复杂的控制逻辑才有机会在一个产线上稳定跑。FactoryIO博途工程模板是另一个好东西。它用FactoryIO做虚拟产线博途跑真实PLC程序调试时不需要真设备。对学习AF架构的人来说这是一个低成本的练手途径在虚拟产线上按AF的三级结构写程序、调通讯、做HMI踩完坑再上真机效率会高很多。5.3 文档与工程交付AF架构的交付不只是PLC程序至少还要包含I/O清单、点位表、通讯配置表、FB功能说明、HMI操作手册、报警清单。这些文档不是写给领导看的是给将来接手项目的自己或同事看的。我在每个项目里都会做一份“工程结构说明”写清OB组织方式、FB调用关系、UDT定义、IP规划。有了这个不管项目做了多久回来接手不需要从头翻程序。AF架构把代码规范管住文档把项目背景管住两头都稳了项目才算是真的交付了。最后聊一点个人体会。AF架构这种东西最忌讳照搬。我刚开始接触的时候恨不得把每个FB都做成万能模板结果一个FB十几个接口连自己都劝退了。后来才明白框架是拿来裁剪的小项目用设备级FB就够了大项目才需要把单元级和线体级拉进来。你真正要做的是把“怎么命名、怎么分层、怎么复用”这三个原则定下来剩下的都是执行的事。V1.2也只是起点你的项目会进化架构也会跟着涨。
返回列表