高手进阶:让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的USS通信程序原来是这样编写,赶紧转发收藏
点击上方"PLC发烧友"关注我们吧!
S7-200 SMART本体集成的 RS 485 通信口可以工作在自由口模式下,支持 USS 通信协议。
S7-200 SMART 与驱动装置(变频器)进行 USS 通信时可以:
1)根据驱动装置的具体 USS 通信规范,我们自己编程实现 USS 通信。此方式可以保证该驱动装置的所有 USS 通信功能都能得到使用;
2)使用西门子提供的 USS 通信指令库,实现与 Micro Master 系列的 MM3/MM4 和 SINAMICS G110/V20 的USS 通信。此指令库只能有限地支持与其他驱动装置的 USS 连接。
使用西门子提供的 USS 指令库,这样我们就不必自己配置复杂的 PKW/PZD 数据,或者计算校验字节。
S7-200 SMART的 USS 编程主要包括如下几个步骤:
参数设置和硬件接线部分可参考我们技成培训网观看《西门子变频器参数设置和实操训练》课程的相关章节,在这不再阐述;
调用USS初始化指令
S7-200 SMART USS 标准指令库包括 USS_INIT、USS_CTRL、USS_RPM_X、USS_WPM_X等指令。调用这些指令时会自动增加一些子程序和中断服务程序。
USS 库应用首先要进行 USS 通信的初始化。使用 USS_INIT 指令初始化 USS 通信功能。
图 1. 选择 USS_INIT 指令
打开 USS 指令库分支,像调用子程序一样调用 USS_INIT 指令。
图 2. 调用 USS_INIT 指令
图中:
EN:初始化程序 USS_INIT 只需在程序中执行一个周期就能改变通信口的功能,以及进行其他一些必要的初始设置,因此可以使用 SM0.1 或者沿触发的接点调用 USS_INIT 指令;
Mode:模式选择,执行 USS_INIT 时 ,Mode 的状态决定在通讯端口上是否使用 USS 通信功能;
=1 设置为 USS 通信协议并进行相关初始化
=0 恢复为 PPI 协议并禁用USS通信
Baud:USS 通信波特率。此参数要和变频器的参数设置一致;
=1200
1200 bit/s
2400 表示2400 bit/s
4800表示4800 bit/s
9600表示9600 bit/s
19200表示19200 bit/s
38400表示38400 bit/s
57600表示57600 bit/s
115200表示115200 bit/s
Port: 0 = CPU 集成的 RS485 通讯端口;=1可选CM01 信号板。
Active:此参数决定网络上的哪些 USS 从站在通信中有效。详见下面的说明;
Done:初始化完成标志
Error:初始化错误代码;对应的代码如下:
USS 库指令错误代码
错误代码
错误描述
0
无错误
1
驱动装置无响应
2
来自驱动的响应中检测到校验和错误
3
来自驱动的响应中检测到奇偶校验错误
4
用户程序干扰引起错误
5
尝试执行非法命令
6
提供了无效的驱动装置地址
7
通信口未定义为 USS 协议
8
通信口忙于处理其他指令
9
驱动装置速度设定输入值超限
10
驱动装置返回的信息长度不正确
11
驱动装置返回报文的第一个字符不正确(不是 02 h)
12
驱动装置返回的长度信息不被 USS 指令支持
13
响应的驱动装置不正确
14
提供的 DB_ Ptr 地址不正确
15
提供的参数号不正确
16
选择了错误的协议
17
USS 已激活,不能改变
18
指定了非法的波特率
19
无通信活动:驱动装置未激活
20
驱动装置返回的参数值不正确或包括错误的代码
21
请求一个字长的数据时返回了一个双字数据
22
请求一个双字长的数据时返回了一个字数据
23
端口无效
24
信号板(SB) 端口1缺失或未组态
Active参数
USS_INIT 子程序的 Active 参数用来表示网络上哪些 USS 从站要被主站访问,即在主站的轮询表中激活。网络上作为 USS 从站的驱动装置每个都有不同的 USS 协议地址,主站要访问的驱动装置,其地址必须在主站的轮询表中激活。USS_INIT 指令只用一个 32 位长的双字来映射 USS 从站有效地址表,Active 的无符号整数值就是它在指令输入端的取值。
表 1. 从站地址映射
在这个 32 位的双字中,每一位的位号表示 USS 从站的地址号;要在网络中激活某地址号的驱动装置,则需要把相应位号的位置设为二进制“1",不需要激活 USS 从站,相应的位设置为”0"。最后对此双字取无符号整数就可以得出 Active 参数的取值。
在表 1 的例子中,如果使用站地址为 3 的 MM 440 变频器,则须在位号为 03 的位单元格中填入二进制“1"。其他不需要激活的地址 对应的位设置为”0"。取整数,计算出的 Active 值为 00000008 h,即 16#00000008,也等于十进制数 8(如图 2.中的 e.)
建议使用 16 进制数,这样可以每 4 位一组进行加权计算出 16 进制数,并组合成一个整数。当然也可以表示为十进制或二进制数值,但有时会很麻烦,而且不直观。
如果一时难以计算出有多个 USS 从站配置情况下的 Active 值,可以使用 Windows 自带的计算器。将其设置为科学计算器模式,可以方便地转换数制
调用驱动装置控制指令
USS_CTRL 指令用于对单个驱动装置进行运行控制。这个功能块利用了 USS 协议中的 PZD 数据传输,控制和反馈信号更新较快。
图3.USS_CTRL指令
在 USS 通信指令库分支中选择 USS_CTRL 指令。
EN:使用 SM0.0 使能 USS_CTRL 指令
RUN:驱动装置的启动/停止控制
=0停止=1运行
此停车是按照驱动装置中设置的斜坡减速指电机停止.
OFF2:停车信号 2。此信号为“1"时,驱动装置将封锁主回路输出,电机自由停车
OFF3:停车信号 3。此信号为“1”时,驱动装置将快速停车
F_ACK:故障确认。当驱动装置发生故障后,将通过状态字向 USS 主站报告;如果造成故障的原因排除,可以使用此输入端清除驱动装置的报警状态,即复位。注意这是针对驱动装置(变频器)的操作。
DIR:电机运转方向控制。其“0/1”状态决定运行方向
Drive:驱动装置在 USS 网络上的站号。从站必须先在初始化时激活才能进行控制
Type:向 USS_CTRL 功能块指示驱动装置类型
=0表示MM3系列,或更早的产品
=1表示MM 4 系列,SINAMICS G 110,SINAMICS V 20
Speed_SP:速度设定值。
该速度是全速的一个百分数;“Speed_SP”为负值将导致变频器反向运行。
Resp_R:从站应答确认信号。
主站从 USS 从站收到有效的数据后,此位将为“1"一个程序扫描周期,表明以下的所有数据都是最新的
Error:错误代码。0 = 无出错。其他错误代码请参考USS 库指令错误代码
Status:驱动装置的状态字。此状态字直接来自驱动装置的状态字,表示了当时的实际运行状态
详细的状态字信息意义请参考相应的驱动装置(变频器)手册。
Speed:驱动装置返回的实际运转速度值,实数。
Run_EN:运行模式反馈,表示驱动装置是运行(为 1)还是停止(为 0)
D_Dir:指示驱动装置的运转方向,反馈信号
Inhibit:驱动装置禁止状态指示(0 - 未禁止,1 - 禁止状态)。禁止状态下驱动装置无法运行。要清除禁止状态,故障位必须复位,并且 RUN, OFF2 和 OFF3 都为 0
Fault:故障指示位(0 - 无故障,1 - 有故障)。表示驱动装置处于故障状态,驱动装置上会显示故障代码(如果有显示装置)。要复位故障报警状态,必须先消除引起故障的原因,然后用 F_ACK 或者驱动装置的端子、或操作面板复位故障状态。
此 USS_CTRL 功能块使用了 PZD 数据读写机制,传输速度比较快。但由于它还是串行通信,而且还可能有多个从站需要轮询,因此无法做到“实时”响应。要实现高要求的快速通信,应该使用 PROFIBUS-DP 等网络,同时更换主站为更高级的控制器。
USS_CTRL 已经能完成基本的驱动装置控制,如果需要有更多的参数控制选项,可以选用 USS 指令库中的参数读写指令实现。
调用驱动装置参数读写指令
USS 指令库中共有 6 种参数读写功能块,分别用于读写驱动装置中不同规格的参数。
它们是:
USS 参数读写指令采用与 USS_CTRL 功能块不同的数据传输方式。由于许多驱动装置把参数读写指令用到的 PKW 数据处理作为后台任务,参数读写的速度要比控制功能块 慢一些。因此使用这些指令时需要更多的等待时间,并且在编程时要考虑到,进行相应的处理。
读参数指令
以下的程序段读取SINAMICS V20 实际频率(参数 r0021)。由于此参数是一个实数,因此选用实数型参数读功能块。
参数读写指令必须与参数的类型配合。
调用 USS_RPM_R 指令读取 SINAMICS V20 的实际频率
EN:要使能读写指令此输入端必须为 1
XMT_REQ:发送请求。必须使用一个沿检测触点以触发读操作,它前面的触发条件必须与 EN 端输入一致
Drive:要读写参数的驱动装置在 USS 网络上的地址
Param:参数号(仅数字)。此处也可以是变量
Index:参数下标。有些参数由多个带下标的参数组成一个参数组,下标用来指出具体的某个参数。对于没有下标的参数,可设置为 0
DB_Ptr:读写指令需要一个 16 字节的数据缓冲区,用间接寻址形式给出一个起始地址。此数据缓冲区与“库存储区”不同,是每个指令(功能块)各自独立需要的。
此数据缓冲区也不能与其他数据区重叠,各指令之间的数据缓冲区也不能冲突
Done:读写功能完成标志位,读写完成后置 1
Error:出错代码。0 = 无错误
Value:读出的数据值。该数据值在 “Done”位为1时有效。
EN 和 XMT_REQ 的触发条件必须同时有效,EN 必须持续到读写功能完成(Done 为 1),否则会出错。
来源:PLC发烧友,作者:技成培训网-眭相建,转载请注明出处!文章源程序可免费提供,私信回复:源程序 免费领取! 评论处大家可以补充文章解释不对或欠缺的部分,这样下一个看到的人会学到更多,你知道的正是大家需要的。。。
相关问答
plc怎么输出字符串?
在PLC中,可以使用编程语言如LadderDiagram或StructuredText来编写程序,以将字符串输出到控制台或其他设备上。具体来说,可以使用String变量存储要输出的字符...
plc中ascii字符,怎么用,它的用途,是什么,在什么情况下能用着?
目前国内外使用最普遍的字符编码是ASCII码(美国国家信息交换标准字符码)。ASCII码由八位二进制数组成,其中前7位二进制码表示命令、字母、数码和符号,最高位...
plc中ascii字符怎么用它的用途是什么在什么情况下能用着?
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,象a、b、c、d这样的52个字母(包括大写)、以及...
为什么三菱plc里的元件不能写注释?
三菱PLC(可编程逻辑控制器)的元件不能写注释可能是由于以下几个原因:1.编程语言限制:三菱PLC使用的编程语言(例如LadderDiagram)可能没有提供直接的注...
三菱plc中文字符串怎么发文字到手机上?
要将三菱PLC中的中文字符串发送到手机上,首先需要确保PLC和手机之间存在有效的通信链接。可以通过使用PLC的通信模块(如以太网模块或Modbus通信模块)与手机上...
怎样通过KEPWAREOPC向PLC写入汉字?
汉字传输保存的时候都是数字的,在opc的服务器端写入ASCLL码,在s7-400读出,在上位机显示的时候使用字符变量,软件自动转换。无需人的干预。汉字传输保存的时候...
plc一个数字符占多少字节?
1字节。CHAR为在PLC中的类型,指计算机中使用的字母、数字和符号,包括:1、2、3、A、B、C、常见符号等,每个字符占用空间为1字节。1字节。CHAR为在PLC中的类型,...
plc中char怎么转int?
第一种办法:通过charAt(i),把字符串的每位变成char型,然后用当前字符减去字符0(temp_char-'0'),得到当前字符的int值。第二种办法:把字符再转成字符串,.....
plc中的pr是什?-懂得
PR指令,功能是16个字符的ASCII码顺序向输出模块输出,直到结束符NUL(00H
q系列plc怎么用自定义套接字?
首先要知道PLC的通讯协议,然后用串口编程线把PLC和电脑连接起来,打开串口调试助手,通过ASCII码对应的数据向PLC发送数据。串口调试助手是串口调试相关工具,有...