浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
楼主  发表于: 2014-04-07 12:14
各位师傅好,我这里有一段西门子300 plc 的程序,看不太明白,望师傅不吝赐教,谢谢。
这段指针和循环,不知道该怎么看?



     
[ 此帖被浮生若梦在2014-04-07 12:22重新编辑 ]
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158720 分
在线时间: 3159(小时)
注册时间: 2007-11-21
最后登录: 2024-11-17
查看sjm213的 主题 / 回贴
1楼  发表于: 2014-04-08 09:04
OB1中:
IN0=P#DB9.DBX0.0
//表示IN0处为指针,指针指向DB9.DBX0.0

FC35中:
L P##IN0
LAR1
L W[AR1,P#0.0]
T #TEMP2
L D[AR1,P#2.0]
LAR1
OPN DB[#TEMP2]
这段程序代表将数据块号“9”取出来放到#TEMP2中,将指针实际地址取出备用,然后打开数据块DB9;

接下来的程序都是传送+四则运算了,可自己分析;
所有间接寻址上的AR1都指DB9.DBX0.0,在它的基础上加上偏移量就是实际地址;
如DBX[AR1,P#0.1]就是指DB9.DBX0.1,
W[AR1,P#8.0]就是指DB9.DBW8。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158720 分
在线时间: 3159(小时)
注册时间: 2007-11-21
最后登录: 2024-11-17
查看sjm213的 主题 / 回贴
2楼  发表于: 2014-04-08 13:01
前四行是把“9”这个数放到#TEMP2中,所以第七行的OPN DB[#TEMP]实际上就是打开数据块DB9;
五、六行指针指向DBX0.0,而不是DBX2.0(这个DBX0.0是从OB1调用FC35块时的P#DB9.DBX0.0得来的)。
看指针的数据结构: