使用OB8x诊断SIMATIC PLCPNWord文档格式.docx
《使用OB8x诊断SIMATIC PLCPNWord文档格式.docx》由会员分享,可在线阅读,更多相关《使用OB8x诊断SIMATIC PLCPNWord文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
本文介绍如何使用OB82,OB83,以及OB86来判断现场故障,并作出相应的处理。
OB82为诊断中断组织块,相关的诊断报警例如“DO模板的DO信号断线”会使PLC调用OB82;
OB83为插拔中断组织块,当插拔机架上的模块时PLC会调用OB83;
OB86为机架故障组织块,当扩展机架丢失,分布式IO掉站时,PLC会调用OB86。
各个组织块的详细信息可以参看下面介绍。
上述组织块都具有20个字节的临时变量,对于用户在编程时不能占用和修改这些临时变量。
这些临时变量会由PLC在调用相应的故障组织块时自动生成,所以这些临时变量为只读属性,用户只需要读取这些临时变量的数值或者状态来判断哪里出现什么样的故障。
每一个故障组织块的临时变量随诊断功能的不同而不同,另外还可以根据相应故障组织块的临时变量OB8x_Date_Time得到故障出现的时间日期。
该时间虽然是调用相关OB8x的时间,但是也可以参考故障出现的大致时间。
1,OB82诊断
OB82是诊断中断组织块。
PLC的模板状态从严重程度上可以分为两类,一类表示“完好”,一类表示“故障”。
然而对于PROFINET模板其状态具有另外一种中间状态,该状态处于“完好”和“故障”之间,是一种临界状态,称为“维护”,利用该状态用户可以尽早的发现故障,尽快维护现场设备,可以有效的防止由于故障导致生产的停顿。
使用该组织块诊断“故障”。
首先要求PLC的模板具有诊断能力,然后通过组态使能相关诊断(Diagnostics:
)去检测一个故障事件,例如“断线”(wirebreak),“短路”(shortcircuittoM)等,参考图1ET200SDO模块的参数设置。
相关的诊断“故障”的方法参考上述连接文档。
使用该组织块诊断“维护”。
对于PROFINET的接口模板,例如ET200SIM151-3PNHF接口模块支持检测网络错误,包括同步丢失,端口连接状态,光纤信号质量等。
这些事件就是维护中断事件,同样也需要通过组态使能检测网络错误参考图2,当这些事件出现后,接口模板的MAINT/FO灯亮。
如果需要CPU获取这些维护信息,需要在CPU的PN-IO属性中设置使能OB82,参考图3使能OB82/I/Ofaulttask。
图1ET200SDO模块的参数设置
图2使能检测ET200S接口模块的网络错误
图3使能OB82/I/Ofaulttask
当它检测到维护事件时,它输出一个诊断中断请求给CPU(到来和离去事件)。
于是操作系统调用OB82。
如果没有下载OB82到PLC中,那么PLC会停机。
OB82的局部变量中除了包含故障模块的逻辑地址OB82_MDL_ADDR,还包含故障模板四个BYTE的诊断数据LB8,OB82_MDL_TYPE,LB10,LB11。
具体信息可以查看Step7在线帮助OB82。
下面举一个维护的例子,组态参考图4PLC硬件组态。
例如ET200SFO接收光纤信号质量由于某种原因衰减,导致接收功率低于门槛值,从而产生MAINT信息。
同时触发诊断中断OB82,PLC调用OB82来接收该中断信息,通过在OB82中编程,获取诊断信息。
利用这些诊断信息可以显示在上位机上,以便用户快速的维护防止生产中断。
图4PLC硬件组态
参考图2设置,当出现信号质量衰减时,通过Step7在线会出现“扳手”图标,指示需要维护,参考图5。
图5绿色扳手指示端口状态
参考图3设置CPU的PNIO属性,然后在程序中加入OB82,进行编程。
编程之前需要了解OB82临时变量的意义。
对于PROFINET,OB82临时变量的一些预留位,被赋予了一些新的含义。
例如临时变量OB82_MDL_TYPE的Bit7表示Maintenancerequired,与维护状态绿色相对应。
临时变量OB82_RESERVED_2表述Maintenancedemanded,与维护状态黄色相对应。
例子程序如下:
A(
L#OB82_EV_CLASS
LB#16#39//incomingevent
==I
)
L#OB82_MDL_ADDR
LW#16#1FF9//diagnosticsaddressforPort2ofIM151-3(Dec:
8185)
OL9.7//Maintenancerequired
O#OB82_RESERVED_2//Maintenancedemand
SM100.0//toshowmaintenanceinformation
AM100.0
JCNnext
CALL"
DT_DATE"
IN:
=#OB82_DATE_TIME
RET_VAL:
=MW120//Date
DT_TOD"
=MD124//time
next:
NOP0
通过上述简单的程序实例,表明当在IM151-3接口模板的端口2出现光纤信号衰减而导致接收功率低于门槛值时,置位M100.0,同时获取故障事件时间和日期存储到MW120和MD124。
这些变量可以编写在WinCC/WinCCflexible中进行显示,方便用户维护现场故障。
对于其它端口或者其它分布式IO上的接口模板的端口诊断可以按照上述方式自行添加。
2,OB83诊断
OB83是插拔中断组织块。
对于PROFINETIO,OB83赋予了一些新的特点,对于S7CPU31x-2PN/DP可以使用OB83来评估模块插拔中断。
而对于PROFIBUS-DP系统中的S7-300则无法使用OB83。
在下列情况下CPU操作系统调用OB83:
•组态的模板插入/拔出之后。
•在STEP7下修改了模板参数并在RUN状态下装所作修改到CPU。
模板插入和拔出在RUN、STOP和STARTUP方式时每次组态的模板插入或拔出,就产生了插入/拔出中断(电源模板、CPU、适配模块和IM不能在这种方式下移出)。
对于S7-300PLC不允许热插拔中央机架的模块。
然而,存在一些特殊情况:
•S7CPU31x-2PN/DP仅支持分布式IO设备插拔模板中断。
•S7CPUIM151-7DP和CPUIM151-8PN支持中央机架IO的插拔(1块IO模板)。
如果没有遵守上述要求,例如在CPUIM151-8PN的中央机架插拔2块IO模板。
那么即使在CPU中加入了OB83,CPU也会停机,同时报告“StopcausedbyI/Omanagement”,只有这些故障消除才能启动CPU。
所以在操作时必须遵守模板安装规范,防止不必要的停机。
当它检测到故障时,它输出一个插拔中断请求给CPU。
于是操作系统调用OB83。
如果没有下载OB83到PLC中,那么PLC会停机。
具体相关变量信息可以查看Step7在线帮助OB83。
下面举一个模块更换的例子,假如一个DO模块损坏,然后替换一个新的模块,如果新的模块的类型与被替换的类型不一致,报告相应的错误。
L#OB83_EV_CLASS
LB#16#38//moduleinsert
L#OB83_FLT_ID
LW#16#55//FaultID
)//PROFINETIOsubmoduleinserted,butdoesnotmatchconfiguredsubmodule
L#OB83_MDL_TYPE
LW#16#8102
)//confirmagain
L#OB83_RESERVED_1
LB#16#C4
L#OB83_MDL_ADDR
TMW130//readtheaddressofthemodule
L#OB83_RACK_NUM
L2#11111111111
AW
TMW132//determinethedevicenumber
通过上述简单的程序实例,表明当插入的实际模块与Step7组态的模块配置不相符时,可以获取该模板的所处位置的逻辑地址MW130和设备号MW132,参考图6设备号和逻辑地址。
也可以获取故障事件时间和日期存储到相应的变量中,参考相关OB82的编程方式。
图6设备号和逻辑地址
3,OB86诊断
OB86是机架故障组织块。
操作系统在检测下列故障时会调用OB86:
•当中央扩展机架(非S7-300)故障。
•PROFIBUS-DP主站系统故障。
•分布式I/O中(PROFINETIO/PROFIBUSDP)站故障。
•禁止一个站(PROFINETIO/PROFIBUSDP)使用SFC12”D_ACT_DP”模式4时。
•使能一个站(PROFINETIO/PROFIBUSDP)使用SFC12”D_ACT_DP”模式3时。
当CPU检测到故障时,发出中断请求给CPU,操作系统调用OB86。
如果没有下载OB86到PLC中,那么PLC会停机。
下面举一个PNIO站丢失的例子,这是一种常见的故障,可能由于连接断开而导致某些IO站无法连接到IO控制器上,通过OB86的简单编程用户可以得到相应站的基本信息。
L#OB86_EV_CLASS
L#OB86_FLT_ID
LW#16#CB//PROFINETIOstationfailure/stationreturn
L#OB86_RESERVED_1//confirmagain
LLD8
TMW140//determinethedevicenumber
LMD10//setaflagvariablewithinitialvalue16#1
SLD//shifttoleftwithbitsnumberofMW140
TMD14
LDB1.DBD0
OD
TDB1.DBD0//calculatedevicenumberintobit
LB#16#1
TMD10//setaflagvariablewithinitialvalue16#1
通过上述简单的程序实例,得出机架故障的分布式IO的设备号Devicenumber,确定拿一个设备连接断开。
当某一设备发生机架故障来Incoming事件时,得出该设备号码。
但是如果IO设备串联在一起,前面的设备丢站导致后面的设备也丢失,简单编程获取站号只有会有一个站的信息,无法表示多个设备掉站。
通过编程使用左移指令左移位bit的方式,但是需要给MD10设置初始值16#1,目的就是保证末位为1,这样偏移后可以知道该位1的移动位置,然后通过站号存储地址DB1.DBD0进行“或”运算,这样DB1.DBD0相应的位就置1,从而当多个设备掉站DB1.DBD0相应的位会置1。
例如DB1.DBD0低字节为2#00000110时,表示设备号1(bit1)和2(Bit2)掉站,Bit0位0保持不变。
这样最多可以获取63个设备掉站信息(63设备编号需要<
64),对于一般应用是足够的。
最后还要给MD10设置初始值,以保证最后一位Bit0为1。
这些Bit变量可以编写在WinCC/WinCCflexible中进行显示,方便用户维护现场故障。
关键词
PLC,诊断,故障,维护,OB82,OB83,OB86,PROFINET