Я работаю с C# над созданием приложения, похожего на другие приложения для чтения OBD2.
Я протестировал адаптер OBD2, который подключается через порт Bluetooth к моему ПК. Я тестировал этот адаптер с помощью следующей программы "Torque" и должен сказать, что программа работает действительно здорово. Я читаю все параметры. Я даже тестировал его с программой, которая создает виртуальный COM-порт на ПК и имеет цикл, который дает мне разные состояния и сообщения, и с этим моя программа работает правильно, без ошибок.
Итак, моя проблема возникает, когда я получаю первое сообщение от своей машины.
Эта часть кода фактически получает PID автомобиля. И в этом примере PID, который я получаю, имеет следующий формат: 010D Bus..init error (я уверен, что это сообщение, но я не уверен, что это исходный формат , может на одну точку больше или меньше).
private string GetValue(string pid)
{
sp.Write(pid + "\r");
System.Threading.Thread.Sleep(100);
const int buffSize = 1024;
bool cont = true;
int count = 0;
byte[] bff = new byte[buffSize];
string retVal = string.Empty;
while (cont)
{
count = sp.Read(bff, 0, buffSize);
retVal += System.Text.Encoding.Default.GetString(bff, 0, count);
if (retVal.Contains(">"))
{
cont = false;
}
}
return retVal.Replace("\n", "");
}
Затем я захожу в эту функцию:
public int? GetSpeedKmh()
{
CheckSerialPort();
const string obdMessage = "010D";
if (OnGetSpeedInit != null)
OnGetSpeedInit(new OBDIIEngineEventArgs(null, obdMessage));
string data = GetValue(obdMessage);
int? retVal = (data.Contains("NO DATA")) ? null : (int?)Convert.ToInt32(data.Split(' ')[2].Replace("\r>", string.Empty), 16);
if (OnGetSpeedDone != null)
OnGetSpeedDone(new OBDIIEngineEventArgs(retVal, obdMessage, data.Contains("NO DATA")));
return retVal;
}
Теперь в этой строке возникает ошибка: int? retVal = (data.Contains("NO DATA")) ? null : (int?)Convert.ToInt32(data.Split(' ')[2].Replace("\r>", string.Empty), 16);
Потому что я получаю сообщение об ошибке инициализации шины, и он не может определить, что написано.
Так что я могу сделать, чтобы исправить эту программу? У кого-нибудь есть похожая проблема? Я уверен, что адаптер OBD2 работает, COM-порт получает данные, и я проверил его с другими программами, и он считывает все данные, которые мне нужны.
Я пытался погуглить, и я не могу найти ничего, что могло бы решить мою проблему.
data
в ответе отGetValue(obdMessage);
? Любая ошибка, которую вы получите из упомянутой вами строки, будет связана с манипулированием строкой или невозможностью преобразовать значение вint
. Действительно лиdata
состоит из трех частей после того, как вы разделили пространство? - person itsmatt   schedule 10.09.2012