s7-300指针对QD0操作

现在遇到2个问题求助,
1,同时控制20个位数据放入VD0,然后MOV VD0 QD0;现在遇到的问题是,我只需要控制20个位,这样用等于把QD0的高12位浪费了。我想到的办法是用一个VW0,高4位用位逐个输出,如果是用指针寻址QD0,怎样只对低20位控制不影响高12位,能否找到更好的办法
2,STEP7中的LOOP指令如果循环10次,CPU执行时是一次执行完,还是一个扫描周期执行循环1次,如果对一个程序块循环次数多,会不会WDT超时。
第一次做s7-300,不是太熟悉,谢谢

最佳答案

感谢网友LJCLWYF的提示。
1、我只需要控制20个位,这样用等于把QD0的高12位浪费了。我想到的办法是用一个VW0,高4位用位逐个输出,如果是用指针寻址QD0,怎样只对低20位控制不影响高12位,能否找到更好的办法?
可以应用指针对位进行寻址。 双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
如:
L     P#0.0          //初始读指针
LAR1  
L     P#0.0            //初始写指针
LAR2  
L     20               // 20个位的循环计数为初值
M001: T     MB    100        //计数值 送入MB 10
     A     M [AR1,P#0.0]   //按读指针指示的地址读数据
    =    Q [AR2,P#0.0]  //按写指针指示的地址写数据
      +AR1  P#0.1            //读指针指向下一位地址
      +AR2  P#0.1          //写指针指向下一位地址
      L     MB    100        //取循环计数值
      LOOP  M001           //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。         
上述程序是信手而写,未经实测。感谢网友LJCLWYF的提示。
有关指针见:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04)     》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
详见《step7编程之地址概念详解》连接:
http://ishare.iask.sina.com.cn/f/22746895.html
http://www.gongkong365.com/bbs/job.php?action=download&aid=96
《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
2、CPU执行时是一次执行完,不是一个扫描周期执行循环1次。
是否超时?这要看程序的循环时间是否超出了周期扫描时间了。一般是不会超出的,只要不是死循环。

提问者对于答案的评价:
谢谢你的回答

专家置评

已阅,最佳答案正确。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年8月15日 上午12:19
下一篇 2017年8月15日 上午12:19

相关推荐