Serielle Schnittstelle
-
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
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.
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
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
Hallo Mathias,
folgende Packages für die Unterstützung der seriellen Schnittstellen gibt es u.a.:
- Synaser
- LazSerial
- 5dpo
Beste Grüße
Andreas
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
Re: Serielle Schnittstelle
Du brauchst von Synapse nur die units synaser, synafpc und snautil.Mathias hat geschrieben:vielleicht kennt ihr etwas einfacheres, als diese Vollpaket.
-
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
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
Es geht noch viel einfacher, eine einfache Serial Unit ist bei Lazarus schon dabei.
uses Serial;
uses Serial;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Serielle Schnittstelle
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 hat geschrieben:Es geht noch viel einfacher, eine einfache Serial Unit ist bei Lazarus schon dabei.
uses Serial;
-
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
Hast recht, Windows findet die Unit Serial nicht.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.
Gemäss diese Tutorials: http://wiki.freepascal.org/Hardware_Access#TLazSerial
Müsste es auch unter Windows gehen.
Siehe Program TestSerialPortCom;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Serielle Schnittstelle
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...
[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
Welches Lazarus/FPC Version verwendest du mit Windows ?[EDIT] Nach dem ersten Response auf den Bug-Report nochmals probiert: Plötzlich geht es. Allmählich zweifle ich an mir...
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
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
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
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
Das habe ich nicht gewusst, das es früher ein Puffer hatte.Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Ich dacht, diese alten Karten hatten noch keinen:

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
Bitschubser
- Beiträge: 65
- Registriert: Mo 27. Aug 2012, 15:43
Re: Serielle Schnittstelle
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...Mathias hat geschrieben:Das habe ich nicht gewusst, das es früher ein Puffer hatte.Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Ich dacht, diese alten Karten hatten noch keinen:
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
Ist eigentlich Wurscht, ob die Hardware einen Puffer hat. Das Betriebssystem realisiert sowieso einen Puffer, zwischen Hardware und User-Programm.Mathias hat geschrieben:Das habe ich nicht gewusst, das es früher ein Puffer hatte.Ich dacht, diese alten Karten hatten noch keinen:
-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
Und was passiert, wen das Betriebssystem z.B. für 1s blockiert ist, wen kein Puffer vorhanden ist ?Ist eigentlich Wurscht, ob die Hardware einen Puffer hat. Das Betriebssystem realisiert sowieso einen Puffer
Unter DOS hatte dies funktioniert, das es ein Single-Task-Betriebssystem ist.Da ist ja auch noch ein 8250 drauf, der hatte nur 1-byte Puffer
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- 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
wenn ich einen PC hätte, waäre es ja das richtige um meine Spätere klasse zu testeMathias hat geschrieben:Das habe ich nicht gewusst, das es früher ein Puffer hatte.Beim Auslesen des Ports laß man zwar immer nur eine Adresse, aber im Chip waren intern da auch schon 16 Byte Empfangsbuffer integriert.
Ich dacht, diese alten Karten hatten noch keinen:
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'