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