克服PLC编程的难题——基于Git的软件
图片来源:Copia Automation
作者:Darren Henry
一家控制系统集成商使用基于Git的软件提高了自动化程度,并提升了新员工的入职培训效率和质量。
Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的,它具有高效、灵活、稳定等优点,如今已成为软件开发领域中最流行的版本控制系统之一。Git使用一种名为“仓库”的数据结构来保存代码和它们的变更历史。每个开发人员都可以在本地拥有自己的仓库,并将其与其他人的仓库同步更新。除此之外,Git还提供了强大的分支和合并功能,可以让开发人员在不影响主干的情况下创建和测试新功能。
自1996年以来,工程咨询公司DMC一直致力于通过定制的自动化软件和控制系统,帮助客户提高生产设施的生产力。他们参与过很多行业应用,如汽车、食品和饮料,甚至海军战舰。
负责该公司美国西部自动化业务的项目总监John Sullivan表示,对服务的需求从未如此之高。“有时,我们不得不地拒绝合同,因为需求超过了我们快速雇佣和培训控制工程师的能力。”
控制系统集成商协会(CSIA)最近的一项调查显示,2021年系统集成工程师的招聘形势严峻,但整个领域的人员流动率却高达16.5%,这也印证了 Sullivan 的判断。
最大的瓶颈是培养新人才和有效地利用高级工程师的时间。软件工程专业的学生,学习的通常是基于文本的编程语言,而不是专用于机器自动化的可编程逻辑控制器(PLC)可视化梯形逻辑图。因此,年轻的工程师需要与经验丰富的导师配对进行培训,这可能需要几个月的时间。
在DMC公司,软件项目组的大小从一名程序员到25名工程师不等,夏季往往会需要更大的团队,新人可以向经验丰富的同事学习。高级工程师的日程很快就被频繁的设计审查填满。到了冬天,随着大学毕业生更有能力独立开展工作,小型的团队变得越来越普遍。
为了简化其设计审查过程、版本控制和协作,他们采用了基于Git的软件,该软件可以加速多个PLC编程环境的开发。这使团队能够在相同的文件上工作,而不会有覆盖他人工作的风险。Git分支和合并功能,为梯形图逻辑编程带来了与文本语言项目相同的协作优势。
带注释的可视化检查功能,提供了易于阅读、颜色编码的比较,审核人员无需在原始集成开发环境(IDE)中下载和打开文件。
通过在网络浏览器或桌面应用程序中显示PLC梯形图逻辑 并突出显示提交之间的变化 Copia可以加快代码审查速度
01 尽早发现并修复错误
PLC编程语言的自动渲染以及在不使用原始IDE的情况下快速可视化变更的能力,大大加快了初级和高级工程师之间的反馈路径。在领导多个项目时,由于代码审查速度更快,高级工程师每周最多可以节省一天的时间。此外,审查比以前更频繁。Sullivan说道,“在部署或测试之前,我们会发现更多的错误。因为我们总是在合并之前查看可视化代码,所以我们犯的错误也更少。”
转向基于Git的软件后,使Sullivan的团队效率大大提高。他说,“虽然在管理项目历史方面Git本身做得很好,但在审查代码时就显得力不从心了。每当有人提交代码变更时,我们的高级工程师都需要打开两份开发环境副本,在两个平台之间进行比较,并在重新提交之前手动复制代码。现在,我们可以立即看到变更,只需单击几个按钮即可合并这些变更。过去需要45分钟的过程,现在只需要15分钟。”
“成功的关键之一就是要确保拥有最新的代码。共享同一个资源库有助于实现这一点。”
02 克服自动化编程的难题
Copia Automation公司基于Git的版本历史记录,可以捕获项目生命周期中的所有编码变更,允许团队根据需要恢复到任何早期版本。编辑历史对于团队成员了解最新的项目变化非常重要,它也有助于管理困扰DMC公司多年的难题。对于很多企业来说,挑战在于:在安装后很长一段时间内,如何保持为机器和系统提供持续支持的能力。
Sullivan说:“我最近收到一位客户来信,该客户在七年前与我们最后一次合作。负责该项目的工程师和经理都去世了。始终能够找到老旧项目的文件非常重要。另外一个客户设施遇到电涌,导致其丢失了相关程序。不幸的是,他们从来没有保存过它的副本。因此,我们需要获取旧代码,并帮助它们重新部署到一组新的硬件上,以便它们能够恢复运行。现在,我们团队中的任何人,都能够在没有参与该项目的原始工程师参与的情况下,轻松应对这些难题。拥有项目整个生命周期的情境信息非常有价值。”
在一个安全的中央存储库中拥有唯一的信息来源,也有助于团队更有效地与制造客户合作。有些客户在运营设施时,工程师会定期进行小代码更改。当真出现问题时,他们会给出及时反馈。Sullivan说,“我们的工作是介入并帮助客户解决问题。成功的关键之一是确保我们拥有最新的代码。共享同一个存储库可以做到这一点。”
业界仍然依赖文件名和共享文件夹是一件 "令人尴尬 "的事情。开发一个精简平台,让程序员可以相互学习并开发单一的信息来源,这对于减少瓶颈和让年轻工程师在不麻烦高级工程师的情况下学习至关重要。基于Git的软件帮助他们大大提高了工作效率。
关键概念:
■ 如何培养新人并对其进行编程培训,是一个主要的挑战。
■ 了解基于Git的软件如何消除一些潜在的瓶颈。
■ 发现单一信息来源对编程的重要性,以及开放式沟通对团队的好处。
思考一下:
如何通过改变PLC编程工作流程来提高自动化水平?
高手进阶:让PLC自动生成报警信息,绝对是干货
内容梗概:利用Prodiag功能把报警信息封装在需要多次调用的FB程序块中,实现自动生成报警信息,减少HMI的编程工作量。
在一个自动化项目的程序中,报警程序是不可或缺的,它是PLC控制程序中非常重要的组成部分。在设备的自动运行过程中,自动检测设备的运行异常,并输出报警提示,协助操作人员排除故障。在TIA Protal中,大部分人的HMI报警程序是用“离散量报警”来实现的,这个是最容易理解也是最直观的方式。
离散量报警
但是当一个设备中有某个部件被大量重复性的使用时,其HMI的报警程序的编写工作量会变得非常巨大无趣。比如气缸,气缸在自动化项目上的应用非常广泛,而且用量很大,一个中等规模的自动化项目上有几十个气缸很正常,有时为了让故障原因表达得更详细,通常一个气缸会编写多个报警信息,如前进不到位、后退不到位等,这样一来几十个气缸的报警信息的编写是一个很大的工作量,而且是重复性的工作,就我个人的感受来说,做这种重复性的工作是非常枯燥乏味的,心里会非常的烦躁。那有没有方法把这种枯燥而且乏味的重复性的内容让程序自动生成呢?有,确实有,我们可以利用TIA Protal的Prodiag功能把报警信息封装在需要多次调用的FB程序块中,实现自动生成报警信息。今天我们就以气缸的控制程序为例,详细介绍如何实现这个功能。
在本文中不对气缸功能块的控制原理做详细讲解,这个后续我可以单独写文章讲解,只侧重讲解用Prodiag功能做报警信息。关于Prodiag功能在前几篇文章《如何在触摸屏上显示PLC程序之GRAPH篇》、《如何在触摸屏上显示PLC程序之LAD篇》都有介绍,重复的内容在这里就不做累述。
用FB做一个气缸控制功能块命名为“Std_CylinderBase”,在Input、Output(或Static)中添加以下变量:
Input:
DeviceName 数据类型WString[20] //用于填写气缸的功能名称,数据长度自定义
CylNr:数据类型 INT //用于标记气缸编号
Safety_OK:数据类型 BOOL //外围的安全设施正常,为FALSE时气缸不输出报警信息
Output或Static:
Fault:数据类型 BOOL //总的报警输出信号
Error_Code:数据类型 BYTE //报警代码,每个变量的信息参见下表:
Error_Code
FB的接口定义完后如下:
FB的接口定义
在我的Std_CylinderBase程序中将数据类型为INT的CylNr变量转换成字符串STRING后放入报警信息中的,这是因为我在多次调用FB时将FB接口参数化比较方便才将CylNr定义为INT,大家可以直接将CylNr定义为STRING,这样就不需要下面的这段转换程序。
气缸编号转换成STRING
在Std_CylinderBase程序中编写气缸报警程序,并输出Error_Code:
编写Error_Code程序
将所有报警汇总输出到Fault:
Fault输出
打开“PLC报警文本列表”,在其“文本列表”中新建一个名为“CylinderFaultList”的文本列表,在“CylinderFaultList文本列表条码”中根据Error_Code的值填写对应的报警信息:
PLC报警文本列表
在这里可以编辑多语言的报警信息,这样在HMI上就可以实现多语言显示切换。
以上工作做完后,我们回到Std_CylinderBase块,设置Fault变量的Prodiag功能。在FB的接口中Fault变量的“监控”栏右键后选择“新增监控”,在其“属性”—“监控”中设置如下:
Fault的监控设置
条件 1/2/3为串联关系,为空表示无条件。
这里的其他选项我就不详细讲解,不明白的可以看上一边文章《如何在触摸屏上显示PLC程序之LAD篇》中有详细介绍,地址:https://www.toutiao.com/i6974594252995052071/
选择“详细文本”选项,配置如下:
详细文本配置
在这里我们将详细文本的内容设为由变量“变量1(SD_4)”、“变量2(SD_5)”、“变量3(SD_6)”中的值组合生成。
详细文本域的语法如下:
其格式为@<相关值的编号><格式>。符号“@”用于只是开始使用相关值和关闭相关值。
相关值的编号
格式
样例
此例中@4%s@,其中“%s”没有编辑[i]指定任意长度,但是受限于Input中iDeviceName的数据类型WString[20]已经定义宽字符长度为20,“4”表示调用变量1(SD_4)中的值。
此例中@6%t#CylinderFaultList@,表示调用变量3(SD_6)中的值将“#CylinderFaultList”文本列表中的数据以字符串的形式输出。此处实际上是使用了双层嵌套,线调出#oError_Code变量的值,在将“#CylinderFaultList”文本列表中#oError_Code变量的值对应的文本内容调出。
这里使用变量、文本列表的好处是可以减少Prodiag监控,气缸的6个报警输出实际上只用了一个Prodiag监控,大幅节约CPU资源。当然也可以不使用文本列表,那么就需要在FB里为每个报警各自创建一个监控,每个气缸就需要创建6个监控。
以上配置完成后编译Std_CylinderBase。
创建ProdiagFB,将其命名为“AlarmDiag”。
调用Std_CylinderBase。
打开“项目树”里CPU的“PLC监控和报警”,在“FB监控实例”中将气缸的报警分诊断配给刚才新建的“AlarmDiag”。
PLC监控和报警
图中ST?_CylinderManage_DB为调用Std_CylinderBase的FB的背景数据块。
Std_CylinderBase被多次调用后“AlarmDiag”中自动生成的报警诊断如下:
AlarmDiag程序块
打开调用Std_CylinderBase的FB程序块,设置Std_CylinderBase的接口数据。
气缸编号赋值
Std_CylinderBase调佣
在HMI上添加报警信息显示画面,在 “显示”中一定要勾选刚才在诊断里选择报的警类别,否则这里是不会显示诊断的报警信息。
报警信息显示
在HMI上添加代码显示画面,在画面中添加“PLC代码视图”控件,如下图:
PLC代码视图
下载PLC和HMI程序,查看运行效果
HMI报警显示
Std_CylinderBase
以上案例中,我们完全抛弃了用“离散量报警”的报警显示方式,将报警信息集成进封装好的FB块中,免去了对重复对同一部件进行报警信息编写工作,极大的提高了编程工作量,提高了工作效率。
你学会了吗。看完不要忘了给八阿哥点个赞[赞],你的点赞是八阿哥进行创作的动力!
我是八阿哥,关注我,可以随时查看我最新发表的技术原创贴!这可都是干货哦~!
都是原创,打字不易,若有错误或遗漏还请多多包涵[作揖]。
相关问答
PLC吃存储空间还是吃显卡?-ZOL问答
如果是的话,PLC编程吃内存和显卡的情况基本不存在,因为都是做为单片机通讯用,且程序编译出来很小。你只需考虑用什么开发软件IDE一般主流的电脑都能胜任。i5...
pic18f46k22用什么编程?
对于PIC18F46K22微控制器的编程,您可以使用Microchip公司的MPLABXIDE(IntegratedDevelopmentEnvironment)和MPLAB...
电脑主板上不带plc插槽怎么处理-ZOL问答
plc(PLC)可编程逻辑控制器,是一种采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模...
谁知道穿越火线北京一区爆二频五的刚哥啊!-Pt.ii刚哥*?有人...
新买的战将120GSSD重装win8后as显示pciide-bad2.2万浏览4回答WinXp系统怎...proface触摸屏肿么和三菱的PLC穿越通讯?1万浏览3回答要移动WO...
求高手讲解一下:要使单片机正常工作,需要具备哪几个条件?
2.2如果是用C写的,就要做一点额外的软件工作了,包括:link文件(把代码放进相应的flash和ram中),启动代码,初始化系统时钟代码,gcc或者IDE环境编译。...2.1...
贵阳哪有dvd集成块卖-ZOL问答
为什么IDE光驱没解码也能播放CD?2168浏览10回答华硕笔记本的C盘被格式化...信捷PLC与MCGS触摸屏怎么通讯???基于modbus协议的1万浏览7回答ZOL问...
显示器亮起来就丝丝的响。然后过了几秒钟就黑屏了。是为什么...
断开所有次要性电源线,包括ide软驱等设备。你所需要的就是最基本的初始启动...西门子plc编程软件step75.5有几个版本5155浏览4回答OPPO怎么联接小米手环...
要组装一台电脑专门玩逆战的,价格5000左右,求配置单(逆战能够...
声卡AMDSB900IDEController网卡瑞昱RTL8105EFamilyPCI-EFENIC有用...在实际应用中定时器的时间范围超过PLC的定时器定时范围时,怎么...
两个硬盘怎么设置主盘和副盘?-ZOL问答
以前的IDE硬盘是通过跳线控制,现在是通过分区的形式来控制有用(0)回复夸分区...proface触摸屏肿么和三菱的PLC穿越通讯?1万浏览3回答要移动WORD中表格中...
光驱有盘符也能打开,但就是不读盘,是不是坏了-ZOL问答
为什么IDE光驱没解码也能播放CD?2168浏览10回答华硕笔记本的C盘被格式化...西门子plc编程软件step75.5有几个版本5155浏览4回答OPPO怎么联接小米手环...