登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:一条“看不懂的指令”的意义

点击:863 回复:0


   网上有人给出了一条S7-300“看不懂”的指令“L     P#P  515.0”。
   这条指令与区域之间的寄存器间接寻址有关。S7-300/400有两个地址寄存器AR1和AR2,操作数的地址等于地址寄存器中的地址值加上地址偏移量。下面是寄存器间接寻址的32位指针格式:
                                     x000 0rrr 0000 0bbb bbbb bbbb bbbb bxxx
   其中第0~2位(xxx,最低位为第0位)为被寻址地址中位的编号(0~7),第3~18位(16个b)为被寻址地址的字节的编号。第24~26位(rrr)为被寻址地址的区域标识号。
   指针的最高位x 为0时,为区域内的间接寻址,最高位x 为1时,为区域间(交叉区域)间接寻址。
   将下面的程序下载到仿真PLC,运行时监控累加器1(STANDARD)的值(见下图)。
     L     P#P  1.0                  //16#8000 0008送累加器1
     LAR1                            //累加器1的内容送AR1
     L     MW [AR1,P#2.0]            //MW3的值送累加器1
   MW [AR1, P#2.0]的地址为AR1中的P#1.0加偏移量P#2.0,MW [AR1, P#2.0]即MW3。
   由第1条指令的执行结果16#8000 0008可知(见下图),P#P1.0的最高位为1,表示这是区域间(交叉区域)间接寻址。第24~26位(rrr)为2#000,由西门子的资料《S7-300和S7-400寻址》可知,区域标识号2#000表示地址指针不包含地址区。仿真时用PLCSIM设置MW3的值为16#1234,第3条指令的监控结果验证了上述分析的正确性。
http://blog.gkong.com/uploadfile4/2011378389525.jpg
   将上述程序的第1条指令改为“L   P#1.0”,程序运行结果相同。指针值P#1.0的最高位为0。
11-03-07 08:41

工控新闻

更多新闻资讯