恭喜,你发布的帖子
发布于 2021-01-06 22:55:48
3楼
1、第一张图中的意思是检测enable的上升沿,对#statPosTimes清零;#statPosTimes是实际已执行的重复定位次数,#PosTimes是设定的重复定位次数。
2、#state表示FB执行到哪一步了,即case语句在哪一步执行;#status 表示FB的状态,是否报错,是否第一次调用,通过数值来表示。
3、第二张图片,不是程序,是注释,用来解释检测 FB is disabled,您可以忽略该注释。
4、 #posOffset 是每次定位时的定位距离;#resetPos用于对实际已执行的重复定位次数清零。
5、对于133行,我做个解释,其余的您可以按照我上面所描写的statPosTimes 、statPosTimes 、
#PosTimes、#status 、#posOffset 、#resetPos每个具体含义,重新读一遍程序,我想你肯定会懂得。
133:轴的目标位置=轴的当前位置+定位距离,你可以想想,每次的目标位置不就是当前位置加上定位的距离吗,无论转盘已经完成多少次定位?
6、151和170是可以实现上升沿的,通过扫描时序实现,当#resetPos=1时的那个周期,先扫描151行,,后扫描170行,此时#stateRe'setPosOld还是0,所以,执行151行时即检测到了上升沿。
7:221:#state表示FB执行到哪一步,错误发生时,#state=0表示#FB_STATE_NO_PROCESSING。
谢谢老师。
那如果把170行的程序 插到155和154行的中间,也就是ELSE指令的前面,这个和现在的程序实现的功能有区别吗?
老师还是关于这个绝对定位的问题。我假设:#posTimes=3 、#startPos=1、#posOffset=90
124 假如#instMcMoveAbsolute.Done 没有输出
127 程序不执行
130 条件满足 ,就执行绝对值定位的程序(131-141),然后就完成了转盘旋转90度。然后程序继续往下走,然后就退出了CASE指令。但是#posTimes设置的是3,实际执行了一次,那还剩2次,然后下面的程序就是检查故障和设置故障状态。(这里就完成了一个扫描周期)。假设这时候没有出现任何错误,enable一直处于接通的状态。那就会又执行CASE指令,因为没有故障而且enable一直处于接通的状态,所以#statFBState里面的值就不会改变,还是等于30,那么就又会进行绝对值定位。然后#startPos=1是一直保持的,那绝对值定位不是一下就执行了3次了吗?而且还是不会停顿的那种,就是一下转了270°,而且即使#startPos的信号是点动了一下,接通立马松掉,但是PLC的扫描周期是很快的,所以还是会产生上面所描述的场景,那设置#posTimes的值又有啥意义呀,所以老师这里为什么不用#startPos的上升沿呢?
请填写推广理由:
分享
只看
楼主