PLC程序中 间接寻址用法?

L P#2.0
T #P_2
L #P_2
L L#16
/I
T #MAX_SHU

1). L P#2.0 // 将地址 2.0 加载到累加器1
2).T #P_2 // 将累计器1中的 2.0 放入局部变量 P_2中
3).L #P_2 // 将 局部变量P_2中的数值加载到累加器1
4).L L#16 //将 累加器1的内容放入累加器2,将整数常数(32位)16 加载到累加器1
5)./I // 累加器1=累加器2/累加器1 (16位整数除法计算)
6).T #MAX_SHU //将 商存入 局部变量MAX_SHU
具体请查阅《S7-300/400 STL 语句表编程》
(专业从事 自动化控制系统 电气设计、软件编程、调试、培训)追问

/I 这一条整除计算结果,我感觉应是地址的跳转。但不知道怎么跳转

追答

/I 从本意理解 是累加器2的低字节除以累加器1的低字节,商存入累加器1的低字节
这段程序感觉本身就有错误!

这个是不是西门子PLC的 程序?
记忆中西门子的S7-300/400间接寻址编程不是这样使用的。
感觉这个 是修改 “地址指针”
这个/I 因为是16位除法计算,所以只修改了累加器的低16位,高16位没有修改,保持原来的值
也就是只修改了地址指针的低16位 ,我是这样理解的。
这个还需要 结合整个程序的上下文去理解。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-25
你应该是用的西门子的PLC吧,就直接拿一个应用的例子来解释吧。
例如,
直接寻址是你直接对一个区间的变量赋值或者搬移,例如MOV 500,VB100;
间接寻址是你对一个地址赋值或者搬移,例如,你先将 VB100的地址赋给AC1,指令是
MOVD &VB100,AC1
然后再MOVD 500,*AC1。
这样的两种做法的结果相同;
这样看,感觉好像直接寻址更方便,其实不然,比如如果你是要根据条件赋值给VB100~VB200中的其中一个;
如果你用直接寻址,那么你得根据条件写一百个这样的指令;例如MOV 500,VB100;MOV 500,VB101。。。。。。
如果你用间接寻址,那么你还是用上述两句话,
MOVD &VB100,AC1;
这时候你的AC1就相当于有了VB100的地址,你再加一句,ADDD AC1,VB10;
之后再用MOVD 500,*AC1;以后你只需要对VB10赋值,就可以随意的进行更改你要用的VB,例如VB10 = 1的话,就相当于给VB101赋值。这样的用法在大规模的程序中,是非常方便的。本回答被网友采纳
相似回答