本文转自
廖老师的博客一直想编这样一个程序,用仿真调试完后,发现程序很短,功能很强,有较大的实用价值。
S7-300/400的OB86的局部变量OB86_EV_CLASS(LB0)为16#39和16#38分别表示故障出现和故障消失。OB86_FLT_ID(LB1)为16#C3和16#C4分别表示DP主站系统(DP网络)故障和DP从站故障。LB10是DP主站系统的ID(网络的编号),LB11是有故障的DP从站的编号。
假设项目中只有一个DP网络,12个DP从站的编号分别为3~14,它们分别对应于M10.3~M11.6。
出现DP主站系统故障时(LW0为W#16#39C3),将M10.3~M11.6全部置为1(将W#16#F87F送MW10)。
某个DP从站出现故障时(LW0为W#16#39C4),将故障从站编号和M10.0的地址相加,计算出故障从站对应的地址,然后用间接寻址点亮故障从站对应的指示灯。
某个DP从站故障消失时(LW0为W#16#38C4),将故障从站编号和M10.0的地址相加,计算出故障从站对应的地址,然后用间接寻址熄灭故障从站对应的指示灯。
在SIMATIC管理器中生成一个人机界面的站点,双击站点中的画面1,打开WinCC flexible的项目,在画面中生成12个指示灯。它们分别通过M10.3~M11.6来显示3~14号从站的状态。
下面是OB86中的程序。
L W#16#39C3
L LW 0
==I
JCN m001 //不是主站系统故障则跳转
L W#16#F87F
T MW 10 //点亮3~14号从站的指示灯
m001: L W#16#39C4
L LW 0
==I
JCN m002 //不是从站故障出现则跳转
L LB 11 //故障从站编号送累加器1
L P#10.0 //起始地址送累加器1
+D
T LD 20 //故障从站地址送地址指针
S M [LD 20] //点亮故障从站对应的指示灯
m002: L W#16#38C4
L LW 0
==I
JCN m003 //不是从站故障消失则跳转
L LB 11 //故障从站编号送累加器1
L P#10.0 //起始地址送累加器1
+D
T LD 20 //故障从站地址送地址指针
R M [LD 20] //熄灭故障从站对应的指示灯
m003: NOP 0
下图是5号和13号从站有故障时指示灯的状态。
----------------原图请看上面链接,权限不够不能贴图,呵呵。
使用16个字节(例如MB10~MB25),最多可以用画面上的指示灯显示120多个从站的状态。