登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:求指导!如何解决西门子PLC写入时发生区域长度错误?

点击:20769 回复:7

TAR1
    T     #TAR1
    TAR2
    T     #TAR2
// ;
// ;
    LAR1  P##IL
    L     DIW [AR1,P#0.0]
    T     #ILintILR
    L     DIW [AR1,P#8.0]
    T     #ILintILF
// ;
    LAR1  P##ILR
    L     DIW [AR1,P#0.0]
    T     #DBNb
// ;
    L     DID [AR1,P#2.0]
    SRD   3
    T     #AdrDB
    OPN   DB [#DBNb]
    L     #AdrDB
    SLD   3
    LAR1
// ;
    L     #ILintILR
    T     DBW [AR1,P#8.0]
// ;
// ;
    LAR1  P##ILF
    L     DIW [AR1,P#0.0]
    T     #DBNb
// ;
    L     DID [AR1,P#2.0]
    SRD   3
    T     #AdrDB
// ;
    OPN   DB [#DBNb]
    L     #AdrDB
    SLD   3
    LAR1
// ;
    L     #ILintILF
    T     DBW [AR1,P#0.0]

// ;
// ;
    L     #TAR1
    LAR1
    L     #TAR2
    LAR2
这是我的FB106程序,问题提示光标
指到这里“
    L     #ILintILF
    T     DBW [AR1,P#0.0]

模块 CPU 319F-3 PN/DP 的诊断缓冲区
机架:                         0
插槽:                         2
事件 1 / 10:  事件 ID 16# 2523
写入时发生区域长度错误
全局 DB,字访问, 访问地址:     0
FB 编号:    106
模块地址:  3434
所需的 OB:编程错误 OB (OB121)
优先等级: 1
内部错误, 进入的事件
15-04-06 13:39
DBW[AR1,P#0.0],你要去了解访问的这个地址在DB中是否存在,如果DB中这个地址并没有被定义却被你访问到了,就发生这个错误,通俗的讲就是地址越界了。
Good Luck~
15-04-06 15:00
是的,我的这个寻址是形参,在外面引脚填地址,能访问到!访问的也是背景数据块!背景数据块中的地址也有没超出范围,还有什么可能吗?或者可以加你qq沟通一下吗?
15-04-06 16:00

引用 395590275 在 2015/4/6 16:00:10 发言【内容省略】

你错误的理解了我的意思,不是指背景数据块的地址超出范围,而是作为程序员,你的访问动作超出了范围。
例如,数据块中你最大的定义地址为64,你却访问了66的内容,那么地址越界,可定义地址范围和可访问地址范围是一个不同的概念,只有被定义,才能被访问。
Good Luck~
15-04-06 16:41
我明白了你的意思!我检查了没有地址越界。你说的这个问题我是知道的,就是检查后发现没有地址越界才产生的疑惑!我的语句语法没问题吧?
15-04-06 17:11

引用 395590275 在 2015/4/6 17:11:33 发言【内容省略】

我不清楚你的检查的步骤是如何进行的,你能否贴点检查的图出来看看?当错误发生时的堆栈中数据状况以及变量当时的值?
Good Luck~
15-04-06 17:28
附件 调用FB时外部引脚.jpg
附件 FB106.jpg
这是我监视FB和FB被调用时填的引脚DB1408和DB1403的地址都存在,而且程序能正常运行,您看看
15-04-06 17:48

引用 395590275 在 2015/4/6 17:48:16 发言【内容省略】

你要贴个不正常运行的图才可以看出点问题,或者直接将程序打包上传。
15-04-07 09:17

工控新闻

更多新闻资讯