STL编程使用中的一些问题

分享到:
234
下一篇 >

菜鸟:

刚开始用STL编程,想实现的功能是:I0.0到I99.7 to DB36.DBX0.0复制到DB36.DBX99.7,M1000.0到M1099.7 to DB36.DBX100.0复制到DB36.DBX199.7。请问下面的程序有问题吗?

Network1:

OPN   "REG_AREA_6_1"              //打开DB36

LAR1  P#0.0                       //初始化地址寄存器1

L     50                          //循环次数(数据个数)

NEXT: T     LW    20                    //存储当前的循环次数

L     IW [AR1,P#0.0]              //装载当前IW地址里面的数据到ACCU1(从IW0开始)

CAW                               //反转ACCU 1-L 中的字节顺序

T     DBW [AR1,P#0.0]             //将当前ACCU1地址里面的数据写到DB36当前的地址里面

+AR1  P#2.0                       //地址寄存器1的内容加P#2.0,相当于PIW的地址递增一个字

L     LW    20                    //装载当前循环次数

LOOP  NEXT                        //循环次数减一,跳转到NEXT标签,当循环次数减至0,离开循环,往下执行


Network2:

OPN   "REG_AREA_6_1"              //打开DB36

LAR1  P#1000.0                    //初始化地址寄存器1

LAR2  P#100.0

L     50                          //循环次数(数据个数)

NEX1: T     LW    30                    //存储当前的循环次数

L     MW [AR1,P#0.0]              //装载当前IW地址里面的数据到ACCU1(从MW1000开始)

T     DBW [AR2,P#0.0]             //将当前ACCU1地址里面的数据写到DB36当前的地址里面

+AR1  P#2.0                       //地址寄存器1的内容加P#2.0,相当于PIW的地址递增一个字

+AR2  P#2.0

L     LW    30                    //装载当前循环次数

LOOP  NEX1                        //循环次数减一,跳转到NEXT标签,当循环次数减至0,离开循环,往下执行

侠士:

我觉得楼主可以尝试SFC20,没有必要做成这个样子吧

菜鸟:

因为我程序里有两组冗余PLC互传数据的程序,要用到大量的M地址,大概要占用MW1000-MW1998。而且像上面这样的移动数据的程序只是其中一段,像这样的程序也是大量的,怕M地址不够,而且想学习下STL语言,所以编了下,不知道对不对,请指正。

而且有的需要高低字节互换一下,SFC20没法做啊!

请问有人能知道一下吗?

侠士:

你的代码没有问题,但可以做的更精细些。比如:Network1已经打开了DB36,Network2不需要重复操作了;Network2不需要高低字节交换,100个字节刚好25个双字,用双字来操作,循环25次,可以提高代码的执行效率。

可以用块拷贝指令啊


你可能感兴趣: 工控菜鸟园 自动化系统 STL
无觅相关文章插件,快速提升流量