Я пытаюсь отделить входящие данные от последовательного порта и обновить текстовые поля последующими данными.Сначала я вижу, возможно ли разделение на '$', и следующее слово после разделения - "GPGGA".Если да, я хотел бы извлечь данные из этого предложения, где «,» служит разделителем.Теперь, как вы видите, я сначала обновляю все данные, считываемые последовательным портом, и это прекрасно работает.Отображается полное предложение, содержащее строку «GPGGA».Но после того, как я разделил его, часть предложения, содержащая «GPGGA», выглядит примерно так: «GPGGA, 1 \ 0 \ 0 \ 0 \ 0 \ 0 ...», когда действительно предложение, которое было только что обновлено до текстакоробка раньше была "GPGGA, 160333 ,,, ......".Я абсолютно уверен, что в предложении есть значение после GPGGA, но когда я пытаюсь посмотреть на него в режиме отладки, строка 'ser_data' и, следовательно, ее последующие подстроки все показывают тот же мусор.Итак, последнее текстовое поле, которое я хочу обновить, неизбежно заканчивается отображением только 1.
Может кто-нибудь сказать мне, почему это происходит, и как я могу это исправить.Мне срочно нужно это для моей дипломной работы.
Спасибо, Бретт
PS: я прикрепил код ниже.
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] bData = null;
bData = new byte[40];
serialPort.Read(bData, 0, 40);
string ser_data = System.Text.Encoding.GetEncoding("utf-8").GetString(bData);
txtAck.Invoke(new UpdateTextCallback(this.UpdateTextAck), new object[] { ser_data });
string[] str = null;
str = new string[40];
string[] str_ack = null;
str = ser_data.Split('$');
if (str.Length > 1)
{
for (int i = 1; i < str.Length; i++)
{
string temp1 = null;
temp1 = str[i];
if (temp1.StartsWith("GPGGA"))
{
string[] temp2 = null;
temp2 = temp1.Split(',');
StreamWriter objWriter = new System.IO.StreamWriter(@"D:\Server.txt", true);
if (temp2.Length > 1)
{
string Time_GPS = temp2[1];
txtEasting.Invoke(new UpdateTextCallback(this.UpdateTextEast), new object[] { Time_GPS });
string text = "Time : " + Time_GPS;
// StreamWriter objWriter = new System.IO.StreamWriter(@"D:\Server.txt", true);
objWriter.WriteLine(text);
}
if (temp2.Length > 2)
{
string Lat = temp2[2];
txtLatitude.Invoke(new UpdateTextCallback(this.UpdateTextLat), new object[] { Lat });
string text = " Latitude : " + Lat;
// StreamWriter objWriter = new System.IO.StreamWriter(@"D:\Server.txt", true);
objWriter.WriteLine(text);
}
if (temp2.Length > 4)
{
string Long = temp2[4];
txtLongitude.Invoke(new UpdateTextCallback(this.UpdateTextLong), new object[] { Long });
string text = " Longitude : " + Long;
// StreamWriter objWriter = new System.IO.StreamWriter(@"D:\Server.txt", true);
objWriter.WriteLine(text);
}
if (temp2.Length > 9)
{
string Alt = temp2[9];
txtNorthing.Invoke(new UpdateTextCallback(this.UpdateTextNorth), new object[] { Alt });
string text = " Altitude : " + Alt;
// StreamWriter objWriter = new System.IO.StreamWriter(@"D:\Server.txt", true);
objWriter.WriteLine(text);
}
string Text = "." + '\n';
objWriter.WriteLine(Text);
objWriter.Close();
temp2 = null;
flag_status = 0;
}
temp1 = null;
}
}
str = null;