Hallo an alle,
folgende Situation:
Ich habe einen MassFlowController zum Regeln / Einstellen eines definierten Durchflusses.
Der Datenaustausch PC -- MFC erfolgt über einfache ASCII-Zeichnfolgen. Port Einstellungen habe ich vorgenommen:
Bits pro Sekunde:
9600
Datenbits:
8
Parität:
keine
Stoppbits: 1
Flusssteuerung: keine
Über Hyperterminal funktioniert das Senden und Empfangen sehr gut.
Bei meiner C# Anwendung klappt das senden einwandfrei. Sobald ich aber ein Kommando (beispielsweiser [h]) sende, friert mir der Empfang der Daten ein und nach 30 oder 40 sekunden geht alles wieder normal weiter.
Sende ich wieder ein beliebiges Kommando friert mir wieder das Empfangen ein für einige Sekunden.
Wie gesagt bei Hyperterminal funktioniert das Senden und Empfangen ohne Probleme. Gesendet werden auch nur ganz einfache Kommandos ([h] für einstellungen, ~~ für Daten anfordern, [u0] für kontinuierliches senden aus, [u1] etc....).
try
{
if (_port != null && _port.IsOpen)
throw new Exception("Already connected: " + _port.PortName);
_port = new SerialPort();
_port.PortName = port;
_port.BaudRate = 9600;
_port.DataBits = 8;
_port.Parity = Parity.None;
_port.StopBits = StopBits.One;
_port.Handshake = Handshake.None;
_port.WriteTimeout = 250;
_port.ReadTimeout = 250;
_port.Open();
_port.DiscardInBuffer();
_port.DiscardOutBuffer();
_port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
return true;
}
catch
{
return false;
}
Schön wenn du die funktionierende Initialisierung zeigst, aber da kann man nicht sehen was Du beim Empfang falsch machst.
Hallo,
der MFC nutzt wohl ein "normales ASCII" Protokoll.
Ich habe im Moment nur das Datenbit übertragen. Ich denke das ist der Fehler.
Kann mir jemand sagen wie das Protokoll aufgebaut ist?
STX - Adress - Command - Data - CRC - ETX ?????
Ich hab es rausgefunden:
byte[] s = new byte[3];
s[0] = (byte)0X64; // Commando d
s[1] = (byte)0X0D; // CR
s[2] = (byte)0X0A; // LF
_port.Write(s,0,s.Length);
funktioniert!!! Vielen Dank trotzdem für die Antwort.