[西门子工控]西门子OB块的作用 查看:7850  回复:7

西门子OB块的作用


OB1(Free Cycle)顺序扫描

OB10~OB17(Time-Of-Day Interrupt)时间-日期中断

OB20~OB23(Time-Delay Interrupt)时间延迟中断

OB30~OB38(Cyclic Interrupt)周期性中断

OB40~OB47(Hardware Interrupt)硬件中断

OB55(Status Interrupt)状态中断

OB56(Update Interrupt)升级中断

OB57 (Manufacturer Interrupt)厂商专用中断

OB61~OB64(Synchronous Cycle Interrupt)异步周期中断

OB70(I/O Redundancy Error)I/O冗余错误

OB72(CPU Redundancy Error)CPU冗余错误

OB73(Communication Error)通信错误

OB80(Time Error)时间错误

OB81(Power Supply Error)电源错误

OB82 (Diagnostic Interrupt)诊断中断

OB83(Insert/Remove Interrupt)插/拔中断

OB84(CPU Hardware Fault)CPU硬件错误

OB85(Priority Class Error)优先级错误

OB86(Rack Failure)机架错误

OB87(Communication Error)通信错误

OB88 (Processing Interrupt)过程错误

OB90(Background OB)背景OB

OB100(Warm Restart)暖启动

OB101(Hot Restart)热启动

OB102(Cold Restart冷启动

OB121(Programming Error)编程错误

OB122(I/O Access Error)I/O存储错误

注:OB55,OB56,OB57,OB61,OB62,OB63,OB64,OB81,OB84,OB87,OB88,OB90是NOP(空操作)用户不需要用户不需要修改调用空操作的程序。

CPU故障,模块信息显示I/O访问错误,读取

核心提示:CPU故障,模块信息显示I/O访问错误,读取 CPU故障,模块信息显示:I/O访问错误,读取。程序已经下载的PLC中,SF指示灯始终红灯,检测模块信息如上,这是什么意思,怎样解决? 


CPU故障,模块信息显示:I/O访问错误,读取。
程序已经下载的PLC中,SF指示灯始终红灯,检测模块信息如上,
这是什么意思,怎样解决?

 

最佳答案

1、用hardware configuration的硬件诊断诊断模块是否在线。
2、如果不在线,检查硬件连接。
3、如果在线,检查软件配置,比如侧面插板(A,B,C,D)的配置和step 7中硬件配置一样;IO点的配置情况是否和程序中的访问变量一致。
4、外部连线也顺便检查一下,看看有没有断线,或短路。
如果还不行的话,这种情况常见于间接寻址,比如,寻址到了不存在的地址,就发生了地址越界,你应该多察看自己的程序。所以你要仔细检查一下程序,并编译看否有错误,删除那些有问题的功能(FC)。

如果还不行以下供参考:
1.用通信电缆连接S7-300CPU,再使用SIMATIC Manager管理器打开项目文件,与CPU“在线(Online)”后,打开“Module Information”窗口,查看“diagnostic Buffer”(即CPU的诊断缓冲区)标签内的历史记录。再仔细分析错误原因。可初步判断是硬件故障还是软件故障。
2.重新下载一次硬件组态和程序,排除硬件组态和软件程序问题。
3.从软件编程角度来判断故障,如下载错误处理组织块:OB81(电源故障),OB82(诊断中断)、OB83(插入/取出模块中断)、OB86(机架故障或分布式I/O的站故障)、OB87(通信错误)、OB121(编程错误)、OB122(I/O访问错误),将这些组织块依次下载到CPU中使之出现错误进入STOP状态。
4.从硬件安装连接来判断故障,如:1.检查供电源是否正常;2.检查一下背板总线连接是否正常,3.检查各模块外部连接是否有异常;4.检查各模块安装是否有松动,周围是否有振动。5.机架上是否有模块已经损坏。


Plcsim 模拟IO访问故障 OB122组织块

假设在OB1 中用 如下指令

T PQW20 实际在组态的时候就没有QW20 这个地址 所以会显示访问IO 错误

我在OB122 中设置一个变量 进入一次 加1

可以看到每个扫描周期都要调用一次OB122 变量表MW16的值在不断增大。

为什么每个扫描周期 都要调用。 因为 每个扫描周期 分为3个步骤,

(1)录入输入状态 (2)顺序执行指令 (3)刷新输出 输出只在本扫描周期内锁存。


机柜上开机出错OB122,PLC上开电源正常

我有一个应用系统,CPU为S7-313C-2DP,IO只有CPU自带的,无附加其他模块。如果从机柜上开机(PLC上电源开关开着),有30%的几率出错,SF灯红,BF灯闪,DC5V、RUN灯绿,其余灭。出错后关闭PLC上电源,然后再开电源,也会正常工作。

出错时检查PLC,得到的报警记录如下:
事件 10 / 10:  事件 ID 16# 2942
读取时发生 I/O 访问错误
P 区域,字访问, 访问地址:   102
所需的 OB:I/O 访问错误 OB (OB122)
优先等级: 1
外部错误, 进入的事件
16:00:02.368  2014-04-28
(编码: 16# 2942  017A  0020  0066  0000  0000)

经查OB122模块是空的,是否该写点什么东西?

问题补充:
看了两位的分析,特别是左传先生的分析,很受启发。本站通过DP总线连有一RFID读码器,很可能是PLC的初始化过程太快,读码器尚未完成初始化,这时PLC进行读写才出错。我想:
1、在PLC的初始化过程中,进行读写前,增加一个延时程序,请问在何处加?
2、如果出现错误,PLC自动执行冷启动,重新初始化一遍,请问在何处加什么程序?

最佳答案

OB122模块不需要写东西。
你这个打开电源,SF灯红,BF灯闪,DC5V、RUN灯绿,其余灭。过一会应该能正常启动起来的。刚开机,分站系统需要一个过程启动,CPU也需要一个过程去反映。

如果,过一会还是这个状态,出错后关闭PLC上电源,然后再开电源,也会正常工作。
应该就是你的CPU的硬件问题,可以再OB100里面,编写诊断故障不停机的程序来避免这种情况发生。

提问者对于答案的评价:
虽未最终解决,也给了我很大启发


S7-300 OB100/OB101/OB102组织块总结

OB100暖启动,OB101热启动,OB102冷启动。
    暖启动(完全再启动):完全再启动的启动类型,启动时过程映像和不保持的标志存储器、定时器及计数器被清除,保持的标志存储器、定时器和计数器以及数据块的当前值保持(仅当有后备电池,如果使用EPROM 并且CPU的保持特性已赋参数时S7-300甚至没有后备电池)。CPU会自动调用OB100一次,然后循环程序OB1开始执行。 


    热启动(再启动):只有S7-400才能用,再启动的启动类型,在启动时所有数据(标志存储器、定时器、计数器、过程映像及数据块的当前值)被保持。CPU会自动调用OB101一次,然后程序从断点处(断电, CPU STOP) 恢复执行。这个“剩余循环”执行完后,循环程序OB1开始执行。 


    冷启动:CPU318-2和 417-4 还具有冷启动型的启动方式。针对电源故障可以定义这种启动方式。它是通过硬件组态时的CPU参数来设置。冷启动时,所有过程映像和标志存储器、定时器和计数器被清除(甚至保持的!),而且数据块的当前值被装载存储器的当前值(既原来下装到CPU的数据块)覆盖。 CPU会自动调用OB102一次,然后循环程序OB1开始执行。
    
另外从西门子相关文档做出一下描述:

    1、通信故障中断组织块OB87:用于处理MPI GD通信及时钟同步故障,事件出现时,CPU自动调用OB87,并报错(SF),如果程序中没有创建OB87,PLC也不会进入停止模式。
    程序加入OB87,一旦PLC出现通信故障,就中断对OB1的扫描,转为执行OB87。除了特别需要(如通信故障时执行什么动作),一般不用编程,只加入空指令就好了。


    2、启动中断组织块OB100-OB102;用于处理CPU的启动事件。暖启动CPU 调用OB100,热启动调用OB101(不适合S7-300和S7-400H),暖启动CPU调用OB102。暖/热---冷
    温度越低CPU启动时清除存储器中的数据越多。
    CPU上电或重启时调用0B100-OB102。然后才开始执行主循环OB1.
    除了特别需要(如PLC上电执行什么动作后或初始化后才执行OB1)外,一般不用编程,只加入空指令就好了,


    3、类似的中断组织块还有,OB80 处理时间故障 OB 82诊断中断
    OB83 84 85 86 88 90 OB121 122 这些块要是不加上去,PLC
    出现问题会停机,一般都是加空的块进行,可防止PLC出现各种问题,发生停机的现像
        
 
   对此问题做还补充如下:
    1、数据保持的问题:断电保持可以在CPU属性中设置可断电保持的存贮区域(M区、T、C区都是可以断电保持的)。这么做热、暖启动都不会清除,冷启动我没试过。OB100、OB101、OB102中都不用编程,空的就可以。
    2、OB87 、100、101、102等以上所述中断组织块,不用编程,只要有这些块就行,CPU出现不同错误就会触发相应中断组织块并报错。如果没有这些相应的块,CPU可能会停机并报错,而加入这些块可防止CPU出错停机。像OB121,当出现编程出错时会调用并报错,加入空的OB121就不会停机了。
    3、S7-300系列和S7-400H型PLC没有热启动功能,所以OB101不适合S7-300系列和S7-400H型PLC.多数300PLC只支持暖启动。
   
    OB100的描述
    当对CPU进入Warm Restart操作时,操作系统就会自动调用OB100.
    用户对OB100进行适当的编程可以让CPU在暖启动时完成特定的设置任务
\

    OB87的描述
    当发生任何因通信出错事件时CPU的操作系统就会自动调用OB87.
    如果OB87没有被编程,CPU则不会切换到STOP模式。
    用户可以通过SFCs39-42来屏蔽、延时或重新激活通信出错中断组织块。




I/O访问错误组织块(OB122)的功能是什么?

 STEP7指令访问有故障的模块。例如,直接访问I/O错误(模块损坏或找不到),或者访问了一个CPU不能识别的I/O地址,此时CPU的操作系统将会调用OB122。
    OB122的局域变量提供了错误代码、S7-400出错的块的类型、出现错误的存储器地址、存储区与访问类型等信息。错误代码B#16#44和B#16#45表示错误相当严重。
    例如,可能是因为访问的模块不存在,导致多次访问出错,这时应采取停机措施。
    对于某些同步错误,可以调用系统功能SFC44,为输入模块提供一个替代值来代替错误值,以使程序能继续执行。
    例: 建立一个项目,在OB1中编写一段错误的指令如图4-10所示(访问错误的I/O地址)。
    可以使用仿真软件模拟运行程序,CPU上的红色SF灯亮,绿色的RUN灯熄灭,橙色的STOP灯亮,PLC切换到停止状态。
    在SIMATIC管理器中通过菜单命令“PLC”    “Diagnostics/Settings”“Module Information”,打开“模块信息”对话框,选择“诊断缓冲区”选项卡,可以看到红色的错误标志,关于诊断缓冲区的详细内容将在后面进行介绍。
    返回SIMATIC管理器,生成OB1221(可以是一个空的模块),下载后重新运行,可以看到用I0.0调用FC2时不会停机,但是SF灯会亮。

image.png



由编程错误引起的 STOP 模式(OB 没有装载或不能装载,或没有 FRB

调试一个PLC程序的时候,下载之后就SFC灯亮,看诊断是由编程错误引起的 STOP 模式(OB 没有装载或不能装载,或没有 FRB),打开帮助,发现如下解释
原因:
存在一个编程错误,但没有加载或还未激活相应的OB (OB121)或FRB。
如何纠正或避免出错: 
加载一个OB121或激活一个FRB,以响应编程错误或防止出错。
FRB = 功能请求块,与M7有关
我在程序的块中插入了一个OB121,再下载下去就正常了,敢问大家,谁知道这是什么原因呀,小弟搞不懂。谢谢,详细点。

image.png

答:下载之后就SFC灯亮?
1、是SF灯亮。从上传的图片来看是你的FC 300功能块的问题。
2、检查FC 300中是否有读取变量地址时超出了定义的长度。例如DB100定义了20个字,但在程序中却引用了DW30..
3、如果系统中组态了DP从站,检查引用DP从站是否超出了超出了硬件组态中所定义的地址。
下载OB121,CPU不再停机,并不意味你解决了问题。
CPU发生故障时,OS就会触发中断,然后系统自动调用中断例程。你上述故障触发的是OB121。OB121就是相关运行错误处理的中断例程,空的OB,即意味不做任何处理。所以你下载了OB121,只是给了CPU在出现故障时有一个出口,从而避免了停机,但你程序里的错误陷阱依旧存在。

当系统出现故障时CPU会进入相应的中断(寻找OB)处理,当找不到相应的OB时系统将停机,因此下载相应的空的OB可以防止CPU停机,进一步来说如果您对OB块进行编程,此时CPU将执行OB的程序,至于里面具体是什么程序取决于项目的具体使用情况。

OB0~OB39是定时中断扫描,OB1是循环扫描

定时中断扫描的优势在于固定扫描周期,而OB1循环扫描的方式是CPU一直在扫描,那么优劣不言而喻。CPU的负荷自然就不同了。

至于OB35(100ms),可以在OB35中周期的调用PID模块和流量累计、采样周期等,也可以在OB35中调用周期的数据发送指令,完成数据发送功能,OB35是按设定的循环周期运行,用于准确执行周期程序。可以把程序放到OB1中,但是这样就增加了程序运行的时间,并且不能满足一些程序需要周期运行的要求。这个时候就会用到OB35了。


当前第1页/总1页
ICP备案证书号: 苏ICP备14003016-2号