【发布时间】:2020-03-10 11:42:30
【问题描述】:
我有一个抓取图像并对其进行处理的函数。该功能在从 PLC 接收到过程信号时起作用。 我有一个计时器,它不断检查来自 PLC 的信号。 一旦我收到来自 PLC 的信号,图像就会被抓取并处理,但信号保持真实,直到处理完成并将结果发送给机器人,之后机器人发送停止信号。 有时,处理发生得很快,在机器人发出停止信号之前,该函数再次运行。
这是定时器代码:
private void timer3_Tick(object sender, EventArgs e)
{
chksignal_robot(); //keep checking signal
if (textBox8.Text.Contains("process")) //
{
totalsheetcount++;
grab_image();
Thread.Sleep(200);
processimage();
}
}
尽管信号仍显示“进程”(条件保持为真),但如何使该方法只运行一次?并等到信号停止(条件变为假)并接收到下一个过程信号(条件再次变为真?
【问题讨论】:
-
你不能只使用一个布尔字段,比如
_isRunning吗?或者如果这是多线程的,使用信号量? -
顺便说一句,
Thread.Sleep(200);你为什么要休眠 UI 线程? -
第一个想法是:如果 chkSignal 返回,禁用计时器。然后做魔术,然后检查信号下降,然后重新启动计时器。不过,尚不清楚您是否对时间有一些要求。所以这只是一个粗略的想法,可能需要认真调整。
-
@Çöđěxěŕ 抓取图像后,我想在处理开始前等待几毫秒。
-
我不明白你的代码。 chksignal 是阻塞呼叫吗? chksignal 将 textBox8.Text 设置为启动处理的“处理”吗?听起来您需要检查上升沿。
标签: c# .net if-statement timer conditional-statements