我想把一个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