分享

使用OB8x诊断SIMATIC PLC(PN)

 弯丘 2019-06-23

SIMATIC S7-300和S7-400使用广泛,应用在各行各业的工业环境中。在调试和使用PLC和相关网络过程中,发生一些PLC或者网络故障是不可避免的。故障出现后,用户可能无法从上位机获取相关诊断信息,只有通过连接PG到PLC上,使用Step7在线的方式或者查看CPU的诊断信息来分析和判断故障原因,根据所提示的内容来解决现场问题。

但是通过上述方法,由于获取故障信息缓慢,从而不能快速有效的解决现场问题。西门子对于PLC和相关网络提供多种多样的诊断方式,包括使用故障组织块例如OB82,OB86,诊断功能块,例如SFC51,SFC13,SFB52等,使用RSE/WinCC/WinCC flexible方式,使用Web服务(集成在新的PN CPU中),使用已有的诊断方式,例如FB126,或者使用Maintenance station(维护站)等方式。其中使用 OB8x ( 359 KB ) 是最简单最基本的获取基本故障信息的方法,同时也可以配合诊断功能块进行详细故障的诊断。

SIMATIC PLC判断发生故障,会立即调用相应的故障组织块OB,如果PLC中没有加入相应的组织块PLC可能会停机,停机的目的就是保证生产过程处于安全状态。如果使用OB8x而没有编写任何诊断程序在用户程序中,PLC虽然不会因为发生故障而停机,但是这种方式并不可取。不能让产生故障的PLC仍无条件的运行,因为这种方式可能导致生产处于某种危险的状态。例如,当DO模块发生断线故障,相关的控制设备因此停止,但是DO可能并没有获取故障信息而停止输出,如果维护人员检查故障并做好接线后,DO会立刻输出控制信号导致相应的控制设备动作,这可能会造成现场人员或者设备的伤害。最好的方式之一就是通过OB8x获取故障信息,然后通过编程连锁该输出信号,使其输出为“0”,当维修完毕后,通过用户确认后(例如上位机界面中的操作按钮),然后再输出信号“1”。所以使用OB8x就是快速的获取故障信息,然后根据此类故障进行条件式的监视和处理,这样才是有效使用PLC的方法。

本文介绍如何使用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:)去检测一个故障事件,例如“断线”(wire break),“短路”(short circuit to M)等,参考图1 ET200S DO模块的参数设置。相关的诊断“故障”的方法参考上述连接文档。

使用该组织块诊断“维护”。对于PROFINET的接口模板,例如ET200S IM151-3 PN HF接口模块支持检测网络错误,包括同步丢失,端口连接状态,光纤信号质量等。这些事件就是维护中断事件,同样也需要通过组态使能检测网络错误参考图2,当这些事件出现后,接口模板的MAINT/FO灯亮。如果需要CPU获取这些维护信息,需要在CPU的PN-IO属性中设置使能OB82,参考图3 使能OB82/I/O fault task。

图1 ET200S DO模块的参数设置

图2 使能检测ET200S接口模块的网络错误

图3 使能OB82/I/O fault task

当它检测到维护事件时,它输出一个诊断中断请求给CPU(到来和离去事件)。于是操作系统调用OB82。如果没有下载OB82到PLC中,那么PLC会停机。

OB82 的局部变量中除了包含故障模块的逻辑地址OB82_MDL_ADDR,还包含故障模板四个BYTE 的诊断数据LB8,OB82_MDL_TYPE,LB10,LB11。具体信息可以查看Step7在线帮助OB82。

下面举一个维护的例子,组态参考图4 PLC硬件组态。例如ET200S FO接收光纤信号质量由于某种原因衰减,导致接收功率低于门槛值,从而产生MAINT信息。同时触发诊断中断OB82,PLC调用OB82来接收该中断信息,通过在OB82中编程,获取诊断信息。利用这些诊断信息可以显示在上位机上,以便用户快速的维护防止生产中断。

图4 PLC硬件组态

参考图2设置,当出现信号质量衰减时,通过Step7在线会出现“扳手”图标,指示需要维护,参考图5。

图5 绿色扳手指示端口状态

参考图3设置CPU的PNIO属性,然后在程序中加入OB82,进行编程。编程之前需要了解OB82临时变量的意义。

对于PROFINET,OB82临时变量的一些预留位,被赋予了一些新的含义。例如临时变量OB82_MDL_TYPE的Bit7表示Maintenance required,与维护状态绿色 相对应。临时变量OB82_RESERVED_2表述Maintenance demanded,与维护状态黄色 相对应。

例子程序如下:

A(

L #OB82_EV_CLASS

L B#16#39 //incoming event

==I

)

A(

L #OB82_MDL_ADDR

L W#16#1FF9 //diagnostics address for Port2 of IM151-3(Dec:8185)

==I

)

A(

O L 9.7 //Maintenance required

O #OB82_RESERVED_2 //Maintenance demand

)

S M 100.0 //to show maintenance information

A M 100.0

JCN next

CALL 'DT_DATE'

IN :=#OB82_DATE_TIME

RET_VAL:=MW120 //Date

CALL 'DT_TOD'

IN :=#OB82_DATE_TIME

RET_VAL:=MD124 //time

next: NOP 0

通过上述简单的程序实例,表明当在IM151-3接口模板的端口2出现光纤信号衰减而导致接收功率低于门槛值时,置位M100.0,同时获取故障事件时间和日期存储到MW120和MD124。这些变量可以编写在WinCC/WinCC flexible中进行显示,方便用户维护现场故障。对于其它端口或者其它分布式IO上的接口模板的端口诊断可以按照上述方式自行添加。

2, OB83诊断

OB83是插拔中断组织块。

对于PROFINET IO,OB83赋予了一些新的特点,对于S7 CPU31x-2PN/DP可以使用OB83来评估模块插拔中断。而对于PROFIBUS-DP系统中的S7-300则无法使用OB83。

在下列情况下CPU 操作系统调用OB83:

· 组态的模板插入/拔出之后。

· 在STEP 7 下修改了模板参数并在RUN 状态下装所作修改到CPU。

模板插入和拔出在RUN、STOP 和STARTUP 方式时每次组态的模板插入或拔出,就产生了插入/拔出中断(电源模板、CPU、适配模块和IM 不能在这种方式下移出)。

对于S7-300PLC不允许热插拔中央机架的模块。然而,存在一些特殊情况:

· S7 CPU31x-2PN/DP仅支持分布式IO设备插拔模板中断。

· S7 CPU IM151-7 DP和CPU IM151-8 PN支持中央机架IO的插拔(1块IO模板)。

如果没有遵守上述要求,例如在CPU IM151-8 PN的中央机架插拔2块IO模板。那么即使在CPU中加入了OB83,CPU也会停机,同时报告“Stop caused by I/O management”,只有这些故障消除才能启动CPU。所以在操作时必须遵守模板安装规范,防止不必要的停机。

当它检测到故障时,它输出一个插拔中断请求给CPU。于是操作系统调用OB83。如果没有下载OB83到PLC中,那么PLC会停机。具体相关变量信息可以查看Step7在线帮助OB83。

下面举一个模块更换的例子,假如一个DO模块损坏,然后替换一个新的模块,如果新的模块的类型与被替换的类型不一致,报告相应的错误。

例子程序如下:

A(

L #OB83_EV_CLASS

L B#16#38 //module insert

==I

)

A(

L #OB83_FLT_ID

L W#16#55 //Fault ID

==I

) //PROFINET IO submodule inserted, but does not match configured submodule

A(

L #OB83_MDL_TYPE

L W#16#8102

) //confirm again

A(

L #OB83_RESERVED_1

L B#16#C4

)

JCN next

L #OB83_MDL_ADDR

T MW 130 //read the address of the module

L #OB83_RACK_NUM

L 2#11111111111

AW

T MW 132 //determine the device number

next: NOP 0

通过上述简单的程序实例,表明当插入的实际模块与Step7组态的模块配置不相符时,可以获取该模板的所处位置的逻辑地址MW130和设备号MW132,参考图6 设备号和逻辑地址。也可以获取故障事件时间和日期存储到相应的变量中,参考相关OB82的编程方式。这些变量可以编写在WinCC/WinCC flexible中进行显示,方便用户维护现场故障。

图6 设备号和逻辑地址

3, OB86诊断

OB86是机架故障组织块。

操作系统在检测下列故障时会调用OB86:

·当中央扩展机架(非S7-300)故障。

·PROFIBUS-DP主站系统故障。

·分布式I/O 中(PROFINET IO/PROFIBUS DP)站故障。

·禁止一个站(PROFINET IO/PROFIBUS DP)使用SFC12”D_ACT_DP”模式4时。

·使能一个站(PROFINET IO/PROFIBUS DP)使用SFC12”D_ACT_DP”模式3时。

当CPU检测到故障时,发出中断请求给CPU,操作系统调用OB86。如果没有下载OB86到PLC中,那么PLC会停机。

下面举一个PN IO站丢失的例子,这是一种常见的故障,可能由于连接断开而导致某些IO站无法连接到IO控制器上,通过OB86的简单编程用户可以得到相应站的基本信息。

例子程序如下:

A(

L #OB86_EV_CLASS

L B#16#39 //incoming event

==I

)

A(

L #OB86_FLT_ID

L W#16#CB //PROFINET IO station failure/station return

==I

)

A(

L B#16#C4

L #OB86_RESERVED_1 //confirm again

)

JCN next

L LD 8

L 2#11111111111

AW

T MW 140 //determine the device number

L MD 10 //set a flag variable with initial value 16#1

SLD //shift to left with bits number of MW140

T MD 14

L DB1.DBD 0

OD

T DB1.DBD 0 //calculate device number into bit

L B#16#1

T MD 10 //set a flag variable with initial value 16#1

next: NOP 0

通过上述简单的程序实例,得出机架故障的分布式IO的设备号Device number,确定拿一个设备连接断开。当某一设备发生机架故障来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/WinCC flexible中进行显示,方便用户维护现场故障。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多