Serielle Schnittstelle

Rund um die LCL und andere Komponenten
Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Serielle Schnittstelle

Beitrag von Mathias »

Was für eine Komponente könnt ihr mir für den Zugriff auf Com-Ports empfehlen ?
Ich brächte dies für die Kommunikation mit einem Arduino.
Sie sollte unter Windows und Linux laufen.

Ich habe mit die Pakage von Synapse angeguckt, diese würde funktionieren, aber vielleicht kennt ihr etwas einfacheres, als diese Vollpaket.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

AndreasMR
Beiträge: 98
Registriert: Di 4. Aug 2015, 15:29
OS, Lazarus, FPC: Linux, Raspbian, Windows
CPU-Target: 64/32 Bit

Re: Serielle Schnittstelle

Beitrag von AndreasMR »

Hallo Mathias,

folgende Packages für die Unterstützung der seriellen Schnittstellen gibt es u.a.:
- Synaser
- LazSerial
- 5dpo

Beste Grüße

Andreas
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0

wp_xyz
Beiträge: 5377
Registriert: Fr 8. Apr 2011, 09:01

Re: Serielle Schnittstelle

Beitrag von wp_xyz »

Mathias hat geschrieben:vielleicht kennt ihr etwas einfacheres, als diese Vollpaket.
Du brauchst von Synapse nur die units synaser, synafpc und snautil.

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Serielle Schnittstelle

Beitrag von marcov »

Es gibt auch noch TComport. Einfacher Kode, und es gibt mehrere FPC ports.

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Serielle Schnittstelle

Beitrag von Mathias »

Es geht noch viel einfacher, eine einfache Serial Unit ist bei Lazarus schon dabei.
uses Serial;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5377
Registriert: Fr 8. Apr 2011, 09:01

Re: Serielle Schnittstelle

Beitrag von wp_xyz »

Mathias hat geschrieben:Es geht noch viel einfacher, eine einfache Serial Unit ist bei Lazarus schon dabei.
uses Serial;
Aber die fpc-Unit "serial.pp" enthält "uses BaseUnix,termio,unix;" - d.h. sie ist unter Windows nicht verwendbar, wie der OP möchte.

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Serielle Schnittstelle

Beitrag von Mathias »

Aber die fpc-Unit "serial.pp" enthält "uses BaseUnix,termio,unix;" - d.h. sie ist unter Windows nicht verwendbar, wie der OP möchte.
Hast recht, Windows findet die Unit Serial nicht.

Gemäss diese Tutorials: http://wiki.freepascal.org/Hardware_Access#TLazSerial

Müsste es auch unter Windows gehen. :shock:
Siehe Program TestSerialPortCom;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5377
Registriert: Fr 8. Apr 2011, 09:01

Re: Serielle Schnittstelle

Beitrag von wp_xyz »

Jetzt hast aber du recht: Gestern führte mich die Windows-Suche nur zur Unit serial im rtl\unix-Ordner, aber heute sehe ich auch eine im packages\rtl-extra\Win-Ordner der fpc-Quellen. Nur das Hinzufügen zu "uses" geht so nicht, da findet Lazarus nur die Unix-Version. Offenbar ist rtl-extra nicht im normalen RTL-Package enthalten. Ich denke, ich schreibe da mal einen Bug-Report.

[EDIT] Nach dem ersten Response auf den Bug-Report nochmals probiert: Plötzlich geht es. Allmählich zweifle ich an mir...

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Serielle Schnittstelle

Beitrag von Mathias »

[EDIT] Nach dem ersten Response auf den Bug-Report nochmals probiert: Plötzlich geht es. Allmählich zweifle ich an mir...
Welches Lazarus/FPC Version verwendest du mit Windows ?
Mit 1.4.2 / 2.6.4 geht es nicht.


Ich verwende momentan den synaser.
Wen aber die unit Serial und Win und Linux geht, fände ich das besser, als wen man Fremd-Produkte verwenden muss.


Ich noch eine Frage zur seriellen Schnittstelle.
Soviel ich weiss, hat diese Schnittstelle Hardware-Seitig keinen Buffer.
Unter DOS musste man jedes Zeichen einzeln über Port $3F8 einlesen.

Haben die heutigen Betriebssysteme einen Buffer eingebaut ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

NoCee
Beiträge: 175
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Serielle Schnittstelle

Beitrag von NoCee »

Hallo,
ich verwende schon mehrfach Synaser. 5dpo basiert so weit ich weiß auch darauf.
Synaser funktioniert bei mir absolut zufriedenstellend auf Win und Linux.
Allerdings hatte ich zu Anfang Probleme mit dem Empfang mehrerer Schnittstellen da die Funktion blockierend ist.
So hatte ich dann mehrere Sekunden Verzögerungszeiten im Programm.
Seit Umbau auf eigene Threads läuft aber auch das einwandfrei.

Aktuelle PC-Hardware hat meistens schon intern einen Buffer eingebaut.
Da hab ich z.B. Schnittstellenkarten im Einsatz, die Sende/Empfangsbuffer von je 128Byte zur Verfügung stellen.
Auf anderer Hardware hab ich eigentlich nie mit weniger als 8 Byte arbeiten müssen.
Allerdings auf der Arduinoseite hatte ich mich ganz zu Anfang mal für einen Typ ohne Hardware RS232
entschieden. Sollte dann eine Soft-RS232 werden. Da hatte ich dann aber bei sehr flotter Gangart ordentlich Probleme
und hab deshalb der Einfachheit halber nen Arduino mit Hardware RS232(TTL-Level) beschafft.
Und der hatte dann auch intern irgend etwas mit 64 Byte Hardwarebuffer so daß da keinen Datenverlust mehr gab.

Unter Dos hatte ich das mal als Technikerprojektarbeit gemach. Mit TP direkt die Ports lesen bzw. schreiben.
Geht natürlich mit Win heutzutage so nicht mehr.
Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Moderne OS lesen da heutzutage ganze Blöcke aus so daß die da nicht einzelne Bytes pollen müssen was ja die Leistung bremsen würde
wenn auf der Schnittstelle nichts geht.

Gruß
NoCee

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Serielle Schnittstelle

Beitrag von Mathias »

Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Das habe ich nicht gewusst, das es früher ein Puffer hatte.

Ich dacht, diese alten Karten hatten noch keinen:
Bild
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Bitschubser
Beiträge: 65
Registriert: Mo 27. Aug 2012, 15:43

Re: Serielle Schnittstelle

Beitrag von Bitschubser »

Mathias hat geschrieben:
Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Das habe ich nicht gewusst, das es früher ein Puffer hatte.

Ich dacht, diese alten Karten hatten noch keinen:
Bild
Da ist ja auch noch ein 8250 drauf, der hatte nur 1-byte Puffer - man hatte also mit dem auslesen genau so lange Zeit bis das nächste Byte vollständig angekommen war...
Ab 16550 gab's ein 16-byte (?) Empfangs-FiFo, ab 16550A funktionierte das dann auch korrekt.
Die Chinesen haben zum Glück nur den "A" kopiert...

Wenn man es ganz genau wissen will "christian blum serial faq" googlen - das steht alles drin.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Serielle Schnittstelle

Beitrag von mschnell »

Mathias hat geschrieben:Das habe ich nicht gewusst, das es früher ein Puffer hatte.Ich dacht, diese alten Karten hatten noch keinen:
Ist eigentlich Wurscht, ob die Hardware einen Puffer hat. Das Betriebssystem realisiert sowieso einen Puffer, zwischen Hardware und User-Programm.

-Michael

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Serielle Schnittstelle

Beitrag von Mathias »

Ist eigentlich Wurscht, ob die Hardware einen Puffer hat. Das Betriebssystem realisiert sowieso einen Puffer
Und was passiert, wen das Betriebssystem z.B. für 1s blockiert ist, wen kein Puffer vorhanden ist ?
Da ist ja auch noch ein 8250 drauf, der hatte nur 1-byte Puffer
Unter DOS hatte dies funktioniert, das es ein Single-Task-Betriebssystem ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Maik81SE
Beiträge: 330
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
CPU-Target: x86-64; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von Maik81SE »

Mathias hat geschrieben:
Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Das habe ich nicht gewusst, das es früher ein Puffer hatte.

Ich dacht, diese alten Karten hatten noch keinen:
Bild
wenn ich einen PC hätte, waäre es ja das richtige um meine Spätere klasse zu teste ;)

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.4 FPC 3.2.2);

Antworten