WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Interprozesskommunikation

 

Bluesmaster
Themenstarter

Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 02.06.2013, 17:22     Titel:
  Antworten mit Zitat      
Danke.

Die Corba-Schnittstelle werde ich mir mal genauer ansehen.
Ich melde mich dann wenn ich Fragen habe.

Der Link mit der Datenbank scheint bei mir nicht zu funktionieren?

Die SPS ist schon etwas älter, ich glaube eine c++ Schnittstelle
gibt es nur bei neueren Versionen und selbst da habe ich Schwierigkeiten
mir vorzustellen wie das über Ethernet funktioniert.
Ich werde wohl ein eigenes Protokoll aufsetzen müssen Sad

Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2013, 22:38     Titel:
  Antworten mit Zitat      
Bluesmaster hat Folgendes geschrieben:
Der Link mit der Datenbank scheint bei mir nicht zu funktionieren?


Der Link funktioniert, das Forum setzt hinter den Link eine schließende Klammer ")", die entfernt werden muss.

Bluesmaster hat Folgendes geschrieben:

Die SPS ist schon etwas älter, ich glaube eine c++ Schnittstelle
gibt es nur bei neueren Versionen und selbst da habe ich Schwierigkeiten
mir vorzustellen wie das über Ethernet funktioniert.


Corba kann auch unter C genutzt werden. http://en.wikipedia.org/wiki/Common.....quest_Broker_Architecture
Zitat:

Standard mappings exist for Ada, C, C++, C++11, Lisp, Ruby, Smalltalk, Java, COBOL, PL/I and Python. There are also non-standard mappings for Perl, Visual Basic, Erlang, and Tcl implemented by object request brokers (ORBs) written for those languages.


Bluesmaster hat Folgendes geschrieben:

Ich werde wohl ein eigenes Protokoll aufsetzen müssen Sad


Ich empfehle, dass Du Dich mit den Techniken einmal auseinandersetzt und bei solchen Projekten nicht vorschnell eine Entscheidung triffst. Wenn Du Probleme siehst, Dir vorzustellen wie Corba über Ethernet funktioniert, dann stellt sich mir die fachliche Frage, wie Du dann ein eigenes Protokoll mittels Socket entwerfen willst, denn ein Socket ist auch nichts anderes. Da ich eine SPS jetzt im Detail nicht kenne verweise ich einmal auf Encoding bzw Big- & Little-Endian Darstellung, d.h. Dein Protokoll muss gerade diese Dinge korrekt implementieren, damit beide Systeme überhaupt fehlerfrei kommunizieren können.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.06.2013, 23:15     Titel:
  Antworten mit Zitat      
Hallo flashpixx,

Man muss für eine SPS nicht unbedingt ein eigens Protokoll entwickeln, Natürlich gibt es längst etablierte Methoden dafür, siehe z.B. EtherCAT.
Ich finde die Unterscheidung zwischen "Schnittstelle" und "Protokoll" zu abstrakt und ich bezweifele, dass man generell entscheiden kann, welche der beiden Methoden mehr Aufwand erfordert. Die "Schnittstelle" Windows-API ist nicht "einfacher" als die Benutzung eines TCP-Sockets um z.B. einen NTP-Server anzusprechen.

Aber ich erinnere nochmal daran, das dies ist ein Matlab-Forum.
Darum verschiebe ich diesen Thread in den Off-Topic-Bereich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 02.06.2013, 23:15 Uhr von Jan S
Von Matlab intern nach Off Topic
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 01:04     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Man muss für eine SPS nicht unbedingt ein eigens Protokoll entwickeln, Natürlich gibt es längst etablierte Methoden dafür, siehe z.B. EtherCAT.


Einmal der Link http://de.wikipedia.org/wiki/EtherCAT
aber so wie ich EtherCAT gesehen habe, ist dort die Anforderung an Echtzeit, die ja von dem OP nicht gefordert war.

Jan S hat Folgendes geschrieben:

Ich finde die Unterscheidung zwischen "Schnittstelle" und "Protokoll" zu abstrakt und ich bezweifele, dass man generell entscheiden kann, welche der beiden Methoden mehr Aufwand erfordert.


Diese Unterscheidung ist klar definiert, siehe http://de.wikipedia.org/wiki/Programmierschnittstelle / http://de.wikipedia.org/wiki/Netzwerkprotokoll / http://de.wikipedia.org/wiki/Kommunikationsprotokoll

Bei dem Aufwand gebe ich Dir definitiv recht, wobei ich aber, sofern man keine Erfahrung in der Entwicklung solcher Systeme hat, auf fertige Komponenten setzen würde. Corba bietet sowohl eine API, wie auch ein entsprechendes Kommunikationsprotokoll. Ein Netzwerkprotokoll wird sich immer am OSI Modell orientieren, eine API kann dagegen völlig frei definiert werden.

Jan S hat Folgendes geschrieben:

Die "Schnittstelle" Windows-API ist nicht "einfacher" als die Benutzung eines TCP-Sockets um z.B. einen NTP-Server anzusprechen.


Eine API hat mit einem Socket inhaltlich nichts zu tun. Wo ist da der Zusammenhang ? Ich meine noch einfach wäre es eine Textdatei zu schreiben und per USB Stick zwischen den Systemen auszutauschen, aber es geht ja darum, das über ein Netzwerk zu machen. Ich kann einen Socket auf machen und dem NTP-Server einen Bytestrom schicken, wichtig ist, dass ich das Protokoll korrekt umsetze (meist gibt's dafür eine RFC), wenn ich dem Server "irgendwas" schicke, dann wird er die Verbindung schließen. Bei einer API, die ich fehlerhaft verwende, wird mir der Compiler/Interpreter entsprechend diesen Fehler zeigen.

Außerdem ist eine API sicherlich nicht rein auf "Windows" beschränkt, gerade bei Corba ist die Definition, dass es plattform- und sprachunabhängig ist.

Jan S hat Folgendes geschrieben:

Darum verschiebe ich diesen Thread in den Off-Topic-Bereich.


So wie ich den OP verstanden hatte, ging es darum die Systeme letztendlich an Matlab anzubinden. D.h. ich muss in "irgendeiner" Form mit Matlab kommunizieren. Ich sehe das nicht als OT.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Themenstarter

Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 03.06.2013, 08:45     Titel:
  Antworten mit Zitat      
Die Entfernung von Matlab, war nicht meine Absicht.


Ich weiß jetzt wie man von Matlab aus eine Byte-Stream per
Sockets losschickt. Ich weiß wie ich ihn auf der SPS empfange und
interpretiere (Protokoll = Byte > Integer > Switch/Case )


Ich weiß nicht nicht wie ich von Matlab aus über MEX > CORBA > NETZWERK
zur SPS gelangen soll, da diese über keine mir bekannte Schnittstelle
verfügt (außer neuere Versionen > OPC ) und selbst mit IEC-Programmiersprachen gesteuert wird:

http://de.wikipedia.org/wiki/EN_61131


Ich weiß jetzt, dass CORBA eine sehr nützliche Schnittstelle für verschiedenste
Aufgaben ist, aber anscheinend noch nicht auf Matlab gemappt wurde, ich aber über mex-Files gehen könnte, was ich mal genauer untersuchen muss.

Ich danke auch für die allgemeineren Betrachtungen der Begriffe Schnittstelle,
API und Protokoll da auch in einem Matlab-Forum die Vermittlung von Grundwissen gelegentlich nicht schaden kann.

Ich habe jetzt einen guten Überblick und freue mich auf eure Hilfe,
wenn ich auf konkrete Matlab-Fragen stoßen werden.

Danke & Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 09:11     Titel:
  Antworten mit Zitat      
Bluesmaster hat Folgendes geschrieben:

Ich weiß jetzt wie man von Matlab aus eine Byte-Stream per
Sockets losschickt. Ich weiß wie ich ihn auf der SPS empfange und
interpretiere (Protokoll = Byte > Integer > Switch/Case )


da muss ich ehrlich sagen, dass dies etwas gruselig ist Twisted Evil
Denn wie schon gesagt, kann bei diesem Vorgehen so richtig Chaos passieren, z.B. ein Bytes das auf der einen Seite nach Littel-Endian codiert wurde und auf der anderen als Big-Edian interpretiert wird (vice versa) wird definitiv zu großen Fehlern führen und dieser Fehler zieht sich dann durch alle weiteren Ebene durch.


Bluesmaster hat Folgendes geschrieben:

Ich weiß nicht nicht wie ich von Matlab aus über MEX > CORBA > NETZWERK
zur SPS gelangen soll, da diese über keine mir bekannte Schnittstelle
verfügt (außer neuere Versionen > OPC ) und selbst mit IEC-Programmiersprachen gesteuert wird:


dazu habe ich einmal folgendes kleines Bsp geschrieben: http://flashpixx.de/2012/08/matlab-mex-beispiel/
salopp formuliert ist Mex eine DLL, die von Matlab ausgeführt wird. Was Du in dieser DLL machst, ist dann eben Deine Sache. Da die Mex Datei letztendlich von einem regulären Compiler übersetzt wird, kannst Du auf alle Komponenten des OS zugreifen und diese eben auch Nutzen. Corba wiederum ist eben eine Bibliothek für eine Kommunikation über das Netzwerk. D.h. die Mex Datei / DLL ruft einfach die von der Corba Schnittstelle angebotenen Routinen auf.

Bluesmaster hat Folgendes geschrieben:

Ich weiß jetzt, dass CORBA eine sehr nützliche Schnittstelle für verschiedenste
Aufgaben ist, aber anscheinend noch nicht auf Matlab gemappt wurde, ich aber über mex-Files gehen könnte, was ich mal genauer untersuchen muss.


Das wird wahrscheinlich auch nicht gemacht werden, denn Corba stellt nur eine abstrakte Sicht dar, d.h. ich publiziere per Corba eine Funktionssignatur und hole mir diese auf einem anderen Corbasystem (technisch ist das ein so genannter Proxy), d.h. ich bekomme auch eine Funktionssignatur, die ich dann aufrufe. Die Corba Bibliothek nimmt dann meine Daten beim Aufruf entgegen, verpackt diese und sendet sie über das Netzwerk an das Zielsystem. Dort wird dann die "echte" Funktion mit den Daten aufgerufen und die Ergebnisse werden auf dem gleichen Weg zurück transportiert. Aus Sicht der Anwendung sieht es immer so aus, als würde man lokal eine Funktion aufrufen. Corba sorgt für das Verpacken und den Transport der Daten, sowie die Ausführung auf einem anderen physischen System.

Z.B. wenn Deine SPS den Befehl "gibmirDaten( int )" lokal hat, dann hängt man daran eben Corba, d.h. die SPS publiziert dieses gibmirDaten im Netz. Dein Matlab implementiert dieses nun, d.h. wenn du dann einfach in Matlab "gibmirDaten(5)" aufrufst, dann wäre dies so, als würdest Du das an der SPS machen. [jedenfalls mal extrem vereinfach gesprochen]

Wie schon geschrieben sollte es bei Standardsachen kein Problem darstellen eine Corba Anbindung zu machen. Bei der SPS müsste man eben mal tiefer rein schauen, ob das geht. Falls nicht, wäre eben die Möglichkeit eine Datenbank zu verwenden, d.h. die SPS schickt (pull) ihre Daten an die Datenbank, die dort gesammelt werden und dann mittels Matlab einfach nur abgeholt werden. Falls das auch nicht geht, kann man auch überlegen ob man die SPS an einen PC hängt und diesen mittels Corba / Datenbankzugriff versieht. Als Alternative zum PC kann man auch in die Richtung Gnublin / Raspberry Pi denken, d.h. SPS => Pie => Linux => Corba <= Matlab. Ich gehe aktuell von SPS => Corba <= Matlab aus, d.h. man würde nativ auf der SPS Corba laufen haben. Als PC basierter Ansatz wäre es dann SPS => PC (Windows) => COM / DCOM => Corba <= Matlab

Mein Tip ist eben so weit wie möglich das ganze abstrakt zu sehen, d.h. weg von Byteschubserei, die führt immer zu Probleme und/oder schlechter Wartbarkeit. Ob eben Corba sich nativ auf einer SPS zum Laufen bewegen lässt und dann noch hinreichend gut läuft, müsste man einmal im Detail sich anschauen. Falls alle Stricke mit Corba reißen sollten, dann wäre als Alternative http://de.wikipedia.org/wiki/Webservice eine Überlegung, wobei ich dann zu SOAP oder REST tendieren würde. Wichtig ist eben die Frage von Migration und Wartbarkeit, also was passiert, wenn die SPS ausgetauscht wird und/oder das System das die Daten verarbeitet, jedes Mal dann die Kommunikation anzupassen ist sicherlich keine gute Lösung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.06.2013, 13:57     Titel:
  Antworten mit Zitat      
Hallo flashpixx,

Zitat:
Eine API hat mit einem Socket inhaltlich nichts zu tun. Wo ist da der Zusammenhang ?

Prozesstechnisch gesehen schickt man per WindowsAPI einen (oder mehrere) Bytestreams and den Kernel und löst damit Reaktionen aus. Und einen (anders aufgabauten) Byte-Stream schickt man per TCP an einen Time-Server und läst damit Reaktionen aus. Und beides liesse sich mit einer Stricknadel, etwas Faden und einer Turing-Maschine vollständig abbilden. Damit erreicht das Thema aber einen langweiligen Grad von Allgemeinheit.

Da Bluesmaster nun klarer beschrieben hat, worum es eigentlich geht, kann man nun auch konkretere und nützlichere Antworten geben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.