ST PLC编程:检测上升沿并记住其值
ST PLC programming: Detecting a rising edge and remembering its value
我最近开始从事PLC结构化文本编程。请原谅我的菜鸟问题,但我怎样才能保留上升沿检测器值?
我在考虑某种 RS 触发器。
我正在使用 codesys v2.3,并且有一个功能块 (R_TRIG) 用于检测从假到真的信号变化。然而,功能块的输出信号持续约 1 秒(无论循环时间如何 -> 我已经尝试过非常高的值)。
我尝试用一个简单的 if 来保留这个值:
IF Rtrigger.Q = true THEN Triggermemory := true;
但是新变量(Triggermemory
)跟随边沿触发输出值(当然)。
有什么方法可以保留来自边缘检测器的曾经真实的信号吗?
我试过使用保留和持久全局变量(没有成功),但我认为真正的问题是我需要以某种方式将这个真实值存储在某个地方。
根据您的代码 "Triggermemory" 不应遵循边沿触发输出变量。
只有当你在这里提出的加注条件时才应该设置它。
IF Rtrigger.Q = true THEN
Triggermemory := true;
END_IF
这段代码是在函数、功能块或程序中吗?
如果您在函数内声明了 RTrigger,则每次进入该函数时它将是 "created",而每次退出该函数时它将是 "destroyed"。所以 RTrigger 不会像您预期的那样工作。
如果此代码在函数中,您可能需要考虑将其创建为全局变量。
不过
如果您只想检查一个变量是否曾经变为 TRUE,您是否考虑过使用双稳态 SR?如果变量在任何时候变为 TRUE,这将变为 TRUE。即使变量返回为 false,它也将保持为 TRUE。
然后您可以使用 "Reset" 输入强制它回到重置位置 (FALSE)。
关于 "persistent global variables",当您希望变量在重置后仍然存在时,这些变量很有用。
我最近开始从事PLC结构化文本编程。请原谅我的菜鸟问题,但我怎样才能保留上升沿检测器值?
我在考虑某种 RS 触发器。
我正在使用 codesys v2.3,并且有一个功能块 (R_TRIG) 用于检测从假到真的信号变化。然而,功能块的输出信号持续约 1 秒(无论循环时间如何 -> 我已经尝试过非常高的值)。
我尝试用一个简单的 if 来保留这个值:
IF Rtrigger.Q = true THEN Triggermemory := true;
但是新变量(Triggermemory
)跟随边沿触发输出值(当然)。
有什么方法可以保留来自边缘检测器的曾经真实的信号吗?
我试过使用保留和持久全局变量(没有成功),但我认为真正的问题是我需要以某种方式将这个真实值存储在某个地方。
根据您的代码 "Triggermemory" 不应遵循边沿触发输出变量。
只有当你在这里提出的加注条件时才应该设置它。
IF Rtrigger.Q = true THEN
Triggermemory := true;
END_IF
这段代码是在函数、功能块或程序中吗? 如果您在函数内声明了 RTrigger,则每次进入该函数时它将是 "created",而每次退出该函数时它将是 "destroyed"。所以 RTrigger 不会像您预期的那样工作。
如果此代码在函数中,您可能需要考虑将其创建为全局变量。
不过 如果您只想检查一个变量是否曾经变为 TRUE,您是否考虑过使用双稳态 SR?如果变量在任何时候变为 TRUE,这将变为 TRUE。即使变量返回为 false,它也将保持为 TRUE。
然后您可以使用 "Reset" 输入强制它回到重置位置 (FALSE)。
关于 "persistent global variables",当您希望变量在重置后仍然存在时,这些变量很有用。