例1
L +300 //将数值装入累加器1人低中
+AR1 //将累加器1低字中的内容(整数,16位)加到地址寄存器1
例2
+AR1 P#300.0 //将偏移量300.0加到地址寄存器1
没明白它的意思是将300与AR1的内容相加
还是将300传送到AR1
假如是内容相加能把例1与例2内部数值用2进制形式各举个例子吗?
第二个问题可以参见图片
1处的ENT指令能不能省略?在300中使用L装载指令就可以把数据装入累加器1,累加器2.。在400中是不是使用L指令也只能装入累加器1和累加器2.假如要装入累加器3时必须用ENT指令。也就时假如使用L指令3次时,第1次装入的数据就丢失了。
2.处可以看出在运算时它跟300的累加器是一样的。数据是自动上移的。从累加器4复制到累加器3,从累加器3复制到累加器2.累加器4的内容不变。这个跟300的是一样的。
感觉400的PLC计算只用累加器1和2,累加器3和4只是暂存数据用的。不知道上面我的理解对不对。还请指正
图片说明:
最佳答案
、第一个问题:
1、从+300与 P#300.0 的类型区别,一个是十进制常数,一个是地址常数。见
见《S7-300的数据类型》其中,8、常数的表示方法。连接:
http://blog.gkong.com/more.asp?name=zhyo720211&id=2005
2、有关指令:
AR1:加地址寄存器 1 中内容的整数(16 位)通过累加器 1 低字中的数值定义。允许范围-32768 - +32767。
+AR1 <P#Byte.Bit>:要加上的偏移量通过 <P#Byte.Bit> 地址定义。
3、例,+300,将+300加到AR1中整个的数据上:
+AR1原内容:0000 0000 0000 0000 0000 0000 1101 0100(b)即表示地址26.4。加300(十六进制12C)后为0000 0000 0000 0000 0000 0001 1111 1110(b)即表示地址63.6.。
4、例,P#300.0,只将+300加到AR1中表示字节的地址上:
+AR1原内容:0000 0000 0000 0000 0000 0000 1101 0100(b)即表示地址26.4。加P#300.0后为0000 0000 0000 0000 0001 0100 0011 0100(b)即表示地址326.4.。
、第二个问题:
1、1处的ENT指令可省略。
2、你的理解是对的。
上传截图的例子只是一个描述ENT指令功能的例子,目的是让读者熟悉ENT指令及实数运算后四个累加器当前内容应什么。在实际编程中,关键要清楚各累加器当前装的是什么。
提问者对于答案的评价:
特别感谢两位专家的热心解答,意思基本是搞明白了.感觉这两个计算有点问题,不知是否是我搞错了,还是?
3、例,+300,将+300加到AR1中整个的数据上:
+AR1原内容:0000 0000 0000 0000 0000 0000 1101 0100(b)即表示地址26.4。加300(十六进制12C)后为0000 0000 0000 0000 0000 0001 1111 1110(b)即表示地址63.6.。
4、例,P#300.0,只将+300加到AR1中表示字节的地址上:
+AR1原内容:0000 0000 0000 0000 0000 0000 1101 0100(b)即表示地址26.4。加P#300.0后为0000 0000 0000 0000 0001 0100 0011 0100(b)即表示地址326.4.
二。感觉ENTET指令是不能省略的.装载指令只能对累加器1和累加器2起作用.进入累加器3和累加器4需要有ENTE或PUSH指令.
最佳答案作者回复:
楼主给出的程序是STL手册中一段程序,其主要是说明指令的应用。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc235968.html