Ich entwickle einige Monitoring-Tool für eine Art von Protokoll über die serielle Kommunikation basiert.C# Serieller_Anschluss Geschwindigkeit
Serielle Baudrate = 187,5kb Ich verwende System.IO.Ports.SerialPort Klasse.
Dieses Protokoll hat vier Arten von Frames. Sie haben 1Byte, 3Bytes, 6Bytes, 10-255Bytes. Ich kann mit ihnen arbeiten, aber ich empfange sie zu spät, um zu antworten.
Für den Anfang habe ich erst nach ex verpackt erhalten. 96ms (zu spät), und es enthält etwa 1000B. Dies bedeutet 20-50 Frames (zu viel, zu spät). Später arbeitet es stabiler, 3-10Bytes, aber es ist immer noch zu spät, weil es 1-2 Frames enthält. Natürlich ist 1 Bild OK, aber 2 ist zu spät.
Können Sie mir zeigen, wie kann ich damit umgehen zuverlässiger? Ich weiß, dass es möglich ist.
revision1:
Ich versuchte gerade Weg:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!serialPort1.IsOpen) return;
this.BeginInvoke(new EventHandler(this.DataReceived));
}
Und Backgroud Arbeiter: Und ... neuen Tread (Read) und ... immer das gleiche. Zu spät, zu langsam. Muss ich zurück zu WinApi gehen und einige kernel32.dll Funktionen importieren?
Revision 2: ist dies der Teil des Codes des Einsatzes in der Treading Weise:
int c = serialPort1.BytesToRead;
byte[] b = new byte[c];
serialPort1.Read(b, 0, c);
Ich denke, es Gebrauch ein Problem mit Strom innerhalb Serialport-Klasse ist. Oder ein Synchronisationsproblem.
Revision 3: ich beide nicht auf einmal verwenden !! Ich habe es einfach anders versucht.
Grüße MarekK
Ohne irgendeine Art von Code und irgendeine Art von Informationen werden sehr wenige Menschen Ihnen helfen können. Wie liest du vom Hafen? –
Allgemein funktioniert der Code und ist ziemlich groß. Es sieht so aus, dass ein Teil des Codes auf etwas wartet. Ich kenne keine Hexe. – MrHIDEn
** Ich habe versucht, BaseStream zu verwenden, die SerialPort-Unterklasse ist. Ich habe das gleiche Ergebnis. ABER !!!!!! Ich fing an, nach PCIe-Karte für meinen Laptop zu suchen, und ich habe gefunden, dass Konverter, die auf USB sogar in PCI Expresscard basieren, keine gute Kommunikationsebene wegen des USB-Stapels bereitstellen. Wo ich denke, Datenstrom wartet auf USB-Verfahren. Ich kann mir vorstellen, dass dies die größten Schwierigkeiten bereitet. Ich werde PCIe-232-Karte kaufen. ** – MrHIDEn