高手进阶:让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块中,免去了对重复对同一部件进行报警信息编写工作,极大的提高了编程工作量,提高了工作效率。
你学会了吗。看完不要忘了给八阿哥点个赞[赞],你的点赞是八阿哥进行创作的动力!
我是八阿哥,关注我,可以随时查看我最新发表的技术原创贴!这可都是干货哦~!
都是原创,打字不易,若有错误或遗漏还请多多包涵[作揖]。
TIA博途PLC技巧之(四)如何在HMI上显示PLC代码流程
无论是做PLC项目开发,还是后期维护,都有一个不可问题存在,设备会无缘无故的不动作,一般的有经验的PLC工程师会将报警写得很详细,但是仍然不可避免出现疏忽,这时,我们该如何补救的,接下来,我就给大家介绍一个非常有趣的应用,可以将PLC流程显示在HMI上,只要设备停止,可以在HMI实时显示出停在哪一步,这一步是做什么的,需要什么条件。
调试人员可以少很多时间去连机,对一些不熟练使用PLC的人员也可以进行简单判断。下面做了一个实现步骤,来实现这个功能。
1)首先创建一个Graph 流程的FB块,用FB块进行流程图的编程,打开FB功能块,并在编辑菜单中勾选如图“从HMI显示/访问内部参数”
打开graph功能块,并进行设置
2)在HMI中新建一个画面,增加一个控件“GRAPH总览”如下图所示
添加控件
3)添加一个画面4,并在画面四种添加一个控件“PLC代码视图”
添加PLC代码视图
4)配置控件,将变量连接到对应的FB块的背景块中的"OFF_SQ"
连接GRAPH块的变量
5)在事件中编辑“PLC代码视图按钮单击”,目的是出现问题时按下按钮时可以直接跳出对应的画面四,并在画面四中显示对应的PLC代码
PLC代码编辑
6)执行结果如下图,停在第二步,原因是M20.0信号没有满足.
监视结果
好了,例子是一个简单的实例,PLC工程师编程时应该要考虑到变量名,步号的名称,这样才能达到效果。
今天就先写这些,原创不易,请多多关注!谢谢!!!
相关问答
西门子触摸屏能控制1200plc的I点吗?
西门子触摸屏能够控制1200PLC的I点。西门子触摸屏作为人机界面的一种常见形式,通过与PLC进行通信,可以实现对PLC输入点(I点)的控制。具体操作可以通过编程设...
文本显示器怎么控制PLC软元件,还需要编数据传送指令吗-14...
不需要编写这个数据了,但是,你在编程文本显示器上的软件时,要对应将相应控件与PLC中的一一对应,他们会在连接通信上后自动传输数据与指令的。如上...
plc如何显示坐标值?
要在PLC上显示坐标值,通常需要将坐标值传递到PLC中,并使用PLC编程软件编写程序来显示该值。可以使用PLC的输入/输出模块来读取传感器或编码器的信号,并将其转...
西门子触摸屏写入1,plc时间走1秒,怎么弄?
首先要在PLC程序里头设定一个定时器,并用一个存储区D0来存放计时值,然后程序里头用这个定时器的常闭输出做为一个触发源,去触发PLC的程序。触摸屏上,增加一个...
怎样用LabVIEW和OMRONPLC通讯?
你要用什麼方式来通讯,串口还是以太网串口就用VISA控件来控制,PLC就是HOSTLINK,协议就用FINS以太网也是用TCP控件,协议用FINS/TCP你要用什麼方式来通讯,...
怎样从PLC获取触摸屏当前画面的编号?
怎样从PLC获取触摸屏当前画面的编号呢?下面举例说1,威纶触摸屏,打开软件,在元件栏选择PLC控制新增数据写入PLC下面设置地址机智2普洛菲斯触摸屏工程-系...
昆仑通态触摸屏变频器制作方法?
在昆仑通态触摸屏上怎样编才能把数值写进到PLC,然后把PLC写入变频器触摸屏控制变频器的方法有两种,第一就是直接控制采用通信的方式直接发送启停命令和频率指...
触摸屏改PLC时间?
触摸屏改PLC里的时间继电器的数值,把时间继电器的定时值放在寄存器里,触摸屏改变寄存器的值就可以了。在屏上设置一个数值格式的单元,此单元的地址就选择要修...
请问plc怎么采集压力传感器测得的压力值以及怎么通过触摸...
无论什么牌子的PLC开关量是无法完成压力采集的,要使用一个模拟量采集模块才行,然后在PLC内部做模拟量转换。要想在触摸屏显示压力曲线,要把PLC和触摸屏通讯起来...
作为一名电工如何提升工控技能?变频器、plc、触摸屏选择学哪个?哪个更有发展前途?
可以不往编程设计哪方面走,可走维修方面的路。首先触摸屏是上位机显示和操作的界面,这基本没什么难点,就是一些控件的使用,掌握基本的就可以,一些高级操作...你...