西门子连续赋值问题 点击:1635 | 回复:1



PLC酷客

    
  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2014-01-23 14:09:45
楼主

西门子连续赋值问题

 

我想把从DB0.DBD0开始的75个数据赋值到从DB1.DBD0开始的75个双字中!该用什么指令啊!最好是一条指令完成!不然我要写75条赋值程序太麻烦了!谢谢!

 



楼主最近还看过



PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2014-01-23 14:10:24
1楼

答案:

 

可以调用系统功能块SFC20来实现:
1、SFC20 :
SFC20 “BLKMOV”:复制存储区域,可将存储器区(= 源区域)的内容复制到另一个存储器
区(= 目标区域)。
2、有关SFC20:
、以下为允许的源区域:
 部分数据块
 存储位
输入的过程映像分区(部分过程映像)
输出的过程映像分区(部分过程映像)
、不允许指定 STRING类型的数组。
3、应用SFC20注意:
源区域与目标区域一定不可以交叉。如果指定的目标区域大于源区域,此功能只将
源区域中包含的数据复制到目标区域。
如果指定的目标区域小于源区域,则只复制目标区域中能容纳的数据。
如果已用STEP 7在数据块或本地数据区中定义了源和目标字符串,并要在SRCBLK
和DSTBLK参数中使用这些字符串,SFC20也会将源字符串的“最大长度”和“实际长
度”发送到目标字符串。为了防止发生这种情况,请自行创建在SRCBLK和DSTBLK
参数中使用的ANY指针。请使用STRING数据类型完成此操作。
4、应用循环语句也很简便:
例:
     L     P#-0.0          //初始读指针
      LAR1  
     L     P#-0.0          //初始写指针
      LAR2  
      L     75               // 75个双字的循环计数为初值
M001: T     MB    10        //计数值 送入MB 10
      OPN   DB     0      //打开DB0
       L    DBD [AR1,P#0.0]  //按读指针指示的地址读数据  
      OPN   DB     1      //打开DB1
      T     DBD [AR2,P#0.0]  //按写指针指示的地址写数据
      +AR1  P#4.0            //读指针指向下一数据地址
      +AR2  P#4.0            //写指针指向下一数据地址
       L     MB    10        //取循环计数值
      LOOP  M001           //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。

 


热门招聘
相关主题

官方公众号

智造工程师