Ich habe eine Menge Probleme beim Versuch, einen seriellen Port zum Empfang der korrekten Nachricht zu bekommen. Es schneidet die Nachrichten weiterhin ab. Hier ist mein Code und ich werde versuchen, nach dem Code zu arbeiten.Probleme mit der SerialPort-Klasse
public SerialComms(SerialPort sp)
{
this.sp = sp;
this.sp.Open();
this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
do
{
Console.WriteLine("port open waiting message");
Console.ReadKey();
} while(!_terminate);
this.sp.Close();
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string dataReceived;
StringComparer strComp = StringComparer.OrdinalIgnoreCase;
SerialPort sp = (SerialPort)sender;
int i = sp.BytesToRead;
byte[] _byte = new byte[i];
char[] _char = new char[i];
sp.read(_byte, 0, i);
dataReceived = Encoding.UTF8.GetString(_byte);
//dataReceived = new string(_char);
//dataReceived = sp.ReadExisting();
if (strComp.Equals("00000000000000"), dataReceived))
_terminate = true;
Console.WriteLine(dataReceived);
}
Jetzt habe ich ein Testprojekt, das wir zum Testen unserer seriellen Coms in der Produktion mit Legacy-Software verwenden - ich weiß, das läuft gut. Ich habe einen seriellen Monitor an den Port angeschlossen und die übermittelte Nachricht wird ohne Probleme übertragen. Wenn ich eine Nachricht wiedas erste Mal durch es schicke geht normalerweise gut durch, und auf der Empfängerseite, zeigt der Monitor es durch; Wenn es jedoch auf der Konsole gedruckt wird, wird es nach der ersten Nachricht abgeschnitten. Ich füge Screenshots der Nachricht auf dem Port-Monitor und die Konsole Ausgang (die Smiley und Herz, das der Präfix-Bytes sein converted- ist zeigen, warum es ein Herz und ein Smiley-Gesicht ist habe ich keine Ahnung) geht durch
Ok, ich kann das Bild nicht posten, weil ich nicht genug Reputation dafür habe. Ich werde schreiben, wie die Ausgabe auf der Konsole unten aussieht (in diesem Fall hat es auch die erste Nachricht gekürzt :()
Auf dem Monitor des seriellen Anschlusses wird die Nachricht wie folgt übertragen (ich schickte es drei Zeiten mit ein paar Sekunden 'Verzögerungszeit' zwischen jeder Nachricht senden:
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .123456789.
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 0,123456789.
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .123456789.
Auf der Konsole erhielt ich folgende (die ☺ ♥ und Zeichen sind 02 und 03 , sie sind ein STX und ETX-Nachricht, die für unsere Getriebe) Standard ist:
☺123456
78.901.234 ♥
☺
4 ♥
☺
4 ♥
Dieses Problem mich verrückt fährt !!! Bitte helfen Sie! Das Erbe wird mit dem veralteten MSCommLib und wir bewegen sich eine mögliche Kombination von zwei Fragen auf .NET 4
Ich ersetzte Ihre Platzhalter durch die echten Symbole, wenn ich sie umgekehrt habe, bitte korrigieren. Für die Screenshots können Links zu einer Website wie http://imgur.com/ und einem Benutzer mit höherem Wiederholungsstatus Links zu Bildern anzeigen. –