Senden von Daten über RS232 mit C#
Ich habe ein Gerät, das kommunizieren zu können, Trog RS232. und es kommt mit dem Kommunikations-Protokoll für den Zugriff auf die Daten.
Schreibe ich ein einfaches c# - Programm zu verbinden und erhalten den status von Gerät und Im nicht ganz sicher, ob ich auf dem richtigen Weg.
Unten ist die Probe, die Sie gegeben haben.
Befehl 50: status request
Den status request Befehl dient zur Anforderung der register-response-Paket, ohne später Aktionen, ändern kann der status des Systems.
0 1 2 3 4 5 6 7 8 9 10 11 12 13
STX ADDR ADDR CMOD "5" "0" "0" "3" TKN1 TKN0 TYP CHKL CHKH 0X0D
STX = Start-byte des Rahmens (0x02)
ADDR = TE550 logische Adresse [2 bytes]
CMOD = CMOD zu finden [1 byte]
TKN1/0 = Frame-id-bytes [2 bytes]
TYPE = byte-Auswahl für anpassbare box (RiqA/B)* [1 byte]
CHKH/L = Checksum [2 bytes]
ENDE = Ende-byte des Rahmens (0x0D)
Beispiel:
status Anforderung vom PC zu TE550 (Adresse 01), CMOD 1, Token-01, Typ 1
[0x02]0115003011EE[0x0D]
Ich kann eine Verbindung zum com-port mit dem seriellen port.
Ich beziehe mich auf die Antwort von DesMy "Serielle Schnittstelle RS232 Kommunikation c# win7 .net framework 3.5 sp1"
Bisher Im nicht immer jedes signal einmal schreiben, um den COM-port. Aber ich bin mir nicht ganz sicher ob ich die richtigen Daten sendet, um den com-port. Derzeit Im senden von Daten, wie unten
comPort.Write("20115003011EE3");
Jede Hilfe /Beispiel code etc wäre sehr geschätzt werden.
public void ConnectRS232 ()
{
try
{
SerialPort mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.ReadTimeout = 2000;
mySerialPort.WriteTimeout = 500;
mySerialPort.DtrEnable = true;
mySerialPort.RtsEnable = true;
mySerialPort.Open();
mySerialPort.DataReceived += DataReceivedHandler;
mySerialPort.Write("20115003011EE3");
}
catch (Exception ex)
{
textBox1.Text = ex.Message;
}
}
public void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
System.Threading.Thread.Sleep(500);
string indata = sp.ReadExisting();
this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });
}
private void DisplayToUI(string displayData)
{
textBox1.Text += displayData.Trim();
}
- Hallo, können Sie nach dem code, die Sie bisher getan haben
- Ich haben gemeinsam den code so weit.. jede Hilfe würde geschätzt werden. Danke.
- Brauche ich zum konvertieren der Daten in byte[] vor dem schreiben auf die serielle Schnittstelle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Umgang mit low-level-I/O-port, Zeichen nicht Byte!
Senden Sie keine strings. Erstellen ein byte-stream mit den richtigen Zeichen und versende.
[In .NET Zeichen sind shorts, nicht bytes. Egal. Verwenden Sie bytes.]