欢迎来到天天文库
浏览记录
ID:21496027
大小:25.00 KB
页数:4页
时间:2018-10-22
《数据块内大量数据的动态引用与循环处理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数据块内大量数据的动态引用与循环处理 遇到了这样一个问题,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中,由于数据太多,需要使用循环程序,但数据块中的元素好像
2、不能动态引用,有没有知道怎么解决! 问题补充: 目前的全局程序是使用梯形图编写的,我想知道实现我需要的功能可否使用梯形图编写?能否给出详细的解决方案或者程序段,其实我要实现的是远程批量温度采集,但是采集到的数据需要处理,详细的数据处理过程见附注: (注:TH-TL是温度数据高位字节,低位字节。 数据字节定义: TH: B7B6B5B4B3B2B1B0 0000FT6T5T4 TL: B7B6B5B4B3B2B1B0 T3T2T1T0LT1LT2LT3LT4 TH-F:为符号位,=1,为负
3、温;=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=01HTL=76H 则:温度值=(1*256+118)*0.0625=23.375
4、℃ ) 图片说明:1,数据处理说明 最佳答案 1、下面是信手写的程序,未经验证。但循环语句的框架是没有问题的。最后的运算结果是按32位(双字)进行存储的。程序的与运算、乘法、加法运算部分你自己要按你的要求重新整理一下,以免有误。再次声明,信手写的程序,未经验证,只起到一个提示的作用。 LP#0.0//初始读指针1 LAR1 LP#0.0//初始写指针2 LAR2 L293//293个字节的循环计数为初值 M001:TMW10//计数值送入MW10 OPNDB1//打开DB1 L
5、DBB[AR1,P#0.0]//按读指针指示的地址读数据 LW#16#07//16#07(A) AW//进行与运算 L256 *I LDBB[AR1,P#1.0]//按读指针1指示的地址读数据 +I OPNDB2//打开DB2 TDBD[AR2,P#0.0]//按指针2指示的地址写数据(B) +AR1P#2.0//指针1指向下一数据地址 +AR2P#4.0//指针指2向下一数据地址 LMW10//取循环计数值 LOOPM001//循环计数值如为0则结束循环;如不为0减1后则转向标号为M
6、001的语句,继续循环。 2、问题补充: 我想知道实现我需要的功能可否使用梯形图编写? 明确地讲,你需要的功能不能使用梯形图编写,即梯形图实现不了指针变址间接寻址。在此板块只是抛砖引玉,具体的计算还要靠你自己来编写,就是上述程序中注释(A)至(B)之间的计算部分。在计算方面如有问题,可另提出问题。在一个问题解答中不可能回答多个问题,其中的字数是有限制的。 3、有关指针寻址的资料: 见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载: http://www.ad.siemens.
7、com.cn/download/SearchResult.aspx?searchText=F0215
此文档下载收益归作者所有