当前位置: 主页 > PLC控制

300中BLKMOVE块移动指令疑问

我看了一下SFC20块移动指令一般是这样使用
CALL"BLKMOV"
SRCBLK:=P#M50.0BYTE8
RET_VAL:=MW80
DSTBLK:=P#M150.0BYTE8
但是我的这个使用了一个功能块来表示这个块数据移动功能,详见图片,对于这个功能块中的程序,我有几点不理解
第一,数据位左移3位再与或上DW#16#84000000这个数值的作用是啥,是用来干吗的?
第二,最后的调用BLKMOVE是这样写的(如下),这种格式如何能让程序执行例子中的调用?SRCBLK后面不是要输入源数据块?为何我的这个程序里面是#Q_POINT?(貌似例子那种表达方式是指针吧,后面的是移动长度)。DSTBLK两者对比也是这种疑问,还请大神帮忙解释一下
CALL"BLKMOV"
SRCBLK:=#Q_POINT
RET_VAL:=#TEMP_RET_VAL
DSTBLK:=#Z_POINT

图片说明:

42fa6bb00efb156820f600cc1d1f9976300中BLKMOVE块移动指令疑问

最佳答案

第一,数据位左移3位再与或上DW#16#84000000这个数值的作用是啥,是用来干吗的?
因为这里用到了ANY指针,而这个地址数据包含了位地址,所以左移动3位是为了排除位地址的干扰,比如你写入从第三个字节开始,如果直接写入3的话不移动3位,那么就是从0.3开始,是错误的。加上DW#16#84000000,是因为这里用到的是DB块的数据,所以要按照ANY指针的要求进行数据的填写
第二:这个问题,我觉得要先看懂之前的两段程序,一个是设定数据来源的ANY指针,一个是设定数据目标地址的ANY指针,
LW#16#1002
TLW0//第一个字节的格式和数据的类型,字节为单位
L#Length
TLW2//数据的长度
L#Source_DB
TLW4//数据来源的DB号
L#Source_DBB//从来源的DB块复制数据的起始地址
SLD3
ODDW#16#84000000//双字的逻辑或以后形成了ANY指针的地址格式
TLW6//生成以后的指针地址

LW#16#1002//第一个字节的格式和数据的类型,字节为单位
TLW10
L#Length
TLW12//数据的长度
L#Destination_DB
TLW14//复制地址到目的DB块号
L#Destination_DBB
SLD3
ODDW#16#84000000
TLW16//生成以后的指针地址
Q_POINT和Z_POINT在TEMP里进行了定义分别对应的地址是LW0和LW10
ANY指针的格式
第0个字节;10H,也就是16进制的10,时固定的格式
第1个字节:数据的类型,
第2个字节和第3个字节:数据的长度
第4个和第5个字节:DB块号,或者0
第6个到最后一个字节,是一个双字:这个是地址的指针。

要明白这段程序,先要了解ANY指针的运用,见资料里的ANY部分,其实应该整篇都看看,就能理解为什么要坐移动三位了,间接寻址的部分。
htTPs://suppoRT.industry.siemens.com/cs/document/79632832/S7-300S7-400寻址?dti=0&lc=zh-CN

提问者对于答案的评价:
谢谢各位热心解答,这几天没时间看,等有空了再研究一下

  • 关注微信

猜你喜欢

微信公众号