当事件案例为False时,Laview PID.vi会继续

时间:2015-06-11 18:24:28

标签: pid labview

我正在寻找一种方法,当事件案例容器 false 时,禁止在Labview中运行PID.vi。

程序控制电机位置,使用目标力实际力作为输入参数,保持电缆的恒定张力。输出为电机位置。请注意,重新初始化设置为 false ,因为它需要先前的实例来对电机进行假脱机。

Diagram

目前,当事件情况为 true 时,电机会按预期线轴并保持电缆张力。但是当事件案例状态被切换时,当错误导致电机线轴不稳定时,PID.vi似乎在后台运行。

有没有办法冻结PID控件,使其从停止的位置继续?

2 个答案:

答案 0 :(得分:3)

PID VI不在后台运行。它仅在您调用它时执行。也就是说,PID是基于时间的计算。它计算与上次调用VI时的差异,并使用它来计算新值。如果经过很多时间,它将尝试使用该数据进行修复。

如果要冻结值然后平稳地恢复修复,可以使用顶部的限制输入并将max和min设置为所需的输出。这将导致PID VI始终输出该值。您可能需要一个反馈节点或移位寄存器来记住PID输出的最后一个值。

答案 1 :(得分:1)

Yair所说的并不完全正确 - 积分和衍生术语确实是时间依赖的,但比例不是。可以找到理解PID以及如何在LabVIEW中实现它们的一个很好的参考here(不确定为什么它被存档)。此外,PID VI以G编码,因此您只需打开它们即可查看它们的运行方式。

如果您仔细查看PID VI,您可以看到发生了什么以及为什么您可能得不到您期望的响应。在VI本身中,dt将是1)您设置的内容,或2)基于存储在VI中的刻度计数(默认值)的时间累积。由于您未指定dt,因此PID算法使用调用之间的累计时间。如果您在一段时间内“暂停”计算,则会对积分和微分输出产生影响。

过程变量发生变化时,导数输出将启动(使用过程变量可防止导数踢)。呼叫之间的大量累积时间的影响将是减少该术语的响应。暂停的时间将对积分项产生更大的影响。由于控制器的积分部分的响应与误差超过dt的积分成比例,因此暂停响应越大的响应时间越长,因为算法在{{1}上执行梯形积分}。

我的第一个建议是不要暂停控制器 - 让PID做它应该做的事情。如果您正确使用它,那么您不必停止控制器操作。但是,如果必须暂停控制器操作,请考虑重新初始化控制器。这将迫使控制器重置累计时间项,并且第一次迭代中的响应将完全成比例。

希望这有帮助。