691342165
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 106 点
下载积分: 472 分
在线时间: 6(小时)
注册时间: 2010-07-17
最后登录: 2024-07-02
查看691342165的 主题 / 回贴
楼主  发表于: 2010-11-18 14:12
各位大侠们S7400编程里,OB1无条件调用FB1,为什么导致CPU停止啊,也不能监视,为什么啊啊,只要把OB1里调用FB1这段程序删掉就可以了,哪里错了?求救,,,
诊断信息是:事件 2 / 14:  事件 ID 16# 4562
由编程错误引起的 STOP 模式(OB 没有装载或不能装载,或没有 FRB)
用户程序中的断点:循环程序(OB1)
优先级:   1
FB 编号:      1
模块地址:    48
先前的工作模式:RUN
要求的工作模式:STOP (内部)
内部错误, 进入的事件
22:44:03.757  2010-11-17


事件 3 / 14:  事件 ID 16# 2523
写入时发生区域长度错误
全局 DB,双字访问, 访问地址:    12
FB 编号:      1
模块地址:    48
所需的 OB:编程错误 OB (OB121)
优先级: 1
内部错误, 进入的事件
22:44:03.757  2010-11-17

事件 1 / 100:  事件 ID 16# 2522
读取时发生区域长度错误
全局 DB,双字访问, 访问地址:    12
FB 编号:      1
模块地址:    72
所需的 OB:编程错误 OB (OB121)
优先级: 1
内部错误, 进入的事件
22:14:15.561  2010-11-17


事件 2 / 100:  事件 ID 16# 2522
读取时发生区域长度错误
全局 DB,双字访问, 访问地址:    12
FB 编号:      1
模块地址:    56
所需的 OB:编程错误 OB (OB121)
优先级: 1
内部错误, 进入的事件
22:14:15.561  2010-11-17


你的程序使用的数据块的地址有错误,你访问了不存在的地址,比如你的db1地址是到128,而你访问了db1.dbd130,这样就会出现你的错误(网上是这样解释的,但我应该怎么做呢)

比如我在FB1中我读写DB1这个北景数据块,地址该怎么填呢?我是这样填的:DB1.DBD12,到现在我还不知道错在哪,这个DB1.DBD12是什么意思?不是DB1这个数据块里双字12这个地址吗?背景数据块与共享数据块分别应该怎么填呢!谢谢!


这是程序,哪位帮我改好,我真的非常感谢,非常感谢  坦兴自控.rar (279 K) 下载次数:37
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5212 个
工控威望: 7436 点
下载积分: 159013 分
在线时间: 3172(小时)
注册时间: 2007-11-21
最后登录: 2024-12-25
查看sjm213的 主题 / 回贴
1楼  发表于: 2010-11-19 10:07
1,直接填DB1就好;
2,你在FB1里用到了DB1.DBD12而实际DB1里面没有,所以执行到这里就会报警;
3,解决办法就是改FB1中的DB1.DBD12为一个实际存在的地址,例如新建一个共享数据块DB3,规划好一个新的DBD0,就可以把DB1.DBD12改为DB3.DBD0了。或者直接用局域变量来做,更简单一些----在接口区规定一个TEMP类型的变量,把DB1.DBD12换成这个变量就行。
691342165
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 106 点
下载积分: 472 分
在线时间: 6(小时)
注册时间: 2010-07-17
最后登录: 2024-07-02
查看691342165的 主题 / 回贴
2楼  发表于: 2010-12-01 13:35
很感谢楼上的回答,只是我现在很不明白为你定义在TEMP类型的变量上,为什么不能定义在IN或OUT里呢。。。百思不得其解!很感谢大侠们。。。