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
Hallo Grimmbizkit,
SerialPort-Klasse
herbivore
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
Kann ich das so senden oder muss ich das irgendwie anders machen?
DA gibts ja noch andere eigenschaften, Read Timeout Write timeout etc.
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
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.
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
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.
Der Code an sich ist erstmal ok. Dass es nicht funktioniert kann viele Gründe haben:
Hilfreich sind Programme wie Portmon.exe (kann man kostenlos downloaden), die den Datenverkehr der seriellen Schnittstelle aufzeichnen.
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.
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.
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.
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.