Event-Übergabe an C Sharp mittels DLL

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
jlazarus
Beiträge: 10
Registriert: Mi 3. Apr 2024, 10:52

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von jlazarus »

Grundsätzlich hast du da recht.
Die Treffer von MS hab ich auch schon alle ausprobiert und die liefern auch alle was aus.
Da kommen aber immer wieder Paketendezeichen rein, die ich nicht wegbekomme.
Egal was ich bisher konfiguriert habe und synaser/sdposerial macht das eben nicht.

Hier ein Beispiel:

Das gibt MS-Serialport aus:
A0 23 0 90
A0 2

3 1 90
A2349

A0 23 3 90
A0

23 4 90
A0 23

5 90
A0 23 6 90

I
I75
A2³49
A0 23

7 90
A2349
I
I75
A2³49

A0 23 8 90


Und das hier sdposerial:
A0 23 0 90
A0 23 1 90
A2349
A0 23 3 90
A0 23 4 90
A0 23 5 90
A0 23 6 90
I
I75
A2³49
A0 23 7 90
A2349
I
I75
A2³49
A0 23 8 90

Benutzeravatar
six1
Beiträge: 837
Registriert: Do 1. Jul 2010, 19:01

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von six1 »

Sieht für mich aus, dass das Zeilenende nicht erkannt wird.
Musst du mal genauer untersuchen, ob da ein #10 oder #13 oder beides kommt.
Gruß, Michael

jlazarus
Beiträge: 10
Registriert: Mi 3. Apr 2024, 10:52

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von jlazarus »

Ja, da kommen in C# zuviel #10 und #13 rein. Und auch nur sporadisch ohne Regelmäßigkeit.
Die falschen kann ich bisher als solche nicht identifizieren und bekomme sie nicht weg.

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von schoschy »

könnte auch am WriteLn aus dem Beispiel liegen.

jlazarus
Beiträge: 10
Registriert: Mi 3. Apr 2024, 10:52

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von jlazarus »

Welches WriteLn meinst du?

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von schoschy »

jlazarus hat geschrieben: Di 9. Apr 2024, 12:28 Welches WriteLn meinst du?

Code: Alles auswählen

    public static void Read()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Event-Übergabe an C Sharp mittels DLL

Beitrag von af0815 »

Ich gehe bei seriellen Kommunikationen immer davon aus, das es ein Datenstream ist, den ich selbst aufbereiten muss. Daher lese ich jeden Teil in einen kontinuierlichen Puffer ein und zerlege den selbst soweit wie möglich. Damit kann ich doppelte Endzeichen, halbe Übertragungen bekämpfen. Die halben Übertragungen, die durch TimeOuts oder stocken im Device passieren sehe ich gar nicht, weil ich immer auf definierte Anfangs bzw. Endzeichen (wie CRLF, LF,CR) warte und dann erst den String zerlege.

Besonders so mancher Industriedrucker oder Barcodescanner macht dir sonst schöne Probleme.

Die Automatik im Endkennzeichen, die man beim Synaser verwenden kann, habe ich nicht aktiv. Ich verwende den Callback wo ich alles geliefert bekomme.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten