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



     
[ 此帖被浮生若梦在2014-04-07 12:22重新编辑 ]
浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
1楼  发表于: 2014-04-07 12:25
图片共3 张,中间第二张图片,跳转标号m003只有一个,不是截图上的“有2个跳转标号m003” 不知道我这样解释师傅们听明白了没。。。。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5168 个
工控威望: 7391 点
下载积分: 156673 分
在线时间: 3122(小时)
注册时间: 2007-11-21
最后登录: 2024-04-28
查看sjm213的 主题 / 回贴
2楼  发表于: 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。
浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
3楼  发表于: 2014-04-08 11:50
引用
引用第2楼sjm213于2014-04-08 09:04发表的中去  :
OB1中:
IN0=P#DB9.DBX0.0
//表示IN0处为指针,指针指向DB9.DBX0.0

FC35中:
.......

感谢版主大人的热心回复!
另外,我这里还有些疑问,fc35,前四行语句,我的理解是:
把指针值 DB9.DBW0放到#TEMP2中去,
fc35,第五,六,行语句,是将 DB9.DBD2装载到地址寄存器AR1中去,
fc35,第七行语句,是打开数据块 DB9.DBW0,但这样理解好像也不对。
我对300的指针这块还是不理解。
sjm213
有小知识,无大学问。
级别: 论坛版主

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

浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
5楼  发表于: 2014-04-08 15:25
再次谢谢版主,
关于指针这块,我再研究下,有问题时,还得请教您,谢谢。
浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
6楼  发表于: 2014-04-10 12:30
引用
引用第4楼sjm213于2014-04-08 13:01发表的  :
前四行是把“9”这个数放到#TEMP2中,所以第七行的OPN DB[#TEMP]实际上就是打开数据块DB9;
五、六行指针指向DBX0.0,而不是DBX2.0(这个DBX0.0是从OB1调用FC35块时的P#DB9.DBX0.0得来的)。
看指针的数据结构:
[attachment=119802]


版主请看,我这样的理解对吗?
另外我还是想不明白,累加器和地址寄存器都是32位的,它们怎么能装得下48位的pointer 类型的数据呢?
浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
7楼  发表于: 2014-04-10 12:37

另外,我这里还有以前自己分析过的一段程序,对于程序中指针部分的理解,总感觉有问题,还望版主大人指教,在这里先说声,谢谢了,谢谢版主大人耐心解答,才使得我们这样的新手少走弯路。
lichenhui333
只有搞不定的人,没有搞不定的事。
级别: 工控侠客
精华主题: 0
发帖数量: 566 个
工控威望: 4091 点
下载积分: 7994 分
在线时间: 506(小时)
注册时间: 2010-12-21
最后登录: 2020-12-14
查看lichenhui333的 主题 / 回贴
8楼  发表于: 2014-04-10 13:50
里面不会出现6个字节的,当装载双字时,ACUU1里面的原有内容自动转存到ACUU2里面去了。ACUU2里面原有内容被覆盖。这样ACUU1里面的就装载双字了。
[ 此帖被lichenhui333在2014-04-10 13:59重新编辑 ]
chinasiemens
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看chinasiemens的 主题 / 回贴
9楼  发表于: 2014-04-10 17:12
围观大神
浮生若梦
级别: 略有小成
精华主题: 0
发帖数量: 61 个
工控威望: 200 点
下载积分: 2395 分
在线时间: 86(小时)
注册时间: 2013-05-28
最后登录: 2017-12-31
查看浮生若梦的 主题 / 回贴
10楼  发表于: 2014-04-10 20:14
引用
引用第8楼lichenhui333于2014-04-10 13:50发表的  :
里面不会出现6个字节的,当装载双字时,ACUU1里面的原有内容自动转存到ACUU2里面去了。ACUU2里面原有内容被覆盖。这样ACUU1里面的就装载双字了。

pointer类型的数据是直接装载到 ACCU1中去的,但 ACCU1是32位,pointer类型数据是48位啊。
zhangdingye
生命没有投机,平凡也能创造奇迹!
级别: 略有小成
精华主题: 0
发帖数量: 142 个
工控威望: 296 点
下载积分: 7283 分
在线时间: 74(小时)
注册时间: 2011-09-14
最后登录: 2014-04-14
查看zhangdingye的 主题 / 回贴
11楼  发表于: 2014-04-13 16:49
哥们  你的程序是怎么从电脑上面 弄下来的   不是 复制粘贴不行吗
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go