1

我最近开始从事 PLC 结构化文本编程工作。请原谅我的菜鸟问题,但我怎样才能保留上升沿检测器的值?

我正在考虑某种 RS 触发器。

我正在使用 codesys v2.3,并且有一个功能块 (R_TRIG) 用于检测从假到真的信号变化。然而,功能块的输出信号持续大约 1 秒(无论循环时间如何 -> 我已经尝试过非常高的值)。

我试图通过一个简单的 if 来保留该值:

IF Rtrigger.Q = true THEN Triggermemory := true;

然而,新变量 ( Triggermemory) 遵循边沿触发输出值(当然)。

有什么方法可以保留来自边缘检测器的曾经真实的信号?

我曾尝试使用保留和持久性全局变量(没有成功),但我认为真正的问题是我需要以某种方式将这个真实值存储在某个地方。

4

1 回答 1

0

根据您的代码“Triggermemory”不应跟随边沿触发输出变量。

仅当您在此处输入加注条件时才应设置它。 IF Rtrigger.Q = true THEN Triggermemory := true; END_IF

此代码是否在函数、功能块或程序中?如果您在函数中声明了 RTrigger,则每次进入函数时都会“创建”它,每次退出函数时都会“销毁”它。所以 RTrigger 不会像你期望的那样工作。

如果此代码在函数中,您可能需要考虑将其创建为全局变量。

但是 ,如果您只想检查变量是否变为 TRUE,您是否考虑使用双稳态 SR?如果变量在任何时候变为 TRUE,这将变为 TRUE。即使变量返回为假,它也将保持为真。

然后您可以使用“重置”输入强制它回到重置位置(FALSE)。

关于“持久性全局变量”,当您希望变量在重置后仍然存在时,这些变量很有用。

于 2020-04-30T10:50:33.023 回答