Emulator-Programm

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Emulator-Programm

Beitrag von BerLin »

Hallo Forum,

vielleicht habt ihr mal wieder einen guten Tipp für mich.

Ich möchte gerne ein Gerät emulieren, welches normalerweise über die RS-232 mit dem PC verbunden ist.
Programm und Gerät kommunizieren mit 19200kBaud miteinander. Das Programm für den normalen Gebrauch funktioniert bereits und ist natürlich in Lazarus geschrieben. Programm und Gerät tauschen 10-20 mal pro Sekunde Daten aus.
Es wäre durchaus möglich das über zwei Dateien zu machen, aber die Lösung finde ich nicht besonders elegant.
Das Emulatorprogramm soll plattformunabhängig sein.

Vielen Dank
BerLin

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ähm möchtest du dass wir dir ein Programm schreiben ?
Meine Musik: spiker-music.net

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Nils,

nein das Programm will ich schon selber schreiben. Mir fehlt aber ein guter Ansatz für den Datenaustausch.

Gruß
BerLin

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Geht es dir nur darum das zwei Programm sich "unterhalten" können ?
dafür hatten wir hier im Forum einigen Beiträge....
MFG
Michael Springwald

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Pluto,

genau darum geht es, zwei "unabhängige" Programme sollen sich unterhalten können. Der Verkehr der normalerweise über die RS-232 läuft, soll umgeleitet werden zum Emulatorprogramm.

Gruß
BerLin

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
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:

Beitrag von af0815 »

Such mal nach IPC - Inter Prozess Kommunikation. Das geht in die Richtung
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Beitrag von mschnell »

RS-232 ist ein strom von Bytes. Ersatzweise kann also alles verwendet werden, was einen Strom von Bytes darstellt.

Am verbreitetsten ist da sicherlich TCP/IP ("Telnet"). Vorteil: man kann sogar eine kleine Kistze ("COM-Server" genannt und von vielen Herstellern lieferbar) verwenden um das RS-232 "Gerät" an ein TCP/IP - Kommunikationsprogramm anzuschließen oder umgekehrt das RS-232 - Kommunikationsprogramm an das TCP/IP-basierten Emulatorprogramm anzubinden.

-Michael

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo,

danke für eure Tipps! Vielleicht habe ich vergessen ein wichtiges Detail zu erwähnen. Die Emulation soll bei potenziellen Kunden laufen und einen ersten Eindruck über die Fähigkeiten des Gerätes vermitteln.

Ist da TCP/IP wirklich eine gute Lösung? Da alle W32 Syteme und Linux unterstützt werden sollen.
Ich vermute mal das ich mit IPC besser zu Recht kommme.

Viele Grüße
BerLin

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

TCP/IP ist dafür schon eine gute Idee. Wobei das mit dem COM-Server nicht so einfach ist da müsste man schon noch einiges beachten.

Ich seh 4 Möglichkeiten
1. kein 2. Programm es gibt einen Demo Mode oder in der Schnittstellenauswahl eine Demo Schnittstelle wo das Programm in bestimmten Zyklen Daten aus ner Datei liest und Der verarbeitungsroutine übergibt. Der Aufwand ist minimal.

2. 2. Programm das ü ber TCP/IP daten schickt. Du musst ne 2. Schnittstelle implemenieren und das 2. Programm schreiben wär mir zu aufwendig für den Zweck

3. Das selbe per IPC im Tab System findest du IPCServer und IPCClient hat aber die selben Nachteile wie TCP/IP und TCP/IP kannst du zur not auch über Netzwerke hinweg benutzen.

4. Das 2. Programm sendet die Daten einfach an eine RS232 Schnittstelle und du verbindest die schnittstellen über ein Nullmodem Kabel hat den Vorteil das du nur noch ein Programm schreiben musst und dein Hauptprogramm nicht ändern.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von mschnell »

BerLin hat geschrieben:Ist da TCP/IP wirklich eine gute Lösung? Da alle W32 Syteme und Linux unterstützt werden sollen.
Ich vermute mal das ich mit IPC besser zu Recht kommme.
Gerade wenn mehrere Plattformen unterstützt werden sollen, ist TCP/IP vorzuziehen. TCP/IP ist auf allen Systemen in ähnlicher weise verfügbar und wenn Du eine einfache systemunabhängige Library benutzt (z.B. Synapse), brauchgst Du Duch um die Systemn-API nicht zu kümmern. Für IPC gibt es (leider) soweit eich weiß keine systemunabhängige Library.

Ich halte es auch für einen großen Vorteil von TCP/IP, dass Du, wenn es nötig ist, damit die beiden Programme auch auf zwei unterschiedlichen Rechnern installieren kannst und wenn Du willst die Verbindung auch über Internet routen kannst.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Für IPC gibt es (leider) soweit eich weiß keine systemunabhängige Library.
Und was ist mit den fpc/Lazarus Komponenten ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von mschnell »

Christian hat geschrieben:Und was ist mit den fpc/Lazarus Komponenten ?
Welche fpc/Lazarus-Komponenten können eine Datenübertragung zwischen zwei laufenden Programmen machen ? Das müsste RPC (= remote procedure call), (named) Pipe, shared Memory und Messages, oder etwas ähnliches sein. Und das auch noch mit einer Plattfom-unabhängigen Schnittstelle zum User-Code...

Mir kommt da RemObjects in den Sinn (ist für FPC, aber nicht für Lazarus spezifiziert). Das kostet aber Geld.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Lese doch ab und zu mal meine Antworten bevor du was dahinterpflasterst oder Schau ab und zu mal in deine Komponentenpalette. Dort findest du dann IPCServer und IPCClient. Die implementieren Plattformübergreifende IPC auf vielen Plattformen sogar mit mehreren Methoden (Memory mapped Files, Pipes, Messages...)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Leute,

vielen Dank für eure Vorschläge!
Ich habe mich für zwei Lösungswege entschieden, welche ich mal probieren werde.

Der Lösungsvorschlag mit dem Nullmodemkabel ist technisch möglich, aber welcher neue PC hat überhaupt noch eine, wenn nicht sogar zwei Schnittstellen?
Einfach eine Programmerweiterung zu programmieren wäre auch möglich, aber der Emulator soll im Gegensatz zum Programm Closed Source sein.

Verbleiben noch TCP/IP und IPC.
Ich werde mal mit den IPC-Lazarus Komponenten anfangen.

Ihr hört von mir, danke
BerLin

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Leute,

ich stehe gerade etwas auf dem Schlauch.
Ich versuche mich gerade an der simpleipc.

Ich habe zwei Testprogramme geschrieben eines läuft als Server, das andere als Client. Die Verbindung zwischen beiden Programmen besteht.
Auf beiden Programmen läuft jeweils ein Server und Client. Richtig?
Im Verzeichnis /tmp sehe auch 2 pipes.

Wie tausche ich nun einfache Strings zwischen Server und Client aus?

Wenn es klappt veröffentliche ich auch ein Demoprogramm!
Merci
BerLin

Antworten