数据块的复制

我想把一个DB[A]块中的第X个字开始,长度为Y个字放到DB块中,从第1个字开始。
应该怎么写程序呢
用SFC20块,用常数没问题,可是我需要把起始位,长度变为变量,这样该怎么写?

问题补充:
在ANY指针里Load Syntax-ID是指什么?

最佳答案

LAR1  P##SendDB
      L     B#16#10                     //Load Syntax-ID
      T     LB [AR1,P#0.0]
      L     B#16#2                      //装载数据类型,2代表BYTE
      T     LB [AR1,P#1.0]
      L     #Length                         //数据长度
      T     LW [AR1,P#2.0]
      L     #DB_No                //DB号
      T     LW [AR1,P#4.0]
      L     #OFFSET           //起始地址变量,比如想从DBX1.0开始,就给OFFSET赋值8
      L     P#DBX 0.0
      +D    
      T     LD [AR1,P#6.0]
看一下any指针的结构就很容易做到啦,any的第2字节可以改读取长度,6字节可以改读取起始地址。上面只是个例子。类似于P#DB1.DBX0.0 BYTE 228 通过SFC20 BLKMOV 传送给 P#DB2.DBX0.0 BYTE 228,这其中的DB号,DBX0.0起始位置BYTE数据类型228数据长度都可以用变量代替,就可以做到了。

提问者对于答案的评价:
L     B#16#10                     //Load Syntax-ID  是什么意思?为什么是10

最佳答案作者回复:
规定的就是B#16#10,参考西门子的手册。你用ANY指针第0字节就给B#16#10就行了。
这个应该跟系统有关。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc226377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 上午1:32
下一篇 2018年12月1日 上午1:32

相关推荐