设为首页收藏本站积分获取及使用技巧附件上传须知[求助-西门子PLC300/400]数据块内大量数据的动态引用与循环处理

追梦工控论坛|工控论坛-专业的Intouch论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

总共8197条微博

动态微博

查看: 2579|回复: 2

[求助-西门子PLC300/400]数据块内大量数据的动态引用与循环处理

[复制链接]

升级  28%

该用户从未签到

发表于 2014-4-4 20:27:02 | 显示全部楼层 |阅读模式

上传分享工控资料得追梦点,下载积分获取办法点击进入 ☆追梦点充值入口
发帖回帖赚金币兑换下载积分。上传附件须知点击进入

×

马上注册,结交更多工控达人,分享经验,让你轻松玩转追梦工控论坛。

已有帐号?  点击登录   或者        

支付宝扫一扫领红包
小弟遇到了这样一个问题,S7-300编程时,现在需要对数据块DB1中DB1.DBB0, DB1.DBB2, DB1.DBB4, DB1.DBB6,......一直到DB1.DBB584逐一与16#07进行与运算后转换为整数,然后将得到的整数乘以256之后,再逐一加DB1.DBB1, DB1.DBB3, DB1.DBB5, DB1.DBB7,......一直到DB1.DBB585转换对应的整数,最后将得到的293个整数连续写进DB2中,由于数据太多,需要使用循环程序,但数据块中的元素好像不能动态引用,有没有高手知道怎么解决,万分感激!</p>
        问题补充:
(阿鸣)的建议很好,但是我目前的全局程序是使用梯形图编写的,我想知道实现我需要的功能可否使用梯形图编写?能否给出详细的解决方案或者程序段,其实我要实现的是远程批量温度采集,但是采集到的数据需要处理,详细的数据处理过程见附注:
( 注:TH-TL 是温度数据高位字节,低位字节。
数据字节定义:
TH :
B7 B6 B5 B4 B3 B2 B1 B0
0 0 0 0 F T6 T5 T4
TL :
B7 B6 B5 B4 B3 B2 B1 B0
T3 T2 T1 T0 LT1 LT2 LT3 LT4
TH - F: 为符号位,= 1,为负温; =0,为正温。
TH-高四位:= 0000,保留;
TH中 BIT2 ? BIT0: 为温度数据的高3位,T6为最高位;
TL中 BIT7 ? BIT0: 为温度数据的低8位,LT4为最低位;(LT1?LT4为小数部分)
温度值分辨率为: 0.0625 ℃ (1/16 ℃)
温度计算公式为:
正温:TMP = ((TH & 07H)*256+TL)*0.0625
负温:TMP = -((TH & 07H)*256+TL)*0.0625
例如:TH = 01H TL = 76H
则: 温度值 = ( 1 * 256 + 118)*0.0625 = 23.375 ℃


图片说明: 1,数据处理说明
让我们联手拒绝网络伸手党,下载积分获取办法&附件上传须知 ☆追梦点充值入口





+1
2581°C
2
  • 小池
  • 晴天雨天
过: 他们

升级  40.5%

该用户从未签到

发表于 2014-4-4 20:58:15 | 显示全部楼层
1、下面是信手写的程序,未经验证。但循环语句的框架是没有问题的。最后的运算结果是按32位(双字)进行存储的。程序的与运算、乘法、加法运算部分你自己要按你的要求重新整理一下,以免有误。再次声明,信手写的程序,未经验证,只起到一个提示的作用。
      L     P#0.0          //初始读指针1
      LAR1  
      L     P#0.0            //初始写指针2
      LAR2  
      L    293              // 293个字节的循环计数为初值
M001: T     MW    10        //计数值 送入MW 10
      OPN   DB     1      //打开DB 1
      L    DBB [AR1,P#0.0]   //按读指针指示的地址读数据
      L    W#16#07 //16#07(A)
      AW  //进行与运算
      L   256
      *I   
      L   DBB [AR1,P#1.0]   //按读指针1指示的地址读数据
     +I
     OPN   DB     2      //打开DB 2
     T    DBD [AR2,P#0.0]   //按指针2指示的地址写数据(B)
     +AR1  P#2.0            //指针1指向下一数据地址
     +AR2  P#4.0            //指针指2向下一数据地址
      L     MW   10        //取循环计数值
      LOOP  M001           //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。
2、问题补充:
我想知道实现我需要的功能可否使用梯形图编写?
明确地讲,你需要的功能不能使用梯形图编写,即梯形图实现不了指针变址间接寻址。在此板块只是抛砖引玉,具体的计算还要靠你自己来编写,就是上述程序中注释(A)至(B)之间的计算部分。在计算方面如有问题,可另提出问题。在一个问题解答中不可能回答多个问题,其中的字数是有限制的。
3、有关指针寻址的资料:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
                                                                                                                                                                                                                                                              
                                                        

升级  31%

该用户从未签到

发表于 2014-4-4 22:01:58 | 显示全部楼层
用指针变址试试看。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

请珍惜自己的ID,严禁发布垃圾水贴,诸如adsf......顶......纯表情......多次重复回帖刷积分......轻则删帖警告,重则封禁!★请分享资料、经验或者赞助论坛,贡献一份力量★

关闭

最新活动上一条 /1 下一条

小黑屋|手机版|追梦工控论坛|工控论坛-专业的Intouch论坛 ( 皖ICP备10012005号 )|网站地图

GMT+8, 2025-5-9 02:52 , Processed in 0.117718 second(s), 21 queries , Gzip On, APCu On.

Powered by Dreamyiyi

© 2009-2025 工控论坛

快速回复 返回顶部 返回列表