关于同步传值

来源:互联网 发布:反ps软件叫什么 编辑:程序博客网 时间:2024/06/05 09:56

关于同步传值

 关于同步传值,其实就等同于SFC20的BLKMOVE指令,但是因为是自己写的指令所以各个方面均灵活一些,便于自己使用。

  • 关于同步传值
    • 概要信息
    • 具体方法
      • 错误方法
        • 代码块
        • 问题解析
      • 解决方法一
        • 代码块
        • 解法说明
      • 解决方法2
        • 解法说明

概要信息

  • 具体信息可以查看西门子的SFC20指令
  • 代码采用STL编写

具体方法

错误方法

  • 因需要将一块数据传送到另一个地方,想到将其中的一个地址加1,另一个地址因为不变所以就可以一直使用下去,发现不成功

代码块

      L     P#0.0      T     MD  1000      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     0      T     MW   800LL0:  NOP   0      L     MD  1000      L     MD  1004      +D          T     MD  1004      L     DBB [MD 1000]      T     DBB [MD 1004]      L     MD  1000      L     P#1.0      +D          T     MD  1000      L     MW   800      L     1      +I          T     MW   800      L     MW   800      L     MW   802      <I          JC    LL0

问题解析

  • 在此段代码中,本来打算是采用利用MD1000的值自加1,这样地址就自动移动到下一个字节,因为MD1000的地址加1,所以MD1004的地址也跟着加1,这个想法自然是没有问题的,但是PLC在执行起来的时候就出现问题了。因为,第一次的时候MD1004肯定是跟着MD1000一起加1。但是,到了第二次,因为MD1004的时候在第一次的时候就已经加了1,第二次MD1000加1,那么MD1004是MD1000和MD1004的和。这样,相当于MD1004第二次 就是加的2。如此循环下去,以后的每次的加的数值就越来越大。这便是问题的所在,解决这种问题有两种办法。

解决方法一

  • 在这种解决方法中,将MD1004的初始赋值,放在循环中。这样,每次MD1004的累加初值便会恒定为某一个数,MD1004在程序中后来起作用的值,就会跟着MD1000的值加1而自加1 。

代码块

      L     P#0.0      T     MD  1000      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     0      T     MW   800LL0:  NOP   0      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     MD  1000      L     MD  1004      +D          T     MD  1004      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     DBB [MD 1000]      T     DBB [MD 1004]      L     MD  1000      L     P#1.0      +D          T     MD  1000      L     MW   800      L     1      +I          T     MW   800      L     MW   800      L     MW   802      <I          JC    LL0

解法说明

  • 通过将MD1004的赋值代码放入循环中,使得给MD1000+MD1004=MD1004的加法运算中只有了一个自变量,即MD1000。

解决方法2

  • 先看代码
      L     P#0.0      T     MD  1000      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     0      T     MW   800LL0:  NOP   0//      L     MD  1000//      L     MD  1004//      +D    //      T     MD  1004      L     P#514.0      L     DBW  512      *D          T     MD  1004      L     DBB [MD 1000]      T     DBB [MD 1004]      L     MD  1000      L     P#1.0      +D          T     MD  1000      L     MD  1004      L     P#1.0      +D          T     MD  1004      L     MW   800      L     1      +I          T     MW   800      L     MW   800      L     MW   802      <I          JC    LL0

解法说明

  • 不用MD1000与MD1004的相加方案,而采用MD1000和MD1004分别自加1的方式进行自加1运算。使用此种方法也可以得到想要的结果。
原创粉丝点击