Laden...

Daten an COM Port senden

Erstellt von Grimmbizkit vor 16 Jahren Letzter Beitrag vor 16 Jahren 7.709 Views
G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren
Daten an COM Port senden

Hallo zusammen,

ich habe ein "kleines" Problem.

Ich muss Daten an den COM Port senden, aber habe keine ahnung wie ich das machen soll

Folgende Daten:
0x85
0x00
0x02
0x4D
0x07 <-- Dieser Wert kann sich ändern
0x00

Wie kann ich sowas am einfachsten lösen.

Gruß Simon

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Grimmbizkit,

SerialPort-Klasse

herbivore

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Ich mache das so:


// Am Anfang
using System.IO.Ports;

// Mein Code
SerialPort COM = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
COM.Open();
COM.Write(new byte[] { 0x85,0x00,0x02,0x4D,0x07,0x00 },0,6);
COM.Close();

Aber es scheint nicht zu funktionieren

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Kann ich das so senden oder muss ich das irgendwie anders machen?

DA gibts ja noch andere eigenschaften, Read Timeout Write timeout etc.

N
750 Beiträge seit 2004
vor 16 Jahren

hallo Grimmbizkit,

such doch bitte mal nach SerialPort hier im Forum, vielleicht hilft dir da ein Post weiter. (wenn ja dann poste bitte den entsprechenden link hier in diesem thread!)

Aber es scheint nicht zu funktionieren

was funktioniert nicht?
das senden? oder kommt eine Fehlermeldung ??
konfigurationsfehler ??

nils

?( wer suchet, der findet auch! :]

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Hab mal gesucht, aber nichts richtiges für mich gefunden.

Habs jetzt auch mal so versucht,


            byte[] mb = new byte[6];

            // Objekt erstellen
            SerialPort ComPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            // COM-Port öffnen
            ComPort.Open();
            ComPort.WriteTimeout = 100;

            if (ComPort.IsOpen == true)
            {
                mb[0] = System.Convert.ToByte(0x85);   // Länge (Immer gleich)
                mb[1] = System.Convert.ToByte(0x00);   // ID1 des Geräts
                mb[2] = System.Convert.ToByte(0x05);   // ID2 des Geräts
                mb[3] = System.Convert.ToByte(0x4B);   // Art der Anfrage
                mb[4] = System.Convert.ToByte(0x08);   // Anfrage selber (kann Varieren)
                mb[5] = System.Convert.ToByte(0x5D);   // Checksumme
                
                
                // Senden an COM-Port
                ComPort.Write(mb, 0, 5);
            }
            ComPort.Close();

aber nicht passiert. Keine Fehlermeldung, keine Reaktion am Gerät.
Das Angeschlossene Gerät ist auch entsprechend eingestellt.
Also: 9600,N,8,1

Woran kann liegen, vll am letzten feld? (Checksumme)

Gruß Simon

PS: In der PDF Datei ist die Ansteuerung des Gerätes beschrieben.

N
750 Beiträge seit 2004
vor 16 Jahren

kannste du die schnittstelle zwischen dir und dem gerät "aufzeichnen" ??
damit könntest du zumindest sehen ob überhaupt was gesendet wird 😉

oder änder mal:

// Senden an COM-Port
                ComPort.Write(mb, 0, 5);

in

// Senden an COM-Port
                ComPort.Write(mb, 0, mb.Length);

nils

?( wer suchet, der findet auch! :]

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Weiß nur leider nicht, wie ich das "aufzeichnen" kann.

das mit mb.Lenght bringt nicht

im Ausgabe fenster steht nur:
Der Thread 0x1260 hat mit Code 0 (0x0) geendet.

Und in der Eigenschaft ComPort.BytesToWrite steht immer 0.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Der Code an sich ist erstmal ok. Dass es nicht funktioniert kann viele Gründe haben:

  1. Falsche Port-Einstellungen (da du kein Handshake angibst, würde ich hier mal schauen). Auch DTR wäre eine Kandidat bei XON/XOFF.
  2. Falsches Kabel (ggf. Nullmodem), vielleicht fehlen auch Steuerleitungen im Kabel (billige Modem-Kabel haben manchmal nur 3 oder 5 Leitungen statt 7 oder 9). Bei Hardware-Handshake ein Problem.
  3. Eventuell vorhandenes Protokoll nicht sauber implementiert

Hilfreich sind Programme wie Portmon.exe (kann man kostenlos downloaden), die den Datenverkehr der seriellen Schnittstelle aufzeichnen.

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Kabel:
Also das Kabel sollte richtig sein, ist 1:1 verbunden.
Und laut dem PDF brauche ich nur die adern: 2,3,5

Porteinstellungen:
In C# und am geräte sind die Einstellungen gleich, auch in Windows habe ich die Port einstellungen gleich der anderen gemacht.

Protokoll:
> Eventuell vorhandenes Protokoll nicht sauber implementiert
Wie meinst du das?

Laut PortMon wird was geschickt.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Tja, 3-Draht bedeutet, dass kein HW-Handshake gefahren wird. Bei 9600 und den paar Bytes sollte auch kein XON/XOFF zuschlagen. Hast du mehrere serielle Ports an deinem Rechner? Ggf. falsch konfiguriert, so dass das Kabel vielleicht am falschen Port hängt. Ggf. mal mit einem 2. Rechner, Terminalprogramm und einem Null-Modem-Kabel testen.

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Habe laut Windows 2 Com Ports, aber an meinem Rechner ist nur einer. Also hinten dran.

Welches TerminalProgramm kann ich denn nutzen, bzw wie nutzt man so etwas?

Was ist das besonderte an einem Nullmodemkabel?

nutze zur zeit eins, was eins zu eins verbunden ist, habe ich selber gemacht, und geprüft. Weil ich ein Kabel brachte mit einer Seite Stecker andere Buchse.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Original von Grimmbizkit
Was ist das besonderte an einem Nullmodemkabel?

Da sind Sende- und Empfangsleitung gedreht. Damit verbindet man zwei Rechner über den seriellen Port. 1:1-Kabel verbinden einen Rechner mit einem Datenendgerät, z.B. Modem oder Drucker. Welches Kabel verwendet werden soll, sollte aber aus der Gerätebeschreibung hervorgehen. Damit einhergehen tut i.d.R. das Geschlecht der Steckverbinder. Die Tatsache, dass du dir ein spezielles Kabel bauen mußtest, bzw. einen Gender-Changer einsetzen musst, weist darauf hin, dass tatsächlich ein Nullmodemkabel notwendig ist.

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Verwende bereits ein selbst gebautes Kabel (1:1 verbunden)