回复:关于有临时变量的fc,被别的程序打断,会出现的问题?

冬日

  • 帖子

    3360
  • 精华

    56
  • 被关注

    45

论坛等级:奇侠

注册时间:2005-09-01

白金 白金 如何晋级?

发布于 2012-03-08 16:15:01

34楼

对于如下情况怎么解释(图片为FC3的截图):



1,FC1中赋值到LD0、LD4、LD8,但是从FC3里读出来的值并非也在LD0/4/8,而是跑到最后的LD64/68/72去了。注意这个最后,并不是固定的LD64/68/72,而是自动的赋值到最后的三个双字,并按顺序排列。
2,当FC1调用FC2后,FC1赋值的LD0/4/8依然是最后三个双字,而FC2的赋值,则是在FC1的前面。
3,另外要特别注意,L区如果没有显性定义变量,或者通过其他命令使用过,那么是无法使用指针来寻址的。
比如L LW[ar1,P#0.0]这样是不行的,PLC会停机,而如果有事先定义过临时变量或者执行过 L LW0,那么就没问题。有意思的是如果执行过L LW200,那么200以前的地址都可以用指针来寻址,哪怕没定义或者被使用过。

OB1:
CALL FC 1
CALL FC 3
FC1:
L L#111
T LD 0
L L#222
T LD 4
L L#333
T LD 8
CALL FC 2
FC2:
L L#444
T LD 0
L L#555
T LD 4
L 666
T LD 8
L 777
T LW 12

FC3:
L LD 0
T MD 100
L LD 4
T MD 104
L LD 8
T MD 108
L LD 12
T MD 112
L LD 16
T MD 116
L LD 20
T MD 120
L LD 24
T MD 124
L LD 28
T MD 128
L LD 32
T MD 132

L LD 36
T MD 136
L LD 40
T MD 140
L LD 44
T MD 144
L LD 48
T MD 148
L LD 52
T MD 152
L LD 56
T MD 156
L LD 60
T MD 160
L LD 64
T MD 164
L LD 68
T MD 168
L LD 72
T MD 172
If anything can go wrong, it will.
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。