L DW#16#84000000
T #afPointerBuffer
L #nStepNo
L 1
-I
L 2
*I
L #nStartAddress
+I
L 8
*I
ITD
L #afPointerBuffer
OD
T #lPointer
OPN "RecipeParametersDB"
L #RPPointer
LAR1
L DBW [AR1,P#0.0]
T #nReturnValue
问题补充:
请高人帮忙翻译一下,最好每条都加上备注。特别是乘以8的作用是什么。
最佳答案
1、首先要理解指针寻址的格式:
、当是对DB区域寻址时指针为:AR=840xxxxx。
、32位指针为:其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR: 0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
、例如: 当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,例如:
0000 0000 0000 0000 0000 0000 0000 1010 = 1.2
2、程序:
L DW#16#84000000
T #afPointerBuffe r//缓存区指针设置为对DB区域寻址。
L #nStepNo
L 1
-I
L 2
*I
L #nStartAddress//#nStepNo减1,再乘以2,再与#nStartAddress相加
+I
L 8
*I
ITD //上述之和乘以8.,形成32位指针格式(见上述)。
L #afPointerBuffer
OD
T #lPointe r //形成32位指针与缓存区指针与 形成lPointe r
OPN "RecipeParametersDB"//打开数据块
L #RPPointer
LAR1 //j将#RPPointer装入AR指针
L DBW [AR1,P#0.0]
T #nReturnValue // 取AR指针指示的地址中的数据存入 #nReturnValue中。
程序中的减1,再乘以2,再与#nStartAddress相加,这需要你自己根据你的数据格式来理解了,从程序中是看不出来。
3、单从上述程序不可能全面了解指针寻址,建议先看看,看就明白了,以后就不求人了:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
《S7-300/400PLC ANY指针使用详解》连接:
http://blog.sina.com.cn/s/blog_669692a601019hvt.html
4、特别是乘以8的作用是什么?
乘以8就是要形成指针格式,见上述。
提问者对于答案的评价:
感谢阿鸣老师共享的STL相关资料,通过它大体搞懂了指针的用法。在此还是要感激艾星落尘的详细解答。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc216725.html