OPN #DB_Numer //打开DB 1
L P#0.0 //初始读指针
LAR1
L #Number // 100个字的循环计数为初值
M001: T #TEMP1 //计数值 送入MB 10
L PIW [AR1,P#0.0] //按读指针指示的地址读数据
T DBW [AR1,P#0.0] //按写指针指示的地址写数据
+AR1 P#2.0 //读指针指向下一数据地址
L #TEMP1 //取循环计数值
LOOP M001
程序如上,想做成功能块,方便调用,但是在初始位定义上遇到了问题,不知道定义什么变量和怎么写程序, L PIW [AR1,P#0.0] 定义起始位是零,需要的时候可能还要改成 L PIW [AR1,P#10.0] 或者其它的,这儿管脚应该怎么定义,程序怎么写啊!,谢谢!
最佳答案
楼主,我给你个办法,用32位指针就行。建立一个FC,建一个INT型输入变量StartAdd_PI,作为起始复制地址,再建一个INT变量StartAdd_DB,作为DB块接收的起始地址。
程序里可以这么写:(在你程序的基础上修改)
OPN #DB_Numer //打开DB 1
L #StartAdd_PIW
SLD 3 //左移三位,变为指针。
LAR1
L #StarAdd_DB
SLD 3
LAR2
L #Number // 100个字的循环计数为初值
M001: T #TEMP1 //计数值 送入MB 10
L PIW [AR1,P#0.0] //按读指针指示的地址读数据
T DBW [AR2,P#0.0] //按写指针指示的地址写数据
+AR1 P#2.0 //读指针指向下一数据地址
+AR2 P#2.0 //写指针指向下一数据地址
L #TEMP1 //取循环计数值
LOOP M001
楼主,你可以自己模拟一下,应该没有问题。
提问者对于答案的评价:
太感谢了,上次的问题就是你解决的,不过还得请教一下,SLD 3 在这里起到什么样的作用,为什么左移双字就偏移成需要的地址了,还有就是上一个你回答我的问题,为什么会报错,感谢!!!
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc244794.html