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

Daten über TCP

 

ones
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 09:43     Titel: Daten über TCP
  Antworten mit Zitat      
Schönen guten morgen.

Ich würde gerne Messdaten welche auf einem kleinen Controller generiert werden zur weiterverarbeitung in Matlab zur Verfügung stellen. Da der Schreibvorgang auf dem Controller zu langsam ist würde ich die Daten gerne per TCP direkt an die Matlabmaschine schicken. Gibt es eine Möglichkeit mit Matlab die Daten per socket abzufragen?
Auf dem Controller läuft c++ code mit welchem ich die Daten schicken würde. Matlab müsste quasi nach Daten lauschen.

Danke für eure Hilfe!


mfg ones
Private Nachricht senden Benutzer-Profile anzeigen


Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 02.09.2010, 16:19     Titel:
  Antworten mit Zitat      
Denke mal das TCP/IP Objekt würde Dir helfen. Siehe MATLAB-Hilfe, z.B. hier:
http://www.mathworks.com/access/hel.....instrument/f16-54297.html
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 18:15     Titel:
  Antworten mit Zitat      
Hi, danke für Deine Antwort.
Zwischenzeitlich bin ich so weit dass ich rausgefunden habe dass es die Möglichkeit gibt die Daten per Telnet in Matlab reinzubekommen. Mir ist nur noch nicht ganz klar wie genau das passieren soll und wie es dann weiter geht. Der Momentane Stand ist so dass mein code auf dem Controller per Telnet ausgeführt wird und dann die Messwerte ausspuckt. Wie mache ich das mit Matlab? Hat da jemand erfahrung von euch??

Danke weiterhin.
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 09:44     Titel:
  Antworten mit Zitat      
Hi,
weiß jemand ob es geht dass ich von Matlab aus einen Telnetclient starte und die Werte die dort auf der Konsole ausgegeben werden abfangen kann?
Oder ob es mit Matlab generell irgenwie möglich ist eine Konsolenausgabe abzufangen? Dann könnte ich die Telnet verbindung auch außerhalb von matlab aufbauen.

Danke schonmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 06.09.2010, 18:32     Titel:
  Antworten mit Zitat      
ones hat Folgendes geschrieben:
Hi,
weiß jemand ob es geht dass ich von Matlab aus einen Telnetclient starte und die Werte die dort auf der Konsole ausgegeben werden abfangen kann?

Schau Dir mal den Befehl system an, damit kannst du externe Programme starten. Ich weiß aber nicht, ob du damit die Daten "live" bekommst oder erst ganz hinterher... Ausprobieren, ob Dir das gefällt und wie weit du Damit kommst.

ones hat Folgendes geschrieben:

Oder ob es mit Matlab generell irgenwie möglich ist eine Konsolenausgabe abzufangen?

Stichwort "named pipes" z.B. als Möglichkeit, oder halt wie gesagt über System. Die Frage ist auch, wieviel Kontrolle Du über das Gegenstück (die Datenquelle, den Telnet-Client) hast. Kannst du das beeinflussen? (Wann Daten gesendet werden, wann Telnet seinen Buffer zur Kommandozeile / Standardausgabe "flusht"?)

ones hat Folgendes geschrieben:

Dann könnte ich die Telnet verbindung auch außerhalb von matlab aufbauen.


Telnet ist sehr simpel, eigentlich nur "Strings über TCP". Also würde ich persönlich gar keinen Telnet-Client benutzen, sondern es "raw" machen. Ich habs zwar nicht ausprobiert, aber das vorher erwähnte TCP/IP-Objekt hört sich da echt nach dem richtigen Werkzeug an!
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 21:07     Titel:
  Antworten mit Zitat      
Ich hab mich heute mal mit der "system" geschichte versucht. Scheint aber nicht ganz das richtige zu sein. Ich werde es jetzt wohl so machen dass ich auf dem Controller einen Socket-Server laufen lasse und dann eben mit den tcp/udp objekten arbeite so wie du das auch vorgeschlagen hattest. Kennst Du Dich damit aus oder hast schonmal damit gearbeitet Linus?
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 06.09.2010, 22:02     Titel:
  Antworten mit Zitat      
ones hat Folgendes geschrieben:
Kennst Du Dich damit aus oder hast schonmal damit gearbeitet Linus?

Also konkret mit dem TCP/IP Objekt in MATLAB noch nicht. Aber ansonsten mit ner Menge Protokollen, Sockets, etc, und auch mit Methoden um "verschiedene fertige Programme zusammen zu flicken" (also das was du quasi hast, Daten von A nach B, aber A und B sind verschiedene Programmiersprachen oder Systeme).

Je nachdem wie flexibel deine Datenquelle ist könnte man dort auch einen HTTP-Server aufsetzen (evtl. recht komplex), und in MATLAB einfach mit urlread() die Daten abholen (sehr simpel). Das wäre dann nach dem REST-Prinzip. (Aber ok führt wohl zu weit).

Es gibt noch "named pipes" für die Kommunikation, z.B. auf Linux Systemen (glaube aber auch Windows), das sind dann quasi virtuelle Dateien (die nur im Speicher existieren). A schreibt rein, B liest raus.

Normalerweise sollte so ein TCP-Setup echt sehr simpel sein. Das schöne an TCP: Es ist reliable, also Daten die du sendest kommen auch garantiert an. Aufpassen: Es ist ein Stream-Protokoll (auch wenn man manchmal das Gefühl hat, mit Paketen zu arbeiten), du musst dir also selbst Pakete oder "Trenner" basteln.

Spiel einfach rum und frag bei Bedarf nach, das wird schon Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 16:28     Titel:
  Antworten mit Zitat      
HI, danke für Deine Hilfe.
Ich hab mich heute mal durch die Boost.Asio Documentation gewühlt und denke dass das was passendes für mich sein sollte. Ich werde die nächsten Tage mal meinen Code mit dem TCP zeugs versehen so dass der Controller wartet bis sich ein Client Meldet und wenn die Verbindung steht einfach die Messdaten als String schickt.
Ich frage mich jetzt jedoch wie dass dann von der Matlab seite aus aussieht. Kann ich in Matlab dann einfach nen C++ Client laufen lassen oder wäre da Java besser? (kann ich mit nem Java client ne Anfrage am c++ server stellen?)
Sorry für die vielen Fragen, aber ich bin noch recht neu in c++ und von Matlab hab ich schonmal gar keine Ahnung...
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.09.2010, 16:40     Titel:
  Antworten mit Zitat      
ones hat Folgendes geschrieben:
HI, danke für Deine Hilfe.
Ich hab mich heute mal durch die Boost.Asio Documentation gewühlt und denke dass das was passendes für mich sein sollte.

Ist auf jeden Fall cool, dass du Boost verwendest, aber ich persönlich würde das für Anfänger erstmal als recht komplex einstufen... Async I/O, also naja, da könnte man simpler anfangen? Aber egal, wenn du glaubst das könnte was werden, probiers auf jeden Fall weiter aus.

ones hat Folgendes geschrieben:

Ich werde die nächsten Tage mal meinen Code mit dem TCP zeugs versehen so dass der Controller wartet bis sich ein Client Meldet und wenn die Verbindung steht einfach die Messdaten als String schickt.
Ich frage mich jetzt jedoch wie dass dann von der Matlab seite aus aussieht. Kann ich in Matlab dann einfach nen C++ Client laufen lassen oder wäre da Java besser? (kann ich mit nem Java client ne Anfrage am c++ server stellen?)

1. Im Prinzip geht alles Smile
2. Es wäre so langsam an der Zeit glaube ich, dass du genau erklärst welche Daten wie oft ankommen oder abgeholt werden müssen, wie groß sie sind, wie schnell das gehen muss. Was für ne Plattform der "Controller" / das Messgerät ist, was du da für Dinge benutzen kannst, usw.

Es kann sein dass Du dich auf einer komplizierten Route bewegst oder ich die falschen Hinweise gebe, weil wir zu wenig Info haben. Du musst natürlich keine weiteren Details posten, aber ich denke es könnte nur helfen.

ones hat Folgendes geschrieben:

Sorry für die vielen Fragen, aber ich bin noch recht neu in c++ und von Matlab hab ich schonmal gar keine Ahnung...


Also ich verstehe noch nicht ganz, warum du C++ oder Java aus MATLAB aufrufen willst. Wenn du die Daten wirklich über TCP versendest, kannst du es nativ in purem MATLAB machen, das ist wahrscheinlich schöner.

Wenn du aber schon einen Client in C++ hast, bietet es sich an den von MATLAB aus zu benutzen, ja.

Abgesehen davon: Wenn die Daten wirklich "entfernt" ankommen, kann es MATLAB ganz egal sein, ob sie von Java oder C++ erzeugt werden. Ist also wieder mal die Frage: Was soll wie von wo wohin? Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 16:55     Titel:
  Antworten mit Zitat      
Mehr Infos sind kein Problem.

Ich hab nen kleinen Linuxcontroller an den Messklemmen angeschlossen sind. Der Controller hohlt von den Messklemmen die Messwerte, das sind 6 mal 3 Werte die ich auslese. Diese Werte müssen irgendwie so schnell wie möglich für Matlab zur Verfügung gestellt werden. Ich würde das alles gerne so schnell wie möglich Messen. Die Messung an sich dauert 50ms und bis sie im Controller Bereit stehen kommen noch ein paar zerqutschte dazu. wenn ich alle 100-250ms Werte in Matlab bekomme sollte das ausreichen.
Ich dachte mir also die Messdaten in einen großen string zu packen den ich dann über die Socketverbindung schicke. Ich habe weder nen Server noch nen client. Muss alles noch gemacht werden. Das einzige was bisher steht ist das Messscript welches die Werte von den Klemmen holt(ist aber beliebig änderbar). Von daher bin ich offen für alles was mir die Sache so einfach wie Möglich macht. Csockets hatte ich auch schon angedacht, ist das sinnvoller als die Boost variante?
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.09.2010, 17:03     Titel:
  Antworten mit Zitat      
Ok super soweit. Weitere Rückfragen:
Du sagst "Ein kleiner Linuxcontroller". Ist das ein vollwertiges Linux? Der Controller ist wie an den Rechner, wo MATLAB läuft, angebunden? Ich gehe von Netzwerk aus (Ethernet)?

Der Controller ist aber nicht irgendwie anders "an dem Rechner befestigt", bzw. gibt es andere Treiber (vom Hersteller oder so), die die Daten irgendwie schon zumindest auf dem PC bereitstellen, wo MATLAB läuft?

Hast du mit dem Messscript die Möglichkeit, Werte auf der Standard-Ausgabe auszugeben (also auf der Befehlszeile)? Dann könnte man sich überlegen, das evtl über Pipe-Operatoren (">" und "|") über Linux-Tools zu tunneln (müsste man schauen, bin kein Linuxprofi).
In welcher Sprache ist das Script geschrieben? Wie kommt das wiederum an die Messwerte ran (serieller Port?). Evtl. kann man auch den seriellen Port einfach tunneln und dann in MATLAB direkt über serial() auslesen?

Möglichkeiten über Möglichkeiten Smile
_________________

RWTH - Mindstorms NXT Toolbox - free & open source
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 17:17     Titel:
  Antworten mit Zitat      
Auf dem Controller läuft ein uclinux. Anbindung ist wie Du ganz richtig schreibst Ne Ethernetschnittstelle. Fertige Lösungen gibt es meinem Kenntnisstand nach leider keine.

Standard Ausgabe ist kein Problem. Allerdings läuft Matlab auf einer Windowsmaschine was ja die pipe geschichte etwas verkompliziert wenn ich das richtig verstanden hab.

Script is in c++ geschrieben. Die Klemmen sind über einen internen Bus mit dem Controller verbunden und die Abfrage läuft im Prinzip über Registerkommunikation. Serieller Port is leider nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.09.2010, 19:17     Titel:
  Antworten mit Zitat      
ones hat Folgendes geschrieben:
Auf dem Controller läuft ein uclinux. Anbindung ist wie Du ganz richtig schreibst Ne Ethernetschnittstelle. Fertige Lösungen gibt es meinem Kenntnisstand nach leider keine.

Standard Ausgabe ist kein Problem. Allerdings läuft Matlab auf einer Windowsmaschine was ja die pipe geschichte etwas verkompliziert wenn ich das richtig verstanden hab.

Wäre es möglich, einen ssh-Server auf dem uclinux laufen zu lassen (falls er das nicht eh schon tut)? Oder zur Not nen telnetd?

Dann Versuch doch bitte mal, mit Putty von dem Windows-Rechner aus auf dem Linux das Messwertprogramm mit Standardausgabe direkt "remote" zu starten. Dann müssten die Messwerte ja schon in Putty auf Windows sein, richtig?

Dann könnte man versuchen, dass über die Befehlszeile mittels Plink oder so in MATLAB reinzubekommen... Oder halt dass Plink es in Windows piped (was weiß ich wohin, aber darum kümmern wir uns dann).
_________________

RWTH - Mindstorms NXT Toolbox - free & open source
Private Nachricht senden Benutzer-Profile anzeigen
 
ones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 19:55     Titel:
  Antworten mit Zitat      
Ich hatte gestern mal ein bischen mit rumprobiert Putty direkt in Matlab zu starten über den System() Aufruf. Da es aber nur ne Telnetverbindung ist und kein SSH, hatte der Aufruf mit Startparametern nicht geklappt.
Remotestart mit extern gestartetem Putty oder telnet von WIndows geht, gar kein Thema. Man bekommt dann halt die Werte in der Konsole, so wie Du das auch meinst denke ich.
Momentan läuft ein Telnetserver auf dem Controller, geht das auch oder muss es der Telnetd sein? SSH sollte technisch auch machbar sein, da muss ich aber erst nochmal nachfragen ob das ok ist. Wenn es also mit den anderen auch geht um so besser.

Du bekommst aufjedenfall xx Bier von mir:)!
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.09.2010, 20:09     Titel:
  Antworten mit Zitat      
ones hat Folgendes geschrieben:
Ich hatte gestern mal ein bischen mit rumprobiert Putty direkt in Matlab zu starten über den System() Aufruf. Da es aber nur ne Telnetverbindung ist und kein SSH, hatte der Aufruf mit Startparametern nicht geklappt.

Dafür wäre dann Plink da, die Kommandozeilenversion.


ones hat Folgendes geschrieben:

Remotestart mit extern gestartetem Putty oder telnet von WIndows geht, gar kein Thema. Man bekommt dann halt die Werte in der Konsole, so wie Du das auch meinst denke ich.

Ok super cool, dann holen wir die uns nur noch in MATLAB rein Smile. Jetzt verstehe ich auch langsam, was du oben immer meintest mit telnet.

ones hat Folgendes geschrieben:

Momentan läuft ein Telnetserver auf dem Controller, geht das auch oder muss es der Telnetd sein? SSH sollte technisch auch machbar sein, da muss ich aber erst nochmal nachfragen ob das ok ist. Wenn es also mit den anderen auch geht um so besser.

Ne, wie auch immer das Ding heißt, alles egal. Dachte nur die Linuxversion heißt telnetd (d wegen daemon). Egal. SSH ist verschlüsselt, also sicherer aber evtl. langsamer. Denke telnet ist genau richtig.

Ich teste mal nen bisschen rum, wie man das jetzt am besten macht...
_________________

RWTH - Mindstorms NXT Toolbox - free & open source
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2025 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.