如下程序,功能是比较实际位置在设定位置与允许偏差间FC块BR位有信号,驱动条件。
下面程序,有三个定义输入 IstPos,SollPos,PosTol,分别是实际位置,设定位置,以及允许偏差。其余全部是临时变量
现在我对Net1和Net3比较不明白,这是做什么用的
net1: TAR1 #AR1_SAVE
TAR2 #AR2_SAVE
L DBNO
T #DB_SAVE
L DINO
T #DI_SAVE
net2: L #IstPos
L #SollPos
-D
A >=0
JC m001
NEGD
m001: NOP 0
L #PosTol
<=D
SAVE
net3: LAR1 #AR1_SAVE
LAR2 #AR2_SAVE
OPN DB [#DB_SAVE]
OPN DI [#DI_SAVE]
问题补充:
我想知道如果没有Net1和Net3会怎么样,还有第一步传输AR1的值,这个值哪里来的, 装载DBNO,这个DBNO又是哪里来的,不都是临时变量吗?
最佳答案
net1:TAR1 #AR1_SAVE //将地址寄存器1的数据传给变量#AR1_SAVE
TAR2 #AR2_SAVE //将地址寄存器2的数据传给变量#AR2_SAVE
L DBNO
T #DB_SAVE //将DBNO写入#DB_SAVE
L DINO
T #DI_SAVE //将DINO写入#DI_SAVE
net2:L #IstPos
L #SollPos
-D //#IstPos-#SollPos
A >=0
JC m001 //如果#IstPos-#SollPos的值大于0就跳转到m001,如果#IstPos-#SollPos的值小于0程序继续执行
NEGD //对#IstPos-#SollPos的数值求补码,这个时候得到的其实就是小于0的负数的绝对值
m001: NOP 0
L #PosTol //下装偏差值,
<=D
SAVE //#IstPos-#SollPos的绝对值小于#PosTol 就置位BR位
net3:LAR1 #AR1_SAVE //将原来保存的数据#AR1_SAVE 还给地址寄存器1
LAR2 #AR2_SAVE //将原来保存的数据#AR2_SAVE 还给地址寄存器2
OPN DB [#DB_SAVE] //打开对应DB块的指令
OPN DI [#DI_SAVE] //打开对应DB块的指令
程序段1和程序段3中的关于地址寄存器的指令,主要是还是编程的规范,在有使用的地址寄存器的场合里,这样做的目的就是保证在调用该块后地址寄存器的值不变,特别是地址寄存器2,在调用FB块时对应的背景数据块的调用都是默认采用AR2的。
可能你的程序不全,除了比较指令外没有看到与DBNO和DINO相关的指令。
参考这个链接:http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=140174&cid=1031
提问者对于答案的评价:
给力
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc199484.html