1,在S7-300/400寻址有一段内容不是很清楚:
m1: FP M10.0
JCN M2
L MD4
L P#2.0
/D
+ 1
T MD8 // 如果数值相等,记录MD4指针的数据,将转换为数组,
(地址值/P#2.0)+1 存储于MD8中,
请问MD8里面存储的是指针还是数值呢?
2,L P#20.0
TAR1
L 1234
T W[AR1,P#2.0]
Q:这个AR1里面是多少呢?
3, LAR1 P##AUFTRAG_START
//;
L 1
AIN1: T #LOOPCOUNT
A [AR1,P#0.0]
JC AIN3
//;
L 32
>=I
JC AIN2
//;
L #LOOPCOUNT
+ 1
+AR1 P#0.1
JU AIN1
//;
AIN2: L 0
AIN3: T #AUFTRAG
这段的意思,非常感谢!
问题补充:
看了TAR1?的解释说是将地址寄存器?1?中的内容传送到累加器?1
请问那么第二段程序是怎么知道AR1里面的地址的呢?
最佳答案
1段
MD8存储的是整数型的数据个数。MD4是指针。
2段
AR1 是P#20.0这个常数指针
3段
LAR1 P##AUFTRAG_START // 装载指针 #AUFTRAG_START 到 AR1
L 1 // 将计数放在 #LOOPCOUNT
AIN1: T #LOOPCOUNT // 循环检测开始部分
A [AR1,P#0.0] // 测试第一个位变量
JC AIN3 // 如果测试某位为1,则跳出循环
L 32
>=I
JC AIN2 //如果32个位都测试过了,没有为1的位,即全为0,则跳转到
//AIN2,在标号处给标志变量 #AUFTRAG 变量赋值0
//;
L #LOOPCOUNT
+ 1 //计数次数+1
+AR1 P#0.1 //指针加 P#0.1,为下一轮循环做准备,使其指向下一个位
JU AIN1 //无条件跳转到循环体开始处,进行下一轮测试
//;
AIN2: L 0
AIN3: T #AUFTRAG //存储的是第一个为1的位的在字中的位置。
参考资料‘
SIMATIC S7-300和S7-400编程的语句表
https://support.industry.siemens.com/cs/document/109751814
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/document/79632832
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/document/76492353
使用间接寻址编写循环程序
https://support.industry.siemens.com/cs/document/19345564
提问者对于答案的评价:
感谢您的回答。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc283006.html