现以CPU315(6ES7315-2AG10-0AB0),STEP7 V5.3为例介绍常用OB的使用方法,这些OB包括:
程序循环组织块(OB1);
日期时间中断组织块(以OB10为例);
延时中断组织块(以OB20为例);
循环中断组织块(以OB35为例);
硬件中断组织块(以OB40为例);
诊断中断组织块(以OB82为例);
机架故障组织块(以OB86为例);
起动的类型(CPU300以OB100为例,CPU400以OB101、OB102为例);
编程故障组织块(以OB121为例);
I/O访问故障组织块(以OB122为例)。
还有其他的OB,如:I/O冗余故障OB(OB70),CPU冗余故障OB(OB72),通信冗余故障OB(OB73),请咨询CPU400H系统工程师,这里不做说明。
1.程序循环组织块(OB1)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB1_Example”,然后插入“CPU 315-2DP”,如图6-16所示。
图6-16 硬件组态
硬件组态完成后,保存编译。
(2)OB1程序执行
OB1的程序循环执行,用STEP7可以时时监控程序的运行,具体程序参见OB_Example/OB1_Example。OB1的STL程序(可转成梯形图)为:
将OB1程序和硬件组态下载到CPU中。其中,MB100为时钟存储器,设置方法为进入硬件组态,双击“CPU315-2DP”,选择“Cycle/Clock Memory”,具体设置画面如图6-17所示。
图6-17 设置画面
STEP7时时监控画面如图6-18所示。
图6-18 STEP7时时监控画面
2.日期时间中断组织块(OB10)
(1)硬件组态在“OB_Example”项目中插入一S7300站,命名为“OB10_Example”,然后插入“CPU 315-2DP”,如图6-19所示。
图6-19 硬件组态
双击“CPU 315-2DP”,选择“Time-of-Day Interrupts”选项,选中“Active”,同时设置“Execution”选项,本例选择“Every minute”,“Execution”选项包括:
None:不使用;
Once:只执行一次;
Every minute:每分钟执行一次;
Every hour:每小时执行一次;
Every week:每周执行一次;
Every month:每月执行一次;
End of month:月末执行一次;
Every year:每年执行一次。
设置开始执行的日期(Start date)和时间(Time of day),设置完成后的画面如图6-20所示。
图6-20 设置完成后的画面
硬件组态完成后,保存编译。
(2)OB10程序执行
OB10程序按照设定的时间执行,使用STEP7不能时时监控程序的运行,可用Variable Table监控实时数据变化。具体程序参见OB_Example/OB10_Example。
在OB10_Example程序的Blocks中插入组织块OB10,如图6-21所示。
图6-21 插入组织块OB10
然后打开组织块OB10编写程序,OB10的STL程序(可转成梯形图)为:
将OB10程序和硬件组态下载到CPU中。
在OB10_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0并点击“Monitor Variable”按钮,设置画面如图6-22所示。
此时可以监控MW0每分钟加1。
图6-22 设置画面
3.延时中断组织块(OB20)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB20_Example”,然后插入“CPU 315-2DP”,如图6-23所示。
图6-23 硬件组态
双击“CPU 315-2DP”,选择“Interrupts”选项,可以看到CPU支持OB20,组态完的画面如图6-24所示。
图6-24 组态完的画面
硬件组态完成后,保存编译。
图6-25 插入组织块OB20
(2)OB20程序执行
每一次OB20的程序执行,必须调用SFC32(SRT_DINT),延迟时间在SFC的输入参数中给定,同时给定OB号,调用SFC32且设定的时间延迟到后,执行OB程序,如果再次执行OB程序,需要再次调用SFC32。如果在延迟时间未到之前想取消程序的执行,可以调用SFC33(CAN_DINT),同时可以使用SFC34(QRY_DINT)取得延迟中断的状态,具体的SFC32/33/34的调用方法可参考在线帮助,STEP7不能时时监控程序的运行,可用Variable Table监控实时数据变化。具体程序参见OB_Example/OB20_Example。在OB20_Example程序的Blocks中插入组织块OB20,如图6-25所示。
然后打开组织块OB20编写程序,OB20的STL程序(可转成梯形图)为:
打开组织块OB1编写程序,OB1的STL程序(可转成梯形图)为:
将OB1、OB20和硬件组态下载到CPU中。在OB20_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0、M20.0、M20.1、MW18并点击“Monitor Variable”按钮,设置画面如图6-26所示。
此时可以监控MW0的变化,将M20.0置为true,10s后延迟时间到,MW0加1,再将M20.0置为true,10s后延迟时间到,MW0再加1。如果当延迟时间未到,此时将M20.1置为true,那么此次时间延迟中断被取消,MW0不会加1,每次执行的状态都可以从MW18中读出,具体状态的含义请参阅SFC34(QRY_DINT)的在线帮助。
图6-26 设置画面
4.循环中断组织块(OB35)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB35_Exam-ple”,然后插入“CPU 315-2DP”,参见OB10硬件组态,双击“CPU315-2DP”,选择“Cyclic Interrupts”选项,修改OB35的执行周期(Exe-cution(ms),范围是1~60000ms),本例设为1000ms,如图6-27所示。
硬件组态完成后,保存编译。
(2)OB35程序执行
OB35程序按照设定的执行周期循环执行,使用STEP7不能时时监控程序的运行,可用Variable Table监控实时数据变化。具体程序参见OB_Example/OB35_Example。
在OB35_Example程序的Blocks中插入组织块OB35,如图6-28所示。
图6-27 硬件组态
然后打开组织块OB35编写程序,OB35的STL程序(可转成梯形图)为:
将OB351和硬件组态下载到CPU中。在OB35_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0并点击“Monitor Variable”按钮,设置画面如图6-29所示。
此时可以监控MW0每秒钟加1。可以在OB35中周期性的调用PID模块(FB41/42/43),完成PID调节,也可以OB35中调用周期的数据发送指令,完成数据发送功能,等等,总之,OB35是按设定的循环周期执行。
图6-28 插入组织块OB35
5.硬件中断组织块(OB40)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB40_Exam-ple”,然后插入“CPU 315-2DP”和一块具有中断功能的数字量输入模板“6ES7321-7BH01-0AB0”。
双击“6ES7321-7BH01-0AB0”模板,选择“Inputs”选项,同时选中“Hardware interrupt”和“Trigger for Hardware Interrupt”选项,如图6-30所示。
图6-29 设置画面
图6-30 硬件组态
点击“OK”,然后双击“CPU315-2DP”,选择“Inter-rupts”选项,可以看到CPU支持OB40,如图6-31所示。
硬件组态完成后,保存编译。
(2)OB40程序执行
OB40程序在硬件组态中设定的硬件中断发生后执行,当OB40执行时可以通过它的临时变量OB40_MDL_ADDR读出产生硬件中断的模板的逻辑地址,通过OB40_POINT_ADDR可以读出产生硬件中断的通道,临时变量的具体含义请参阅在线帮助。STEP7不能时时监控程序的运行,可用Variable Table监控实时数据变化。具体程序参见OB_Example/OB40_Exam-ple。
在OB40_Example程序的Blocks中插入组织块OB40,如图6-32所示。
图6-31 组态完成画面
图6-32 插入组织块OB40
然后打开组织块OB40编写程序,OB40的STL程序(可转成梯形图)为:
将OB40和硬件组态下载到CPU中。
在OB40_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0、MW10、MD12并点击“Monitor Variable”按钮,设置画面如图6-33所示。
此时可以监控MW0的变化,每当I0.1有上升沿脉冲产生MW0加1,MW10为硬件中断模板的逻辑地址,本例中为0,MD12为中断产生的通道号,注意此值以十六进制表示。
6.诊断中断组织块(OB82)
结合模板的断线检测应用和SFC51来说明诊断中断组织块OB82的使用方法。
图6-33 设置画面
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB82_Example”,然后插入“CPU 315-2DP”和一块具有中断功能的模拟量输入模板“6ES7331-7KF02-0AB0”,配置“SM331-7KF02-0AB0”模块的“Inputs”选项,选择0-1通道组为2线制电流(2DMU),其他通道组为电压,并注意模板的量程卡与设置的相同。选中“Enable”框中的“Diagnostic Interrupt”选项,选中“Diagnostics”选项中的0-1通道组中的“Group Diagnostics”和“with Check for Wire Break”选项,配置完成的画面如图6-34所示。
图6-34 配置完成的画面
点击“OK”,然后双击“CPU315-2DP”,选择Interrupts选项,可以看到CPU支持OB82,如图6-35所示。
硬件组态完成后,保存编译。
(2)OB82程序执行
OB82程序在硬件组态中设定的诊断中断发生后执行,当OB82执行时可以通过它的临时变量OB82_MDL_ADDR读出产生诊断中断的模板的逻辑地址,OB82其他临时变量的具体含义请参阅OB82的在线帮助。STEP7不能时时监控程序的运行。接下来完成诊断程序。
图6-35 组态完成画面
1)在OB_Example/OB82_Example/CPU315-2DP/S7 Program(7)/Sources下面插入STL Source文件STL Source(1)。
2)打开空的OB1程序,然后选中Libraries→Standard Libraries→System Function Blocks→SFC51 RDSYSST DIAGNSTC,按“F1”键,出现SFC51的在线帮助信息。可具体读一下信息的内容,然后在信息的最底部点击“Example for module diagnostics with the SFC 51”,然后点击“STL Source File”,选中全部STL Source源程序复制到STL Source(1)中,存盘编译此源程序,提示没有错误。
3)在Blocks中生成OB1、OB82、DB13和SFC51。
4)打开OB82的程序并做简单修改,将19和20行复制到go:后面并保存,具体变化如图6-36所示。
图6-36 具体变化
5)将整个S7-300站的程序和硬件组态下载到CPU中。下载完成后,将CPU的模式选择开关切换到RUN位置,此时CPU“RUN”灯亮、“SF”灯亮,SM331的“SF”灯亮。同时,查看CPU的诊断缓冲区Hardware→Online,双击CPU,选择“Diagnostic Buffer”,可获得相应的故障信息。
6)打开数据块DB13,在线监控,具体画面如图6-37所示。
图6-37 数据块DB13的在线监控画面(www.xing528.com)
因为通道断线是一个到来事件,所以诊断信息存储到COME数组中,具体每一字节的含义参见S7-300的硬件手册中B Diagnostics Data of Signal Modules部分的详细说明,S7-300的硬件手册可以从西门子网站下载,下载网址为:http://support.automation.siemens.com/WW/view/en/8859629。
7)本例中COME数组字节的含义解释如下:
COME[1]=16#0D 表示通道错误,外部故障和模板问题;
COME[2]=16#15 表示此段信息为模拟量模板的通道信息;
COME[3]=16#00 表示CPU处于运行状态,无字节2中标示的故障信息;
COME[4]=16#00 表示无字节3中标示的故障信息;COME[5]=16#71表示模拟量输入;
COME[6]=16#08 表示模板的每个通道有8个诊断位;COME[7]=16#08表示模板的通道数;
COME[8]=16#03 表示0通道错误和1通道错误,其他通道正常;
COME[9]=16#10 表示0通道断线;
COME[10]=16#10 表示1通道断线;
COME[11]=16#00 表示2通道正常,其他通道与2通道相同。
8)如何读取其他信息的诊断可详细参考OB82、SFC51和S7-300的硬件手册中B/Diagnos-tics Data of Signal Modules部分的说明。
7.机架故障组织块(OB86)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB86_Example”,然后插入“CPU 315-2DP”,选择DP作为主站,在DP主站下面添加一ET200M从站,并在从站中插入一模拟量模块SM331(6ES7331-7KF02-0AB0),同时注意CPU的DP主站地址和ET200M从站地址不能相同,并且ET200M的站地址必须和ET200M上的实际地址一致,组态完成后的画面如图6-38所示。
然后双击“CPU315-2DP”,选择“Interrupts”选项,可以看到CPU支持OB86,画面如图6-39所示。
硬件组态完成后,保存编译。
(2)OB86程序执行
图6-38 组态完成后的画面
图6-39 组态完成画面
OB86程序在通信发生问题后或者访问不到配置的机架或站时执行,此时程序还可能需要调用OB82和OB122等组织块,当OB86执行时可以通过它的临时变量读出产生故障的错误代码和事件类型,通过它们的组合可以得出具体的错误信息,这些信息可以通过OB86的在线帮助查到,同时也可以读到产生错误的模块地址和机架的信息,临时变量的具体含义请参阅在线帮助。STEP7不能时时监控程序的运行,可用Variable Table监控实时数据变化。具体程序参见OB_Example/OB86_Example。
图6-40 插入组织块OB86
在OB86_Example程序的Blocks中插入组织块OB86,如图6-40所示。
然后打开组织块OB86编写程序,OB86的STL程序(可转成梯形图)为:
注意:将OB86的临时变量OB86_RACKS_FLTD Array[0..31]改为OB86_Z23 DWORD。将OB86和硬件组态下载到CPU。在OB86_Example程序的Blocks中插入Variable Table,然后打开,填入地址“MB0、MB1、MW2、MD4”并点击“Monitor Variable”按钮,设置画面如图6-41所示。
此时可以读到MB0、MB1为16#39和16#C4,可以通过它们的组合得出主站逻辑地址为2047的站有通信错误,出现错误的从站地址为3。更多的信息读取请参阅OB86的在线帮助。
图6-41 设置画面
8.起动的类型(OB100)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB100_Example”,然后插入“CPU 315-2DP”,参见OB10硬件组态。
(2)OB100程序执行
OB100程序在CPU执行Warm Re-start时执行,且只执行一次,可用于变量的初始化,用STEP不能时时监控程序运行,可用Variable Table监控数据变化。具体程序参见OB_Example/OB100_Example。在OB100_Example程序的Blocks中插入组织块OB100,如图6-42所示。
图6-42 插入组织块OB100
然后打开组织块OB100编写程序,OB100的STL程序(可转成梯形图)为:
在OB100_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0并点击“Monitor Variable”按钮,设置画面如图6-43所示。
此时可以监控MW0为123,如果修改MW0的值为0,则MW0不会再被赋值为123,只有当CPU再次执行Warm Restart(重新上电或者从Stop切换到Run状态)后才会被赋值。
9.编程故障组织块(OB121)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB121_Example”,然后插入“CPU 315-2DP”,参见OB10硬件组态。
图6-43 设置画面
(2)OB121程序执行
OB121程序在CPU程序执行错误时执行,此错误不包括用户程序的逻辑错误和功能错误等,例如当CPU调用一未下载到CPU中的程序块,CPU会调用OB121,通过临时变量OB121_BLK_TYPE可以得出出现错误的程序块。使用STEP7不能时时监控程序的运行,可用Variable Table监控数据变化。具体程序参见OB_Example/OB121_Example。
1)在OB121_Example程序的Blocks中插入组织块OB121,然后打开组织块OB121编写程序。OB121的STL程序(可转成梯形图)为:
2)在OB121_Example程序的Blocks中插入FC1,然后打开FC1编写程序。FC1的STL程序(可转成梯形图)为:
先将硬件组态和OB1下载到CPU中,此时CPU能正常运行。在OB121_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0和M10.0并点击“Monitor Variable”按钮,程序运行正常,将M10.0置为true,CPU报错并停机,查看CPU的诊断缓冲区信息,发现为编程错误,将OB121下载到CPU中,再将M10.0置为true,CPU会报错误但不停机,MW0立刻为16#88,查看OB121的在线帮助,16#88表示为OB程序错误,检查发现FC1未下载。设置画面如图6-44所示。
图6-44 设置画面
下载FC1后再将M10.0置为true,CPU不会再报错,程序也不会再调用OB121。
10.I/O访问故障组织块(OB122)
(1)硬件组态
在“OB_Example”项目中插入一S7300站,命名为“OB122_Example”,然后插入“CPU315-2DP”和一块模拟量输入模板“6ES7331-7KF02-0AB0”,配置“SM331-7KF02-0AB0”模块的“Inputs”选项,选择所有通道组为电压类型,注意模板的量程卡与设置的相同。模拟量的逻辑输入地址为256...271,配置完成的画面如图6-45所示。
硬件组态完成后,保存编译。
(2)OB122程序执行
OB122程序在出现I/O访问错误时被调用,例如当CPU程序访问一未定义的I/O地址,CPU会出现I/O访问错误,CPU会调用OB122,如果OB122未下载,CPU会报故障停机。通过临时变量OB122_SW_FLT可以读出错误代码,通过OB122_BLK_TYPE得出出现错误的程序块,通过OB122_MEM_AREA可以读出被访问的地址类型,通过OB122_MEM_ADDR可以读出发生错误的存储器地址。使用STEP7不能时时监控程序的运行,可用Variable Table监控数据变化。具体程序参见OB_Example/OB122_Example。
图6-45 配置完成的画面
1)在OB122_Example程序的Blocks中插入组织块OB122,然后打开组织块OB122编写程序,OB122的STL程序(可转成梯形图)为:
先将硬件组态和OB1下载到CPU中,此时CPU能正常运行,在OB122_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0、MW2、MW4、MW6和M10.0并点击“Monitor Variable”按钮,程序运行正常,将M10.0置为true,CPU会报错误并停机。查看CPU的诊断缓冲区信息,发现为I/O访问错误,将OB122下载到CPU中,再将M10.0置为true,CPU会报错误但不停机,MW0为16#0042,MW2为16#0000,MW4为16#00200,MW62为16#012C,查看OB121的在线帮助可得到相应的故障信息,具体监控画面如图6-46所示。
图6-46 监控画面
检查并修改OB1程序为:
重新下载OB1,运行程序CPU不会再报错,程序能正常运行。
11.起动的类型(OB101)
(1)硬件组态
在“OB_Example”项目中插入一S7400站,命名为“OB101_Example”,然后插入“CPU412-1(6ES7412-1XF03-0AB0 Ver1.2)”,组态完成画面如图6-47所示。
双击“CPU 412-1”,设置起动方式,选择“Hot Restart”,具体画面如图6-48所示。
组态完成后保存编译。
图6-47 组态完成画面
图6-48 具体画面
(2)OB101程序执行
OB101程序在CPU执行Hot Restart时执行且只执行一次,可用于变量的初始化,使用STEP7不能时时监控程序的运行,可用Variable Table监控数据变化。具体程序参见OB_Example/OB101_Example。在OB101_Example程序的Blocks中插入组织块OB101,然后打开组织块OB101编写程序,OB101的STL程序(可转成梯形图)为:
将程序和硬件组态下载到CPU中,然后执行Hot Restart。
在OB101_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0并点击“Monitor Variable”按钮,设置画面如图6-49所示。
图6-49 设置画面
此时可以监控MW0为123,如果修改MW0的值为0,则MW0不会再被赋值为123,只有当CPU再次执行Hot Restart后才会被赋值。
12.起动的类型(OB102)
(1)硬件组态
在“OB_Example”项目中插入一S7400站,命名为“OB102_Example”,然后插入“CPU412-1(6ES7412-1XF03-0AB0 Ver1.2)”,组态参见OB101部分,设置起动方式,选择“Cold Restart”,具体画面如图6-50所示。
图6-50 硬件组态画面
组态完成后保存编译。
(2)OB102程序执行
OB102程序在CPU执行Cold Restart时执行,且只执行一次,可用于变量的初始化,使用STEP7不能时时监控程序的运行,可用Variable Table监控数据变化。具体程序参见OB_Example/OB102_Example。在OB102_Example程序的Blocks中插入组织块OB102,然后打开组织块OB102编写程序,OB102的STL程序(可转成梯形图)为:
将程序和硬件组态下载到CPU中,然后执行Cold Restart。在OB102_Example程序的Blocks中插入Variable Table,然后打开,填入地址MW0并点击“Monitor Variable”按钮,设置画面如图6-51所示。
此时可以监控MW0为123,如果修改MW0的值为0,则MW0不会再被赋值为123,只有当CPU再次执行Hot Restart后才会被赋值。
图6-51 设置画面
13.有关组织块的常问问题
(1)CPU的SF红灯亮,CPU停机是什么原因造成的?
当CPU的SF红灯亮,CPU停机后不知道是什么原因,此时怎么办呢?您需要去查看CPU的诊断缓冲区,根据缓冲区中提供的停机信息采取相应的措施,例如需要OB82、OB86的组织块下载等。那么如何查看CPU的诊断缓冲区呢?
方法一:首先建立STEP7与CPU的通信,然后打开硬件组态,点击“Offline〈-〉Online”按钮,然后双击CPU,选择“Diagnostic Buffer”选项,可以查看CPU的故障信息,具体画面如图6-52、图6-53所示。
图6-52 设置画面(一)
方法二:首先建立STEP7与CPU的通信,然后打开硬件组态,点击CPU,然后选择“PLC→Module Information...”选项,具体画面如图6-54所示。
再选择“Diagnostic Buffer”选项,可以查看CPU的故障信息,具体画面同上。
(2)为什么监控OB100程序时,感觉程序没有运行?
因为OB100为暖起动组织块,只有当CPU执行暖起动操作时才执行OB100的程序,且只执行一个周期,所以当监控OB100程序时感觉程序没有运行。
图6-53 设置画面(二)
图6-54 设置画面
(3)OB35的循环时间最长为60s,但想实现5min的循环周期怎么办?
将OB35的执行周期设为60000ms,在组织块OB35中做一加法计数,当计数值等于5后执行相应的程序,然后将计数值清零,简单程序举例如下。组织块OB35的STL程序为:
(4)在冗余电源配置中,电源模块掉电,调用哪个OB可以防止CPU停机?
通过在程序中添加OB83可以防止CPU停机,而添加OB81不能防止CPU停机。通常我们很容易以为OB81就是处理所有电源故障的OB,但对于冗余电源配置中,某个电源模块掉电故障,实际上CPU当作模块插拔故障来处理,因此需调用OB83。如图6-55所示当程序中没有插入OB83时电源模块掉电,CPU会停机。查看“Diagnostic Buffer”中显示的信息是模块插拔故障导致停机。
图6-55 查看故障信息(一)
如图6-56所示当程序中没有插入OB83时电源模块掉电后恢复,CPU停机不恢复。查看“Diagnostic Buffer”中显示的信息是模块插入恢复。
图6-56 查看故障信息(二)
如图6-57所示当程序中插入OB83时电源模块掉电,CPU不会停机。查看“Diagnostic Buff-er”中显示的信息是模块拔除故障调用OB83。
图6-57 查看故障信息(三)
如图6-58所示当程序中插入OB83时电源模块掉电后恢复,CPU不停机,外部故障灯恢复。查看“Diagnostic Buffer”中显示的信息是模块插入恢复。
图6-58 查看故障信息(四)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。