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

Mex file für UDP-Verbindung

 

Erano1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 13:35     Titel: Mex file für UDP-Verbindung
  Antworten mit Zitat      
Hallo liebes Forum,

ich möchte gerne mithilfe von Matlab einen Industrieroboter steuern. Hierfür dient zwischen Roboter und dem Rechner für Matlab ein weiterer Rechner, auf dem ein C++ Programm, als Schnittstelle. Da das Programm zu langsam ist, wenn es mit Matlabcode läuft möchte ich gerne den Code als C/C++ Programm laufen lassen.

Ein kleiner Beispielcode:

Code:
u=udp('192.168.56.101', 4012, 'LocalPort', 5532 );
set(u, 'ByteOrder', 'littleEndian','Timeout',30);

fopen(u);
[p,count,msg,datagramaddress,datagramport]=fread(u,[2],'float32');

fwrite(u,[3.12; 1.22],'float32');  

fclose(u);


Beim bulding wird die Meldung angezeigt, dass das udp Objekt nicht supported wird, was die Konvertierung nach C/C++ angeht.

Daher möchte ich fragen, ob jemand schon einmal ähnliches Problem hatte und es eine Möglichkeit gibt, vielleicht eine andere Funktion zum verschicken von Daten welche supported wird, oder der Teil selber geschrieben werden muss.


Viele Grüße,
Erano1
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 21.09.2017, 07:13     Titel:
  Antworten mit Zitat      
Ich würde noch einen Schritt vorher anfangen, nämlich bei "Da das Programm zu langsam ist, wenn es mit Matlabcode läuft möchte ich gerne den Code als C/C++ Programm laufen lassen. "

Warum läuft es (zu) langsam? Warum sollte umgewandelter C Code schneller sein? Warum ein weiterer Rechner dazwischen?

Das ist vermutlich hier im Forum zu mühselig zu erklären, daher vielleicht einmal mit MathWorks Kontakt aufnehmen?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Erano1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2017, 13:27     Titel:
  Antworten mit Zitat      
Gebe dir Recht, dass es im Forum vielleicht etwas mühselig ist.


Wieso ein weiterer Rechner dazwischen?
Da bin ich mir ehrlich gesagt nicht einmal so sicher wieso das so vor paar Jahren gemacht wurde (seitdem wurde mit dem System nicht mehr gearbeitet), wurde aber jetzt aus praktischen Gründen erst einmal so übernommen.

Wieso ist das Programm zu langsam und was sollte daran C-Code ändern?
Damit der Roboter flüssig läuft müssen die neuen Daten schnell genug übermittelt werden, aber bei einem Matlabprogramm wo hauptsächlich nur paar Additionen ablaufen vergeht schon zu viel Zeit, weswegen ich es gerne schneller hätte.
Mit Mexfiles läuft der Code doch deutlich schneller ab? Man spart selbst bei einfach Funktionen wie sum=add(a,b) {sum=a+b} schon ein paar Prozent, wenn man die Funktion als mex aufruft. Ob es direkt in VS oder Eclipse noch schneller läuft weiß ich nicht.

Mir ging es auch hauptsächlich darum, ob jemand mit Senden/Empfangen von UDP-Packets Erfahrung hat und andere Möglichkeiten als das udp-Objekt gibt welche kompatibel zum C-Coder von Matlab sind.

Viele Grüße,
Erano1
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 22.09.2017, 11:40     Titel:
  Antworten mit Zitat      
OK, danke für die Zusatzinformation. Dann bitte noch die exakte Fehlermeldung in Englisch posten, nicht die interpretierte Meldung. Ich guck mal was ich finde.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Erano1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2017, 13:40     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort und Hilfe Smile

die Fehlermeldung lautet: "The 'udp' class does not support code generation".


Eine weitere Idee war das empfangen und senden auszugliedern und nur den Code dazwischen als mex laufen zu lassen. Allerdings ist mir bei Zeitmessungen aufgefallen, dass der fread-Befehl sehr lange benötig (zweistelliger ms Bereich). Und das auch, wenn die gesendeten Daten schon im Buffer waren und nur noch abgerufen werden mussten. Kommen die Daten aber vom selben Rechner verringert sich die Zeit für fread. Dazu muss man sagen, dass ich das auf unterschiedlichen Rechnern mit unterschiedlichen Matlabversionen getestet habe, was aus meiner Sicht auch nur der Grund dafür sein kann, da es ja keinen Unterschied machen sollte, wenn die Daten schon im Buffer liegen, wo sie her gekommen sind, ob von einem anderen oder vom selben Rechner.

Gibt es hier vielleicht auch eine Möglichkeit mit der das empfangen von Daten schneller läuft?

Viele Grüße,
Erano1
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.09.2017, 14:04     Titel:
  Antworten mit Zitat      
Also, die Fehlermeldung kommt vom Produkt MATLAB Coder und ist in der Tat eindeutig. Diese Funktionalität lässt sich - zumindest aktuell - nicht für die Codegenerierung nutzen. Eine Beschleunigung in diesem Zusammenhang wäre möglich, ist aber nicht sicher.

Ich konnte bezüglich FREAD Informationen zu Bugs in dem ein oder anderen Release finden, die sich in Langsamkeit (unter Spezialbedingungen) äußern.

Ich kann nur noch einmal anregen MathWorks direkt zu kontaktieren.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Erano1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2017, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

ich wollte hier nochmal was zu schreiben, was möglicherweise denjenigen helfen könnte die das selbe Problem habe. Mittlerweile läuft die Kommunikation zwischen Matlab und einem anderem Rechner sehr gut. Die Befehle für das empfangen und senden von Dateien habe ich durch selber geschriebene mex-files ersetzt. Wer sich sowieso mit der Socketprogrammierung in C++ auskennt, hat diese relativ schnell geschrieben und somit eine sehr schnelle Lösung. Da mich diese Lösung zufriedengestellt hat, habe ich auch keinen Kontakt zu MathWorks aufgenommen.

Viele Grüße,
Erano1
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.