通过串口连接的设备的生命状态。
大家好。
如何检查设备是否响应请求?我在谷歌上搜索了几天,并尝试了很多 SO 的解决方案,但没有给我预期的结果。经过多次尝试,我的观点如下所述。我想我已经很接近了,但现在我需要的帮助很少,所以提前感谢您的每一个回答。
目前的情况
我现在在做什么很简单。首先,我在应用程序开始时打开串行端口serialPort.Open()
(数据接收几乎所有应用程序运行时间)。
因为这只是我表格中的一个例子,所以只有一个标签叫做labelStatus
andlabelStatus.Text = "Not connected"
接下来我要添加一个计时器,它是 tick 方法,其中包含serialPort.Write()
. 如果这很重要,计时器间隔设置为 100。
private void timer_Tick(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.WriteLine("r"); //I'm sending "r" message and device send data back
}
}
下一步是创建DataReceived
如下事件(非常简化的版本,在我的应用程序中接收到的数据被解析为浮点数并存储在数组中,但这只是为了显示问题)
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string someVariable = serialPort.ReadLine();
labelStatus.Invoke((MethodInvoker)(() => labelStatus.Text = "Connected"));
//If i received something that means the device is plugged in and connection is correct (still very simplified)
}
最后一件事是创建ErrorReceived
方法。
private void serialPort_ErrorReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
labelStatus.Invoke((MethodInvoker)(() => labelStatus.Text = "Not connected"));
}
直到现在一切都很好。发送数据有效。DataReceived 事件在发送数据时每 100 毫秒执行一次。我的数据被正确接收,没有问题。当我启动应用程序labelStatus
文本是“未连接”(设备电缆未插入)。当我插入设备labelStatus
文本更改为“已连接”时。但是现在当我插入电缆ErrorReceived
事件时没有执行并且labelStatus
文本仍然是“已连接”。所以正如我之前问过的:如何检查设备是否仍连接到计算机?(或者也许:当数据未接收时如何执行 ErrorReceived 事件?)。
注意:串行端口ReadTimeout
设置为 300 毫秒。
我试过什么
我已经尝试了很多东西,但我脑海中的这个似乎应该有效,但没有。
我已经修改了DataReceived
事件,并且我已经尝试手动执行如下方法serialPort.ReadLine()
try/catch
TimeoutException
ErrorReceived
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
string someVariable = serialPort.ReadLine();
labelStatus.Invoke((MethodInvoker)(() => labelStatus.Text = "Connected"));
//If i received something that means the device is plugged in and connection is correct (still very simplified)
}
catch (TimeoutException)
{
serialPort_ErrorReceived(null, null);
}
}
我希望这会像我想要的那样工作。
顺便提一句。对不起我的英语不好。它并不完美,但我尽我所能。干杯!