西门子STL间接寻址常问问题集

西门子STL间接寻址常问问题集

ID:47299793

大小:174.01 KB

页数:9页

时间:2019-08-21

西门子STL间接寻址常问问题集_第1页
西门子STL间接寻址常问问题集_第2页
西门子STL间接寻址常问问题集_第3页
西门子STL间接寻址常问问题集_第4页
西门子STL间接寻址常问问题集_第5页
资源描述:

《西门子STL间接寻址常问问题集》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、西门子STL间接寻址常问问题集·文献 ·涉及产品1.1如何获得指针或者间接寻址有关的信息?指针的类型包括16位指针、32位指针、Pointer(6Byte)和Any(10Byte)。16位指针用于定时器、计数器、程序块的寻址;32位指针用于I/Q/M/L/数据块等存储器中位、字节、字以及双字的寻址,其中第0~2位表示位地址(0~7)、第3~18位为字节地址,其余位未定义;Pointer和Any一般应用在复杂数据类型(比如Date_and_Time/Array/String等)在FB、FC之间的传递。而Any可以看做是对Pointer的延伸,因为由10Byt

2、e组成的Any中Byte4~Byte9就是一个Pointer。了解指针的格式十分重要,为正确使用指针,应阅读如下内容:1、"SIMATICProgrammingwithSTEP7V5.5"05/2010第27.3.4章参数类型2、文档:1008用于S7-300和S7-400的语句表(STL)编程3、文档:F0215,S7-300和S7-400寻址1.2为什么语句LAR1P##PointerInput在一个函数(FC)中是无效的,然而,同样的语句在一个功能块(FB)中是有效的?在FC被调用时,复杂数据类型例如指针是被复制到调用者的临时变量区中,在FC内部对此

3、V区地址直接取址放入到地址寄存器AR1或AR2是不被编译器规则接受的(导致MC7寄存器信息过长),也就是说在FC内部通过P#进行地址寄存器取址仅能支持Temp临时变量。因此如果需要在FC中操作指针等复杂输入输出变量地址需要使用累加器进行中转。考虑到程序的一致性、遵守编译器规则和STL手册中LAR1指令说明,建议用户使用如下指令操作:LP##PointerInputLAR11.3STEP7中哪些操作会覆盖DB/DI寄存器或者地址寄存器AR1/AR2的内容?下面说明了可能引起DB/DI寄存器或者地址寄存器AR1/AR2内容改变的一些操作:·DB寄存器和AR1受

4、到影响的操作1.使用完整的DB路径(如LDB20.Val)或者调用FC/FB时使用DB块完整地址作为其参数,则DB寄存器内容被覆盖。例如在OB1中调用FC1后,DB寄存器变成20。OPNDB1CallFC1Input(bit):DB20.DBX0.2因此在编程的时候,OPN指令打开数据块,通过DBXx.y的方式访问其中内容,但是如果在打开数据块后DB寄存器的内容被修改了,则DBXx.y的方式访问变量则会访问到错误的地址。可以通过使用符号寻址的方式或者使用完整路径编程避免,当然重新使用OPN指令也是可以的。2.调用FC时使用string,array,stru

5、cture,UDT作为其形参或者调用FB时使用string,array,structure或者UDT作为其inout形参,在FC/FB程序中访问这些地址则AR1寄存器内容被覆盖,因此当使用AR1进行间接寻址时需要注意AR1内容的正确性。·AR2地址寄存器和DI寄存器在FB中作为参数和静态变量的基址寻址使用。AR2和DI如果被修改,会影响FB的参数访问,如果希望在FB中使用DI寄存器或者地址寄存器AR2,必须预先保存它们中的内容,并在使用后恢复它们,例如:TAR2#AR2_SAVE;//AR2寄存器状态保存到#AR2_SAVEL               

6、     DINO;T                    #DB2_SAVE;//DI寄存器状态保存到#DB2_SAVEUserProgramLAR2            #AR2_SAVE;//AR2寄存器恢复到使用前状态OPN            DI[#DB2_SAVE];//DI寄存器恢复到使用前状态1.4如何得到多重背景FB中的变量在背景DB里的绝对偏移量呢?可以用下面的方法处理:TAR2(得到多重背景FB在背景DB里的偏移地址)ADDW#16#00FFFFFF(屏蔽掉存储区ID,可参考32位指针格式)LP##Variable(得到变量在

7、多重背景FB里的地址)+D(多重背景FB的偏移地址与变量在多重背景FB里地址相加,即得到实际绝对偏移量)LAR1上述语句就是就得到了变量在背景DB中的绝对偏移量,从而供后续程序处理。1.5如何在程序中使用ANY型指针?简要说明如下:L            P##Input                //指向存储地址指针Input首地址//这个参数是一个Any类型,P##Input指向参数Input的值所在地址,这就是指针的指针LAR1                                                           

8、     //装载到地址寄存器AR1中。L            

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。