s7-300 批量传送

将DB0块的DB0.DBW0----DB0.DBW99  传送到  DB1.DBW0-----DB1.DBW99(任意起始的100个地址),用梯形图是什么指令,  用STL怎么写。

问题补充:
BLKMOV 不能调用, 30:498。(  库版本和项目版本不一致)。

图片说明:

s7-300 批量传送   

最佳答案

1、可以应用系统功能块 SFC20,详见下述手册中3.1 使用SFC20 “BLKMOV”复制存储区域“,资料下载:
<S7-300400的系统软件和标准功能>下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=1023
2、自己应用循环、变址编制程序也不难,自己要练练这个编程的基本功:
讲DB0.DBW0----DB0.DBW99  传送到  DB1.DBW0-----DB1.DBW99:
     L     P#0.0          //初始读指针
      LAR1  
      L     P#0.0            //初始写指针
      LAR2  
     L     100               // 100个字的循环计数为初值
M001: T     MB    10        //计数值 送入MB 10
      OPN   DB   0      //打开DB0
      L    DBW [AR1,P#0.0]   //按读指针指示的地址读数据
      OPN   DB  1    //打开DB1
      T     DBW [AR2,P#0.0]  //按写指针指示的地址写数据
      +AR1  P#2.0            //读指针指向下一数据地址
      +AR2  P#2.0            //写指针指向下一数据地址
      L     MB    10        //取循环计数值
      LOOP  M001           //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。       
3、如果是任意起始的100个地址?
可将下述两个P#0.0 改为P#x.x(x.x为所要开始的地址)即可:
  L     P#0.0          //初始读指针
      LAR1  
      L     P#0.0            //初始写指针
      LAR2

提问者对于答案的评价:
谢谢您的回答:还有个问题。
 可将下述两个P#0.0 改为P#x.x(x.x为所要开始的地址)即可:
  L     P#0.0          //初始读指针
      LAR1  
      L     P#0.0            //初始写指针
      LAR2
如果初始指针是变化的(一个变量的话),怎么写呢
L     #CurrentPI
LAR1.如果#CurrentPI是0的话就程序正常运行,如果不为0就要出错STOP了。

最佳答案作者回复:
#CurrentPI的实际值必须是P#x.x形式,不能为其他形式。例如:
OPN   DB     10      //打开DB 10
      L     P#128.0          //初始读指针
      LAR1  
      L     P#256.0            //初始写指针
      LAR2

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午2:49
下一篇 2018年12月1日 下午2:49

相关推荐