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

Erstellen einer Mex-File

 

CrashBall89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2011, 14:02     Titel: Erstellen einer Mex-File
  Antworten mit Zitat      
Hey,

zu erst möchte ich um entschuldigung bitten, da ich ja eigentlich einen Account hier habe, mich jedoch nicht auf der Arbeit in Foren oder sonstigen Seiten anmelden darf/kann.

Nun zu meinem Problem:
Ich bin recht neu in Sachen Mex-Erstellung und nutze diese Seite um mich schlauer zu machen: http://www.mathworks.nl/support/tech-notes/1600/1605.html. Meine Frage ist, ob es möglich ist einen C-Code in Matlab zu nutzen ohne eine mex-file erstellen zu müssen?
Falls nicht: Ich möchte einen C-Code übernehmen (ich versuceh eine TCP-Kommunikation zwischen Matlab und Simulink zu erstellen). Muss ich generell am C-code etwas ändern oder kann der so, wie vorhanden übernommen werden? z.B. mit den Befehlen printf usw.. Oder muss ich mein Programm von Grund auf neu strukturieren und der Erstellung einer Mex-file anpassen?

MfG

CrashBall89


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.10.2011, 14:37     Titel: Re: Erstellen einer Mex-File
  Antworten mit Zitat      
Hallo CrashBall89,

Zitat:
zu erst möchte ich um entschuldigung bitten, da ich ja eigentlich einen Account hier habe, mich jedoch nicht auf der Arbeit in Foren oder sonstigen Seiten anmelden darf/kann.

Das verstehe ich nicht. Benötigst Du die Frage für Deine Arbeit? Wieso sollte Dein Arbeitgeber dann etwas dagegen haben? Hat er etwas dagegen, dass du Dich in Interhetforen aufhälst? Warum machst Du es dann trotzdem?

Ein C-Mex-File ist ein C-File, das eine Schnittstelle zu Matlab hat. Diese Schnittstelle ist die mexFunction. Sie kümmert sich im Idealfall nur um die richtige Anzahl und Typen der Inputs, konvertiert sie in die entsprechenden C-Arrays und ruft dann die eigentliche Berechnung in C auf. Danach werden die Ausgaben wieder in Matlab-Variablen konvertiert.

PRINTF sollte in Mex-files als mexPrintf verwendet werden, weil die Ausgabe ins Command-Windowdabei besser koordiniert wird.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
CrashBall89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2011, 14:49     Titel:
  Antworten mit Zitat      
Hey Jan,
vielen Dank für deine rasche Antwort.

Das hat was mit Cookies und solchen Sachen zu tun. In Foren darf ich mich aufhalten und natürlich auch als Gast schreiben, aber wenn es um das Thema "Anmelden" geht, sehen die schwarz.

Zum Thema:
So habe ich das auch verstanden. d.h. ich müsste praktisch meinen ganzen C-Code in die mexFunction einbetten. Jedoch sind dann Syntaxfehler drin, wenn ich mehrere void Funktionen in die mexFunktion einbinde. Abgesehen von dem mexPrintf, sind sonst alle C-Befehle verwendbar? Steuer ich mit der mexFunktion die sowohl Inputs als auch Outputs?

MfG,

CrashBall89
 
CrashBall89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2011, 14:56     Titel:
  Antworten mit Zitat      
Sorry für den Doppelpost.
Ich weiß nicht ob du überhaupt eine Ahnung von TCP Socket-Kommunikation hast, aber vllt. hilft dir das weiter, zu verstehen, wo ich hänge.
Code:

#pragma comment( lib, "wsock32.lib" )
 
#include "winsock2.h"
#include "windows.h"
#include "stdio.h"
#include "mex.h"
 
//Prototypen
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int i;
int startWinsock(void);
 
int main()
{
  long rc;
  char buf[256];
  SOCKET s;
  SOCKADDR_IN addr;
  rc=startWinsock();
  if(rc!=0)
  {
    mexPrintf("Fehler: startWinsock, fehler code: %d\n",rc);
    return 1;
  }
  else
  {
    mexPrintf("Winsock gestartet!\n");
  }
  s=socket(AF_INET, SOCK_STREAM, 0);
  if(s==INVALID_SOCKET)
  {
    mexPrintf("Fehler: Der Socket konnte nicht erstellt werden, Fehlercode: %d\n", WSAGetLastError());
    return 1;
  }
  else
  {
    mexPrintf("Socket erstellt!\n");
  }
  memset(&addr, 0, sizeof(SOCKADDR_IN)); //zuerst alles auf 0 setzen
  addr.sin_family=AF_INET;
  addr.sin_port=htons(55555); //wir verwenden mal Port 55555
  addr.sin_addr.s_addr=inet_addr("127.0.0.1"); //Zielrechner ist unser eigener
 
  rc=connect(s, (SOCKADDR*)&addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    mexPrintf("Fehler: connect gescheitert, Fehlercode: %d\n", WSAGetLastError());
    return 1;
  }
  else
  {
    mexPrintf("Verbunden mit 127.0.0.1..\n");
  }
 
  recv(s,buf,256,0);
  printf(buf);
  closesocket(s);
  WSACleanup();
  return 0;
}
 


MfG


CrashBall89

PS: sry für dem Doppelpost
 
Jan S
Moderator

Moderator


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

Cookies bekommst Du als Gast doch auch. Aber ich weiß, dass die Einschränkungen bei Arbeitgebern nicht unbedingt sinnvoll sind.

Es gibt einige Mex-Implementationen eines Network-Sockets. Es lohnt sich Google nach "Matab winsock Mex" zu fragen.

Ich habe übrigens keinen Doppel-Post gesehen. Doppel-Posts heißen Fragem die in mehrern Foren oder zumindest Unterkategorien gleichzeit erscheinen. Wenn man dann (wie ich) in mehreren Foren unterwegs ist, verliert man den Überblick, welche Antwort nun eigentlich schon gegeben wurde.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
CrashBall89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2011, 08:25     Titel:
  Antworten mit Zitat      
Hey Jan,

dass es so eine Implementation gibt, wusste ich nicht. Ich werde dann mal im Internet danach Recherchieren. Vielen Dank!

MfG

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