Hallo,
vielen lieben Dank funktioniert hervorragend !!!
Hier mein Code in C# falls es jemanden nützlich sein kann wie die Daten empfangen und ausgewertet
werden. Ich habe die Tele für N1MM und EA4TX/DXLog Format mit dran gelassen sonnst verseht es keiner.
private void StartUdpListener()
{
udpClient = new UdpClient(Int32.Parse(textBox3.Text)); // Port aus Textbox
udpListening = true;
udpListenerThread = new Thread(new ThreadStart(ListenForUdpMessages));
udpListenerThread.IsBackground = true;
udpListenerThread.Start();
}
private void ListenForUdpMessages()
{
string logText = "";
// Thread-sicher den aktuell gewählten Logprogramm-Text holen
this.Invoke((MethodInvoker)(() =>
{
logText = comboBoxLogProgramm.Text;
}));
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
// Auswahl, welches Logformat aktiv ist
switch (logText)
{
case "UCXLog / N1MM / EA4TX":
while (udpListening)
{
try
{
byte[] data = udpClient.Receive(ref remoteEP);
string xmlString = Encoding.UTF8.GetString(data);
// Automatisch erkennen, welches Log gesendet hat
if (xmlString.Contains("<N1MMRotor>"))
{
ParseN1mmRotor(xmlString);
}
else if (xmlString.Contains("<Rotor>") && xmlString.Contains("<app>UcxLog</app>"))
{
ParseUcxLogRotor(xmlString);
}
else if (xmlString.Contains("<EA4TX>"))
{
ParseEa4txRotor(xmlString);
}
}
catch (Exception ex)
{
Console.WriteLine("UDP Error: " + ex.Message);
}
}
break;
case "N1MM":
while (udpListening)
{
try
{
byte[] data = udpClient.Receive(ref remoteEP);
string xmlString = Encoding.UTF8.GetString(data);
if (xmlString.Contains("<N1MMRotor>"))
ParseN1mmRotor(xmlString);
}
catch (Exception ex)
{
Console.WriteLine("UDP Error (N1MM): " + ex.Message);
}
}
break;
case "UCXLog":
while (udpListening)
{
try
{
byte[] data = udpClient.Receive(ref remoteEP);
string xmlString = Encoding.UTF8.GetString(data);
if (xmlString.Contains("<Rotor>") && xmlString.Contains("<app>UcxLog</app>"))
ParseUcxLogRotor(xmlString);
}
catch (Exception ex)
{
Console.WriteLine("UDP Error (UCXLog): " + ex.Message);
}
}
break;
case "EA4TX / DXLog":
while (udpListening)
{
try
{
byte[] data = udpClient.Receive(ref remoteEP);
string xmlString = Encoding.UTF8.GetString(data);
if (xmlString.Contains("<EA4TX>"))
ParseEa4txRotor(xmlString);
}
catch (Exception ex)
{
Console.WriteLine("UDP Error (EA4TX): " + ex.Message);
}
}
break;
default:
Console.WriteLine("Unbekanntes Logformat ausgewählt: " + logText);
break;
}
}
private void ParseN1mmRotor(string xml)
{
try
{
XDocument doc = XDocument.Parse(xml);
var goaziElement = doc.Descendants("goazi").FirstOrDefault();
if (goaziElement != null)
{
double az = double.Parse(goaziElement.Value, System.Globalization.CultureInfo.InvariantCulture);
this.Invoke((MethodInvoker)delegate
{
tBoxDataIN3.Text = "Azimuth: " + az.ToString("F1") + "° (N1MM)";
SetRotor(true, az.ToString("F1"));
rotorDial.Update();
});
}
}
catch (Exception ex)
{
Console.WriteLine("XML Parse Error (N1MM): " + ex.Message);
}
}
private void ParseUcxLogRotor(string xml)
{
try
{
XDocument doc = XDocument.Parse(xml);
var azimutElement = doc.Descendants("Azimut").FirstOrDefault();
if (azimutElement != null)
{
double az = double.Parse(azimutElement.Value, System.Globalization.CultureInfo.InvariantCulture);
this.Invoke((MethodInvoker)delegate
{
tBoxDataIN3.Text = "Azimuth: " + az.ToString("F1") + "° (UCXLog)";
SetRotor(true, az.ToString("F1"));
rotorDial.Update();
});
}
else
{
Console.WriteLine("UCXLog: Kein Azimut-Wert empfangen");
}
}
catch (Exception ex)
{
Console.WriteLine("XML Parse Error (UCXLog): " + ex.Message);
}
}
private void ParseEa4txRotor(string xml)
{
try
{
XDocument doc = XDocument.Parse(xml);
var azimuthElement = doc.Descendants("AZIMUTH").FirstOrDefault();
if (azimuthElement != null)
{
double az = double.Parse(azimuthElement.Value, System.Globalization.CultureInfo.InvariantCulture);
this.Invoke((MethodInvoker)delegate
{
tBoxDataIN3.Text = "Azimuth: " + az.ToString("F1") + "° (DXLog / EA4TX)";
SetRotor(true, az.ToString("F1"));
rotorDial.Update();
});
}
}
catch (Exception ex)
{
Console.WriteLine("XML Parse Error (EA4TX/DXLog): " + ex.Message);
}
}
Nochmals vielen vielen Dank für die tolle und sehr schnelle Unterstützung.
Da kann der nächste Contest kommen
73, Stefan, DK6WT