德国西门子CPU代理商用户程序结构是由各种块组成的,这些块使的程序结构可以模块化。可以通过这些块的相互调用来组织程序,便于修改与调试。几种块的简要描述见下表:

在博途软件中添加好S7-1200的CPU模块后,默认会自动添加一个OB1组织块。在项目树中单击“添加新块”,可以添加其他块,如下图所示:


2.1 OB 组织块

它们充当操作系统和用户程序之间的接口。由操作系统调用,用于控制循环扫描和中断程序的执行、PLC的启动和错误处理等。组织块的程序是用户编写的。接下来我们来看看一些常用的组织块介绍。
1)循环组织块OB1

OB1在RUN模式下会循环执行,可以理解为主程序。可以在OB1中编写处理程序,还可以调用函数或功能块来处理。其循环过程如下图所示:

2)初始化组织块OB100

OB100,为初始化组织块,当从STOP转为RUN时,会执行一次。启动组织块执行完毕后才开始执行主“程序循环”OB 。S7-1200 CPU 中支持多个启动 OB ,按照编号顺序(由小到大)依次执行,OB100 是默认设置。其它启动 OB 的编号必须大于、等于123。如下图所示添加了两个初始化组织块OB100和OB123

PLC启动过程和运行过程如下图所示:

3)循环中断OB

通过“循环中断”OB,可以定时的执行其中的代码。在新建时可以设置好,执行的时间间隔,如下图所示:

通过“循环中断”OB,可以定时的执行其中的代码。在新建时可以设置好,执行的时间间隔,如下图所示:
2.2 功能(函数) FC

功能(Function,FC)是用户程序编写的子程序,它包含完成特定任务的代码和参数。当某些代码需要经常重复被执行时,可以将其写入功能中,但需要执行时调用该功能即可,例如某些算术运算。
注:无自己专属的数据块,执行结束后,其临时变量中的数据就丢失了
2.3 功能块 (FB)

FB:功能块 (FB) 是使用背景数据块保存其参数和静态数据的代码块。可以被组织块调用,也可以调用其他功能块和功能。
调用同一个功能块时使用不同的背景数据块,可以控制不同的设备。例如,可以控制多个相似的设备(如电机),在每次调用时为各设备分配不同的背景数据块。 每个背景 DB 存储单个设备的数据(如速度、加速时间和总运行时间)
注:拥有自己专属的数据块,FB中定义的变量会保持,即执行时FB时变量的值的大小于上一次调用退出时的值相同。
2.4、数据块

数据块(Data block,DB)是用于存放执行代码块时所需的数据的数据区,有两种类型的数据块:
1) 全局(Global)数据块:存储供所有的代码块使用的数据,所有的OB、FB和FC都可以访问。例如,可以用全局数据块来存储那些在功能执行结束后需要保持的数据。
2) 背景数据块:存储供特定的FB使用的数据。背景 DB 中数据的结构反映了 FB的参数(Input、Output 和 InOut)和静态数据。
2.5 调用关系
组织块(OB)、功能块(FB)和功能(FC)调用关系如下图所示:

西门子PLC系统软件冗余调试的常见问题
发表时间:2018-01-02 11:28
西门子PLC系统软件冗余调试的常见问题
问题1:硬件组态需要注意什么?德国西门子CPU代理商
回答:软冗余系统的冗余控制只能通过ET 200M 实现,按照图1进行组态。A 、B站的组态必须确保一致,可以拷贝ET200M 的组态,在另一站点组态中使用图2所示菜单操作。

图1

图2
问题2:哪些模块可以支持软冗余?
回答:软冗余模块型号链接
问题3:FC100“SWR_START”中定义的数据区,哪些是冗余数据区?哪些是非冗余数据区?有什么区别?
回答:如图3红色区域,冗余同步数据区包括:过程映像输出区/DB/IEC/M;如图3绿色区域,非冗余数据区包括:DB。冗余数据区,主站的数据会通过冗余链路覆盖到备用站,保证主备之间数据同步;非冗余DB区,无论主备,数据按照定义的A-B B-A方向传递。注意!无论冗余数据区还是非冗余数据区,A 、B站点的长度必须一致。如果不需要使用,长度定义为0。

图3
问题3:软冗余中DB块的影响。
回答: 软冗余系统中会使用一些特殊功能的DB 块,在FC100“SWR_START”中定义,如图4:

图4
A: 软冗余工作DB,程序会自动生成,不要在项目中手动添加; “DB_SEND_NO” 、“DB_RCV_NO”定义的DB,在冗余站两侧一致。
B: FB101“SWR_ZYK”的背景数据块,注意生成DB5的长度。如果创建出错,CPU 能够正常运行但是SF 灯报错,诊断缓冲区如图5:

图5
查看DB5的长度如图6,只有100字节,此时双击打开DB5看不到内部参数,如图7。可以删除DB5,重新生成FB101“SWR_ZYK”背景数据块。正常MPI同步-194字节;以太网/PROFIBUS 同步-358字节。

图6

图7
C:冗余DB区,主站的数据随时同步备用站。需要手动创建,IEC定时器的背景数据块也需要生成,A 、B站点长度一致;生成的DB块的长度需要大于2个字(新生成的DB块,内部只有一个INT变量,长度2字节)。否则,CPU会停机,诊断缓冲区报如图8错误:

图8
D:非冗余DB块
? 不要手动创建,程序自动生成。
? A-B B-A的DB必须同时使用,不能只有一个方向的(A-B 0 BYTE ,B-A 100BYTE -----B STOP;B-A 0 BYTE ,A-B 100BYTE -----A STOP)。否则,CPU停机,诊断缓冲区如图9:
图9
? 创建的长度必须是偶数字节,不能是奇数字节,如图10;A、 B站点长度一致。否则,CPU停机,诊断缓冲区如图11:

图10

图11
问题5:其他冗余同步数据区的影响。
回答:其他冗余同步数据区如下,包括过程映像输出区和M区,如图12。主站数据随时同步到备用站。过程映像输出区不要大于CPU允许范围,而且每个ET 200M从站允许Z大32字节;M区大于1个字节,小于CPU允许Z大M区范围。否则,CPU停机,诊断缓冲区如图13。如果不需要使用,长度定义为0。

图12

图13
问题6:修改完FC100“SWR_START”的参数,重新下载后为何会导致CPU报错?
回答:FC100“SWR_START”在CPU启动会生成相关的DB块,修改参数后必须删除已生成旧的DB块,否则会导致CPU故障。手册描述如图14:

图14
所以,修改完FC100“SWR_START”参数后,建议使用下面方法重新下载。
方法1:
打开项目在线窗口,如图15。
删除所有程序块,如图15。
重新下载块,如图16。
对CPU进行存储器复位操作。

图15

图16
方法2:选中“Blocks” ,按照图17所示菜单进行下载(删除MMC卡中所有的块,并把新的程序写到卡中,同时对CPU RAM进行一次复位)。

图17
问题7:同步失败的原因?
回答:当同步失败时,FB101“SWR_ZYK”的返回值会报16#8015的错误,如图18,同时状态字DB5.DBX9.5置1,如图19。在确保物理连接正常情况下,检查下面的参数设置。

图18

图19
? 根据不同的同步方式,注意FC100 “SWR_START”的参数,如图20。“MPI_ADR”表示对方的MPI地址,对于MPI同步有效;“LADDR” “VERB_ID”对于PROFIBUS/ETHERENT 同步有效,分别代表同步CP的硬件地址和连接号,如图21。

图20

图21
? 选择MPI同步,冗余程序块会调用SFC65“X_SEND”和SFC66“X_REV”进行数据同步,占用S7-300 CPU的2个“S7 basic communication”连接资源,如图22。注意,要确保在组态中预留足够的资源,如图23,否则会因为连接资源不够影响同步链路的通讯。

图22

图23
问题8:FC102 “SWR_DIAG”作用。
回答:FC102 “SWR_DIAG”必须在OB86中调用,软冗余系统才会对DP总线错误做出判断,从而控制主备切换。注意!如果不调用,此时状态字不会报任何错误,也不会影响CPU故障导致主备切换。但是对于此时出现的总线故障软冗余系统不会切换,但是外部IM153模块会执行切换。注意!FC102 “SWR_DIAG”一定不能修改块编号。
问题9:为什么状态字不稳定,DB5.DBX9.5 0-1闪烁?
回答:如图24,DB5.DBX9.5 0-1闪烁表示同步有时成功有时失败。首先,要保证两个CPU之间冗余数据和非冗余数据区大小一致。其次,冗余主备CPU之间同步过程如图25所示,数据的同步是随着FB101“SWR_ZYK”的执行实现的,所以要确保同步成功,需要两个CPU对FB101“SWR_ZYK”的调用周期一致,建议在OB35中调用(如果在OB1中调用,确保OB1循环扫描周期相差不多)。

图24

图25
如果冗余系统使用不同CPU,Z好使用OB35调用FB101“SWR_ZYK”,不要在OB1中调用。因为,不同CPU运算速度不同,会导致OB1循环周期差异较大,从而影响同步效果,如图26、 27。

图26

图27
问题10:不同版本的软冗余程序包区别。
回答:V1.1版本用于早期CPU315-2DP和S7-400的CPU。新CPU需要使用V1.2版本库。如图28(来自冗余软件包文档说明)。

图28
CPU暖启动过程中如果PROFIBUS总线故障,V1.2版本会导致CPU停机,诊断缓冲区如图29;V1.3版本,CPU 不会停机,SF 亮BF闪烁,诊断缓冲会报总线错误。
