请各位高手帮下忙,我是新手对下面这段程序搞不太明白,请解释下。

OPN   "数据库"
      L     #TrayNO
      BTD                               //托盘号由BCD码转换为双整数
      +     -1                          //减去基值0001
      L     30                          //数据库每个数据条目占据30字节空间
      *D    
      SLD   3
      L     P#0.0
      +D    
      T     #POINT
      L     30
M000: T     #COUNT
      L     0
      T     DBB [#POINT]
      L     #POINT
      L     P#1.0
      +D    
      T     #POINT
      L     #COUNT
      LOOP  M000
我想问 为什么要左移3位移位后数值会不会发生改变?还有将BCD码或者INT数据变成双整数,数值会不会发生改变?

最佳答案

1、 为什么要左移3位移位后数值会不会发生改变?
左移3位移位后数值肯定会发生改变!
这个问题要问的是为什么要左移3位移位?
为了形成下述地址形式才3位移位。
双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
例如:
 通过L L#+10 ,我们知道存放在MD104中的值应该是:  
  MD104:0000 0000 0000 0000 0000 0000 0000 1010 
  当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:  
  0000 0000 0000 0000 0000 0000 0000 1010 = 1.2  
在你的程序中,如果#POINT如原为0000 0000 0000 0000 0000 0000 0000 0001,左移3位移位后0000 0000 0000 0000 0000 0000 0000 1000 = 1.0,则;
T     DBB [#POINT] ,即等价为T     DBB1。
2、BCD或INT转成双整形,数值是不会改变的:
如按INT转成双整形读取,肯定有改变。最简单的道理就是INT转成双整形将原数据的最高为作为符号(±)位了!
3、为什么要左移3位移位,看看下述通过指针寻址就明白了:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
详见《step7编程之地址概念详解》连接:
http://www.plc365.com/jishu/57.html

提问者对于答案的评价:
终于明白了,谢谢您的答复!

专家置评

已阅,最佳答案正确。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月5日 下午4:25
下一篇 2018年12月5日 下午4:25

相关推荐