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?
InformationsquelleAutor user3928052 | 2014-08-11
Schreibe einen Kommentar