ELM327 returns 发送多个命令时什么也没有
ELM327 returns nothing when sending several Commands
我正在开发一个与我的 ELM327 交互的 WPF 应用程序。它通过蓝牙连接到我的电脑并且能够成功建立它。
当我一次手动发送一个命令时(例如“010C\r”)它正确地 returns 我的车的 RPM(“010C\r41 0C 0C 30 \r ").
然后我尝试每三秒发送一次命令。第一次有时会成功,如果第二次发送,ELM327 returns 什么都没有。如果我逐步调试它,ELM 会正确返回这些值,而不会出现任何错误。我认为 reader 正在读取响应,在 ELM 有时间发送它之前。
循环:
private async Task InitializeElm327()
{
string answer = string.Empty;
tbx_dump.Text += "\n\nSetting up Reader and Writer";
SetupReaderWriter();
tbx_dump.Text += "\nReader and Writer setup finished";
while (true)
{
int revs = await GetRPM();
tbx_revs.Text = revs.ToString();
System.Threading.Thread.Sleep(3000);
}
}
函数表示returns RPM:
private async Task<int> GetRPM()
{
string cmdAnswer = await SendCommand("010C\r");
int rpm = ConvertRPM(cmdAnswer);
return rpm;
}
发送命令的函数:
private async Task<string> SendCommand(string command)
{
tbx_dump.Text += "\n\nSending command " + command + " to Elm327";
m_dataWriter.WriteString(command);
await m_dataWriter.StoreAsync();
await m_dataWriter.FlushAsync();
uint count = await m_dataReader.LoadAsync(512);
return m_dataReader.ReadString(count).Trim('>');
}
有没有办法防止这种情况发生?
正如 fildor 评论的那样,错误是 System.Threading.Thread.Sleep(3000);
我只是用 await Task.Delay(3000);
替换了它,现在它正确 returns RPM。
我正在开发一个与我的 ELM327 交互的 WPF 应用程序。它通过蓝牙连接到我的电脑并且能够成功建立它。
当我一次手动发送一个命令时(例如“010C\r”)它正确地 returns 我的车的 RPM(“010C\r41 0C 0C 30 \r ").
然后我尝试每三秒发送一次命令。第一次有时会成功,如果第二次发送,ELM327 returns 什么都没有。如果我逐步调试它,ELM 会正确返回这些值,而不会出现任何错误。我认为 reader 正在读取响应,在 ELM 有时间发送它之前。
循环:
private async Task InitializeElm327()
{
string answer = string.Empty;
tbx_dump.Text += "\n\nSetting up Reader and Writer";
SetupReaderWriter();
tbx_dump.Text += "\nReader and Writer setup finished";
while (true)
{
int revs = await GetRPM();
tbx_revs.Text = revs.ToString();
System.Threading.Thread.Sleep(3000);
}
}
函数表示returns RPM:
private async Task<int> GetRPM()
{
string cmdAnswer = await SendCommand("010C\r");
int rpm = ConvertRPM(cmdAnswer);
return rpm;
}
发送命令的函数:
private async Task<string> SendCommand(string command)
{
tbx_dump.Text += "\n\nSending command " + command + " to Elm327";
m_dataWriter.WriteString(command);
await m_dataWriter.StoreAsync();
await m_dataWriter.FlushAsync();
uint count = await m_dataReader.LoadAsync(512);
return m_dataReader.ReadString(count).Trim('>');
}
有没有办法防止这种情况发生?
正如 fildor 评论的那样,错误是 System.Threading.Thread.Sleep(3000);
我只是用 await Task.Delay(3000);
替换了它,现在它正确 returns RPM。