Forum: PC-Programmierung Interprozesskommunikation


von chaqy B. (bigchaq)


Lesenswert?

hallo zusammen,
ich hoffe dass ich im richtigen Forum bin ;)
In meinem Projekt,soll ich die Kommunikation zwischen eine
3d Robotersimulation mit einer SPS über Bussytem-IO realisieren.
Die Simulation besteht aus verschiedene Motoren und Sensoren, die analog 
zu den realen Geräten über Eingäng und Ausgäng verfügen.
Da die Robotersimulation auf c# basis laüft,habe ich an .COM gedacht, um 
die Kommunikatin zwischen den Softwarekomponenten (Motoren,Sensoren)und 
den Ports "Interprozesskommunikation".
Meine Kentnisse in .COM ist sehr bescheiden,deswegen würde ich gern mal 
paar fragen stellen:
-ist .COM das richtige dafür?
-ist dieser Lösungsweg überhaupt möglich?
-oder hat jemand einen besseren Vorschlag?
ich bedanke mich im voraus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mehrere Programme unter Windows könnten auf unterschiedlichste Weisen 
kommunizieren. Wenn sie alle auf einem Rechner laufen, gibt es unter 
anderem folgende Mechanismen:

- Windows-Nachrichten
- Named Pipes
- COM
- Sockets
- Shared Memory mit Mutexen zur Synchronisation

Netzwerkübergreifend gehen

- Named Pipes
- DCOM ("distributed COM")
- Sockets

von Sven P. (Gast)


Lesenswert?

SHM artet oft in äußerst hässliches Herumgesperre mit Mutexen/Semaphoren 
aus, ist eher etwas, um schnell große Datenberge umherzuschaufeln.

(Benannte) Umleitungen sind eine wundervolle Sache, wenn man die 
Anwendungskomponenten nachher einfach zusammenstöpseln möchte, quasi ein 
Quellen-Senken-Konzept. Sofern man die benannten Umleitungen im 
Dateisystem verankern kann ('FIFO'), so bietet sich die Benutzung von 
Standardein- und Ausgabe an, und zwar mit einem einfachen 
Klartextprotokoll. Dann kann man prima debuggen und auch von Hand 
interagieren.

Schließlich könntest du echte Sockets benutzen. Sollte dann aus 
irgendwelchen Gründen ein Teil der Anwendung umziehen müssen, etwa auf 
ein Embedded-Linux-System, hast du leichtes Spiel.

Ansonsten würde ich ganz stark die Finger von COM, DCOM, ActiveX, DDE 
und all diesen Versuchsballons lassen...
Schau mal in 'The Art Of UNIX Programming' hinein, da ist ein ganzes 
Kapitel über die vielfältigen IPC-Mechanismen unter UNIX geschrieben. 
Vieles geht sicherlich nicht direkt unter Windows, aber um mal zu 
überfliegen, was wozu geeignet ist, taugts allemal.

von Raik C. (raik_c)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sven P. schrieb:
> (Benannte) Umleitungen

Ist das die offizielle Bezeichnung für "named pipe"? Ich nutze die 
Dinger seit bald 18 Jahren, aber dieser "Übersetzung" bin ich noch nicht 
begegnet.

Das ist ja noch schlimmer als die "serielle Zeigereinheit", mit der IBM 
uns beglücken musste.

Named Pipes bieten Sockets gegenüber den Vorzug, daß sie mit Paketen 
arbeiten können, werden am einen Ende der Pipe nacheinander vier 
Schreibvorgänge mit 1000, 750, 1200 und 900 Byte durchgeführt, kommen am 
anderen Ende auch vier einzelne Pakete dieser Größen an, die mit 
entsprechenden Lesezugriffen auch einfach aus der Pipe 'rauszuholen 
sind.
Bei Sockets muss aufgrund der streamorientierten Architektur anders 
vorgegangen werden, das aber ist je nach Anwendung kein Problem.

Ein Server kann auch mehrere Instanzen gleichzeitig zur Verfügung 
stellen, was auf den ersten Blick für größere verteilte Systeme sehr 
praktisch erscheint. Die Erfahrung allerdings zeigt, daß MS den Gebrauch 
von "named pipes" nicht übermäßig unterstützt, mit jeder neueren 
Windowsversion schwindet die Anzahl simultan nutzbarer "named pipes" pro 
Rechner, was nirgends dokumentiert ist.

Für Neudesigns halte ich Sockets für eine sinnvollere Lösung, allein 
schon aus Gründen der Portabilität auf andere Systeme.

von chaqy B. (bigchaq)


Lesenswert?

Zuerst möchte ich mich für eure Antworten bedanken.
Was Betriebsysteme angeht,kenne ich mich nur mit Windows einbisschen 
aus,also UNIX kommt aufkeinen fall in Frage,deswegen würde ich gern in 
Windows bleiben,und mich mit COM auseinandersetzen.
Ich war bei meiner Suche nach".COM" leider einbisschen verwirrt,denn 
meistens kommt Begriff ".NET" raus. Ich weiss mittlerweile, dass ".NET" 
die Erweiterung von ".COM" ist,allerdings weiss ich nicht in wie fern.
Ist ".Net" eher für die Erstellung von Webapplikationen gedacht?

von Raik C. (raik_c)


Lesenswert?

moin,

ich ziehe meine Link's zurück. Ich dachte Du bist ein wenig vertraut mit 
c#

Raik

von Sven P. (Gast)


Lesenswert?

Du hast da ein sehr tiefgreifendes Verständnisproblem, würde ich meinen.

COM zieht einen immensen Wasserkopf hinterher, deshalb mein Abraten 
davon. Dagegen setzt du mit knapp einem halben Dutzend Funktionen schon 
eine Socketverbindung auf.

Rufus: Keine Ahnung. Ich kenne die Pipe als eine Form der Umleitung, da 
liegt es für mein Empfinden nahe, von benannten und anonymen Umleitungen 
zu sprechen. Mag aber eine eigene Wortschöpfung sein :-)
Und ja, IBM hatte einen fürchterlich gruseligen Wortschatz. Heute 
kümmert sich Microsoft darum, mit der Datenausführungsverhinderung zum 
Beispiel...

Müsste mal im K&R nachschauen, der ist hervorragend übersetzt, mit viel 
Feingefühl, bei der Übersetzung von Fachbegriffen sinnvolle deutsche 
Worte zu prägen.

von chaqy B. (bigchaq)


Lesenswert?

@ haku.
dann würdest du bitte mich besser aufklären.ich setzet mich zum ersten 
mal damit auseinander.

von Rolf Magnus (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Named Pipes bieten Sockets gegenüber den Vorzug, daß sie mit Paketen
> arbeiten können, werden am einen Ende der Pipe nacheinander vier
> Schreibvorgänge mit 1000, 750, 1200 und 900 Byte durchgeführt, kommen am
> anderen Ende auch vier einzelne Pakete dieser Größen an, die mit
> entsprechenden Lesezugriffen auch einfach aus der Pipe 'rauszuholen
> sind.

Das kann man doch bei Sockets auch.

> Bei Sockets muss aufgrund der streamorientierten Architektur anders
> vorgegangen werden, das aber ist je nach Anwendung kein Problem.

Nur wenn man Stream-Sockes benutzt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, .Net ist nicht die Erweiterung von COM (ohne Punkt). COM ("Common 
Object Model") ist eine Technik, die es ermöglicht, Programme aus 
einzelnen Komponenten zusammenzusetzen und dabei eine standardisierte 
Art von Schnittstellen zwischen diesen Komponenten verwendet. Vorläufer 
davon waren OLE und ActiveX. Über COM werden unter Windows auch ganze 
Programme (fern)gesteuert, das nennt sich dann Automation und 
funktioniert z.B. mit Excel und Co.

Nachfolger von COM sind COM+ bzw. DCOM, letzteres ermöglicht auch den 
netzwerkübergreifenden Zugriff auf Komponenten. DCOM ist die Grundlage 
des in der Automatisierungstechnik verwendeten herstellerübergreifenden 
Kommunikaitionsprotokolls OPC ("open process control").

.Net ist eine Laufzeitumgebung für in dafür angepassten 
Programmiersprachen (C#, VB.Net sowie die Perversion "Managed C++" bzw. 
"C++/CLI" und viele andere) geschriebene Programme, die eine sehr 
ausführliche und weitgehende Unterstützung für alle möglichen Aufgaben 
zur Verfügung stellt, und innerhalb gewisser Grenzen sogar 
plattformübergreifend verwendbar ist (unter anderen Betriebssystemen 
gibt es die .Net-Implementierung Mono).

Um COM bzw. dessen neueren Varianten zu nutzen, muss man keine 
.Net-Sprache einsetzen.

von chaqy B. (bigchaq)


Lesenswert?

danke für die ausführliche Erklärung.Mich haben ein paar Artikel ausm 
Internet durcheinander gebracht, in denen es stand, dass .Net die 
Erweiterung von .COM sein sollte,ich fand dafür keinen richtigen 
zusammenhang,aber wie gesagt,ich setze mich zum ersten mal damit 
auseinander.
danke noch mal.

von Arc N. (arc)


Lesenswert?


von Purzel H. (hacky)


Lesenswert?

COM ist eher nicht ein Ansatz zur Interprozesskommunikation, eher um 
Komponenten gemeinsam zu benutzen. Die Verzahnung ist fuer 
Interprozesskommunikation viel zu hoch.
Ich wuerd auch mit Sockets arbeiten. Das laeuft auf demselben Rechner 
auf shared memory hinaus, laesst sich aber ohne Probleme auf 
verschiedenen Rechner verteilen, auch zum Debuggen.

von Rolf Magnus (Gast)


Lesenswert?

Doppel Oschi schrieb:
> Ich wuerd auch mit Sockets arbeiten. Das laeuft auf demselben Rechner
> auf shared memory hinaus, laesst sich aber ohne Probleme auf
> verschiedenen Rechner verteilen, auch zum Debuggen.

Shared memory ist schon noch was anderes. Bei Sockets müssen die Daten 
mehrfach kopiert werden, auch lokal. Und falls es sich um TCP- oder 
UDP-Sockets handelt, muß das ganze auch noch zweimal durch den IP-Stack 
durch.
Dafür ist es, wie du schon schreibst, flexibler, und die Synchronisation 
ergibt sich ganz von selbst.
Der Overhead bei den Sockets kommt auch erst zum Tragen, wenn es sich um 
richtig große Datenmengen handelt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.