Laden...

_port.DataReceived friert ein

Erstellt von azzidodabass vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.293 Views
A
azzidodabass Themenstarter:in
5 Beiträge seit 2012
vor 9 Jahren
_port.DataReceived friert ein

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;
            }
F
10.010 Beiträge seit 2004
vor 9 Jahren

Schön wenn du die funktionierende Initialisierung zeigst, aber da kann man nicht sehen was Du beim Empfang falsch machst.

A
azzidodabass Themenstarter:in
5 Beiträge seit 2012
vor 9 Jahren

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 ?????

A
azzidodabass Themenstarter:in
5 Beiträge seit 2012
vor 9 Jahren

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.