300PLC在一个功能块内如何读取两个数据块

300PLC在一个功能块内读取一个数据块内的数据进行排序,将排序结果写入另一个数据块

最佳答案

1、在一个功能块内读取一个数据块内的数据进行排序:
假定数据块DB1与DB20已建立,各有20个整型数据。原始数据放在DB1中,安放顺序如下:
DBW0
DBW2

DBW38
采用冒泡法进行排序:
下面是程序:
FC1:
      OPN   DB    1                 /////打开DB1这个数据块
      L    20  ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0:  T     MB    0
      L     P#0.0   ////装载地址指针,这是关键,不要搞错了
      LAR1  
      L     19
LL1:  T     MB    2   ////内部循环,进行19次,直到把最大值排到最后
      L     DBD [AR1,P#0.0]
      L     DBD [AR1,P#2.0]
      <I   
      JC    LL2          ////比较前后两个值,如果前面大于后面的,则前后数据交换
      L     DBD [AR1,P#0.0]
      T     #m_temp
      L     DBD [AR1,P#2.0]
      T     DBD [AR1,P#0.0]
      L     #m_temp
      T     DBD [AR1,P#2.0]
LL2:  +AR1  P#2.0     ////指针自动进行加2,,所以要跳过2个字节
      L     MB    2
      LOOP  LL1       ///这个指令自动的将A寄存器里的值减1
      L     MB    0
LOOP  LL0
2、将排序结果写入另一个数据块:
 将DB1中的数据共20个字送入DB20中
     L     P#0.0          //初始读指针
     LAR1  
     L     P#0.0            //初始写指针
     LAR2  
     L     20               // 20个字的循环计数为初值
M001: T     MB    10        //计数值 送入MB 10
      OPN   DB     1      //打开DB1
      L     DBW [AR1,P#0.0]   //按读指针指示的地址读数据
      OPN   DB     20      //打开DB 20
      T     DBW [AR2,P#0.0]  //按写指针指示的地址写数据
      +AR1  P#2.0            //读指针指向下一数据地址
      +AR2  P#2.0            //写指针指向下一数据地址
      L     MB    10        //取循环计数值
      LOOP  M001           //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。

提问者对于答案的评价:
非常感谢

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日 上午12:55
下一篇 2020年10月31日 上午12:55

相关推荐