Forum: PC-Programmierung EPOS P (maxon motor) mit C++ Programm steuern - RS232 problem


von LONy (Gast)


Lesenswert?

Hi,
ich hoffe einfach mal, dass sich hier von euch vielleicht einer mit dem 
EPOS P (24/5) motor controller aus kennt ;)

Ich befinde mich gerade im zuge meines Etechnik Studiums im 
Praxissemester und versuche über ein C++ Programm (Borland) den motor 
controller über die RS232 Schnittstelle anzusteuern. Mit dem EPOS Studio 
geht das auch ohne Probleme, allerdings bekomm ich bei dem 
Beispielprogramm für C++ immer einen Fehler "Error reading RS232 Data". 
Ein Handle auf die RS232 Schnittstelle bekomm ich noch, beim 1. Zugriff 
"VCS_ClearFault()" bekomm ich allerdings den Fehler zurück.

Muss ich beim Borland Compiler noch irgend etwas einstellen (um auf die 
RS232 Schnittstelle zuzugreifen) oder mim EPOS Studio den motor 
controller dafür irgendwie speziell konfigurieren?

Schonmal Danke! Gruß, LONy

von LONy (Gast)


Lesenswert?

Warscheinlich ist mein Problem zu speziell um eine Lösung zu bekommen^^ 
Kann mir dann vielleicht jemand sagen, ob ich was spezielles beachten 
muss, wenn ich beim Borland Compiler eine dll Datei einbinde bzw. 
dadurch auf die RS232 Schnittstelle zugreifen will?
Ich muss eine lib Datei einbinden, dabei gibt es scheinbar zwei 
verschieden Versionen (eine Speziell für den Borland Compiler?) da er 
mir bei der anderen eine Fehlermeldung beim Kompilieren auswirft und ich 
die Datei erst mit der coff2omf.exe konvertieren soll. Die konvertierte 
Datei ist dann kleiner als die beiden anderen, es gibt auch keine 
Fehlermeldung beim kompilieren, mehr als ein Handle auf die RS232 
Schnittstelle bekomm ich leide trozdem nicht.

Gruß, LONy

von Michael S. (michael8192)


Lesenswert?

Hallo LONy,

ich bin ebenfalls gerade daran, eine Anwendung für die Ansteuerung eines 
Motors zu schreiben. Das Steuergerät ist ein EPOS2 24/5 mit einem 
EC-Motor. Allerdings verwende ich Visual C++ (Express) und die 
Kommunikation erfolgt über USB. Das Einbinden der Dateien EposCmd.dll, 
EposCmd.lib und Definition.h ist soweit erfolgreich verlaufen. Das 
Beispielprogramm funktioniert bei mir ebenfalls nicht (wahrscheinlich 
Konvertierungsproblem von alter Version 6.0). Mir ist es auch noch nicht 
gelungen irgendeine der Funktionen erfolgreich aufzurufen.
Wichtig ist, die Bibliothek im laufenden Projekt anzumelden. Ich weiss 
nicht wie das bei deinem Compiler ist.

Gruss Michael

von LONy (Gast)


Lesenswert?

Hallo Michael,

hat bei dir die Verbindung über das EPOS Studio wie in der Getting 
Started pdf beschrieben funktioniert? Das ging bei mir problemlos. Im 
Unterverzeichnis vom EPOS Studio "EPOS Positioning Controller\EPOS2 P\04 
Programming\Windows DLL\Microsoft Visual C++" müsste ein 
Beispielprogramm für deinen EPOS2 24/5 fertig kompiliert sein, da kannst 
du mal versuchen die exe auszuführen. Die Kommunikationskonfiguration 
erfolgt bei Programmstart über ein Dialogfenster (Protocol Stack Name, 
Interface Name,.. usw.)

Nach diesem Dialog (entsprechend bei dem Beispielprogramm für meinen 
Borland Compiler in "EPOS Positioning Controller\EPOS\04 
Programming\Windows DLL\Borland C++") bekomm ich dann die Fehlermeldung 
"Error reading RS232 Data".

Woch ich das gerade schreibe ist mir aufgefallen, dass die 
Beispielprogramme ja im "EPOS" Ordner und nicht im "EPOS P" ordner sind. 
Da sind zwar auch Beispielprogramme, allerdings keine mit der Windows 
DLL.

Die Einbindung der lib Datei bei mir in der "EPOS DLL Integration into 
Borland C++.pdf" beschrieben. Einfach Projekt->Dem Projekt Hinzufügen. 
Das scheint auch Richtig zu funktionieren, da ich hiermit ein Handle 
zurück bekomme:
1
m_KeyHandle = VCS_OpenDeviceDlg(&m_dErrorCode);

Wenn ich bei mir die RS232 Schnittstelle Blockiere (z.B. dass ich über 
das EPOS Studio eine Verbindung mit dem Motor herstelle) bekomm ich hier 
ne Fehlermeldung "Error opening port"

Gruß, Stefan

von mmc support team (Gast)


Lesenswert?

For technical support please use the maxon Service & Support Desk. By 
means of the Service & Support Desk tool you can electronically submit 
technical requests or problem reports about maxon motor control 
products. http://support.maxonmotor.com . Due to the Service & Support 
Desk we can offer you an even better service. 
**********************************************************
Für technische Anfragen benützen sie bitte das maxon Service & Support 
Desk. Das Service & Support Desk ermöglicht es Ihnen, technische 
Anfragen oder Problemberichte zu maxon motor control Produkten auf 
elektronischem Weg zu erstellen. http://support.maxonmotor.com . Dank 
dem Service & Support Desk können wir Ihnen eine noch bessere 
Dienstleistung anbieten.

Patrik Gnos, maxon motor ag, Switzerland

von LONy (Gast)


Lesenswert?

Hallo Herr Gnos,

ich habe vergangenen Freitag (und gerade nochmal) versucht eine Anfrage 
über "New Registration D/E (for first technical support)" an maxon motor 
zu stellen, es kam auch eine Rückmeldung: Issue 14109 created. Click 
here to view. Leider bekomme ich bei diesem Link nur einen Error. Eine 
Registrierungsbestätigung per Email o.ä. hab ich leider auch nicht 
Erhalten.

MfG Stefan Müller

von Michael S. (michael8192)


Lesenswert?

Hallo Stefan,

die Beispielprogramme habe ich getestet. Das Programm für VB 
funktioniert, jedoch das für Visual C++ nicht (Fehlermeldung: Kann nicht 
auf das Gerät zugreifen). Den Beispielcode finde ich für den Anfang viel 
zu kompliziert. Wenn ich auf eine Funktion zugreife, kommt stets die 
Fehlermeldung "error C3861: "VCS_OpenDeviceDlg": Bezeichner wurde nicht 
gefunden", obwohl die Datei Definitions.h eingebunden ist und diese 
Funktion enthält.

Gruss Michael

von LONy (Gast)


Lesenswert?

Neben der Definitions.h musst du auch noch die dll Datei einbinden wie 
in "EPOS DLL Integration into MS VC++.pdf" beschrieben. Ich weiß nicht 
wie die Menüpunkte in VC++ auf Deutsch heißen...
Project -> Properties da dann Linker -> Input und hier die EPOS Command 
DLL bei 'Additional Dependencies' hinzufügen.
Vielleicht hat die Express Version die Einschränkung, dass man keine dll 
Datein einbinden kann?!

von Michael S. (michael8192)


Lesenswert?

Die dll habe ich bereits eingebunden. Falls es Einschränkungen 
hinsichtlich der Express-Version gibt, wäre dieses Menü sicher 
deaktiviert bzw. eine Fehlermeldung würde erscheinen. Aber wer weiss.. 
Ich habe damit zu wenig Erfahrung, da ich mich mit der Version erst seit 
Kurzem beschäftige.

von LONy (Gast)


Lesenswert?

Hallo,
inzwischen denke ich, dass mein Programm soweit funktioniert und der 
Fehler in der Konfiguration des EPOS P liegt, da über die RS232 
Schnittstelle 0x11 (opCode) geschickt wird und dann allerdings keine 
Antwort (readyAck) zurück kommt. Nach dem Timeout bekomm ich dann die 
Fehlermeldung.
Ich werd nochmal Getting Started usw. durcharbeien. Es ist sicherlich 
nur eine kleine Einstellungssache die nicht past...

von LONy (Gast)


Lesenswert?

Hallo Michael,
bist du inzwischen weiter gekommen? Ich habe etwas interresantes bzgl. 
des EPOS2 P gefunden:
(1) Indroduction
------------------------------------------------
The compiled IEC-61131 program (ProgramData.mem) has to be downloaded to 
the Epos2 P before the functionality of the Windows DLL example can be 
used.
...

Das steht in der readme.txt in "Example VC++ 2005\IEC-61131 Program".

Da muss also erst ein Programm geladen werden, bevor man mit der Windows 
DLL überhaupt das EPOS ansprechen kann. Ich vermute das es bei meinem 
EPOS P vielleicht ähnlich ist. Vielleicht hilft dir das ja auch weiter.

Gruß, Stefan

von Michael S. (michael8192)


Lesenswert?

Hallo Stefan,

ich habe mittlerweile auch (kleine) Fortschritte gemacht. In der MSDN 
habe ich ein Beispiel über das Erstellen und Einbinden von Dll's 
gefunden. Also habe ich erst einmal ein einfaches Konsolenprogramm 
geschrieben und die Pfade für die EposCmd.dll und Definitions.h explizit 
angegeben. Jetzt kann ich zumindest auf die Funktionen zugreifen. Die 
Kommunikation mit dem Gerät funktioniert aber noch nicht, da für den 
Zugriff über USB mehrere Funktionen hintereinander ausgeführt werden 
müssen.
Leider arbeite ich momentan noch an einem anderen Projekt und habe 
gerade wenig Zeit, um mich weiter mit dem Programm zu beschäftigen. Aber 
es sieht momentan nicht schlecht aus dieses zum Laufen zu bringen.



> The compiled IEC-61131 program (ProgramData.mem) has to be downloaded to
> the Epos2 P before the functionality of the Windows DLL example can be
> used.
> ...

Das sieht mir ganz so aus, als ob hier die Firmware des Steuergerätes 
gemeint ist. Da sollte man vorsichtig sein (siehe "Wichtige Hinweise" 
zur Firmware).

PS. Nachdem ich die Pfade für die Dateien wieder gelöscht habe, konnte 
ich das Programm trotzdem noch kompilieren. Also weiss ich nicht genau, 
ob dies wirklich der Grund war. Ich muss das nochmal von Grund auf 
testen.

Gruss Michael

von LONy (Gast)


Lesenswert?

Hallo Michael,

inzwischen habe ich die Rückmeldung bekommen, dass das EPOS P über die 
RS232 Schnittstelle zwar programmiert und parametriert, nicht aber 
gesteuert werden kann (was ich mir nach dem vielen rumprobieren schon 
fast gedacht habe). Vielleicht bekomme ich ein EPOS2, mit dem ist das 
dann möglich :) Sowohl über RS232, als auch über USB :-)

von Christoph K. (quaximan)


Lesenswert?

Halo LONy ich habe gerade euere Beiträge hier im Forum, beschäftige mich 
nämlich derzeit mit dem Gleichen Thema Maxon EPOS 60W, ich habe das 
Visual Basic mal gestartet die Kommunikation zu dem Antrieb 
funktioniert. Jetzt habe ich mal versucht ein pasar Funktionen 
anzusprechen, da musste ich mich fragen was ist das für ein Datentyp 
HANDLE und bei dem Aufruf VCS_GetBaudrateSelection("EPOS", 
"Maxon_RS232", "RS232", "COM1", informationsende, baudrate, 
pEndofSelection, pErrorCode), wird beschrieben das die Rückgabe von 
baudrate ein Pointer auf ein DWord ist, ich frage mich in diesem Fall 
wie kann ich die bekommenen Informationen auslesen? Hätte jemand für 
mich ein funktionierendes Programmbeispiele zu dem Antrieb aus  dem ich 
eventuell ein paar Schlüsse ziehen kann, komm nämlich so nicht weiter. 
Danke schon mal für feedback!!!

von Michael S. (michael8192)


Angehängte Dateien:

Lesenswert?

Hallo,

also HANDLE, DWORD usw. sind Datentypen aus diversen Windows API-Klassen 
soweit ich weiss. Z.B. DWORD: "Gibt eine 32-Bit-Binärzahl an. Dieser 
Wert entspricht dem Win32-API-Registrierungsdatentyp REG_DWORD"
und ist Mitglied der Klasse Microsoft.Win32.RegistryValueKind. Bei 
HANDLE wird es ähnlich sein. Ich habe auf der Website von Maxon 
(maxonmotor.com) eine Tabelle unterstützter Datentypen gesehen (siehe 
Anhang). Du musst lediglich die Variablen vom entsprechenden Datentyp 
(DWORD, HANDLE , WORD was auch immer) definieren, die Du dann 
entsprechend der Funktionsdeklaration als Argument übergibst, entweder 
als Zeiger oder Werttyp (Kopie). Die Funktionen (dokumentiert in EPOS 
Command Library.pdf) liefern meistens eine Wert vom Datentyp BOOL oder 
HANDLE, den Du dann auswerten kannst. (Beispielcode ist nicht getestet, 
nur exemplarisch). Der Support von Maxon hilft übrigens auch gerne 
weiter.
1
//Beispiel aus Definition.h
2
Initialisation_DllExport HANDLE __stdcall VCS_OpenDeviceDlg(DWORD* pErrorCode);//Startet die Kommunikation
3
...
4
StateMachine_DllExport BOOL __stdcall VCS_SetEnableState(HANDLE KeyHandle, WORD NodeId, DWORD* pErrorCode);//Schaltet Steuergerät ein
5
6
//in main
7
#include <Definitions.h>
8
int main (void)
9
{
10
   DWORD errorcode=0;
11
   WORD nodeid = 1;
12
   HANDLE keyhandle = 0;
13
   bool flag=0;
14
15
16
   keyhandle=VCS_OpenDeviceDlg(&errorcode)
17
   if(keyhandle)
18
   {
19
      //Clear Error History
20
      if(VCS_ClearFault(keyhandle, nodeid, &errorcode))
21
      {
22
         flag = VCS_SetEnableState(keyhandle, nodeid, &errorcode);
23
         if(flag)
24
            printf("Geraet ein\n");
25
         else
26
            printf("Fehler %d\n", errorcode);
27
      }
28
      else
29
         printf("Fehler2 %d\n", errorcode);
30
   }
31
   else
32
   {
33
      printf("Kommunikationsfehler %d\n", errorcode);
34
   }
35
36
}

von Ralf R. (surtur)


Lesenswert?

Hallo,

ich weis das Thema ist schon etwas länger her. Trotzdem möchte ich in 
Erfahrung bringen, wie eure Erfahrungen mit der Epos und Rs232 sind.

Ich schreibe mir gerade eine Ansteuerung per Rs232 mittels C++ ohne die 
Verwendung der DLLs. (Da ein Atmega die Steuerung übernehmen soll) Habe 
derzeit folgendes Problem beim Ansteuern einer Epos/Epos2. [Bisher ist 
nur den NMT Befehl implementiert. Hier tritt aber schon folgendes 
Phänomen auf...]. Habe ich nichts weiter am CAN hängen (also kein Ixxat 
welches gerade den MiniMon zum sniffen geöffnet hat) und bestrome die 
Epos, geht diese gleich auf status Rot. Sie nimmt per RS232 NMT befehle 
an, quittiert den erhalt positiv, beim RestartNode blinkt mal für ein 
Bruchteil einer Sekunde die grüne LED, dann ist wieder Rot angesagt.

Sprich, Sie geht nicht in den Pro-Op Stauts oder gar Op.

Schließe ich ggf. den IxxatDongle an, starte den MiniMon (egal ob 
dauerhaft angeschlossen oder Anschluss erst jetzt) und lausche auf dem 
Bus, ist kein Traffic auf dem Bus zu sehen. Sende ich jetzt per Rs232, 
RestartNode oder GoPreOp, wechselt der Status in grün-blinkend und die 
Epos wechselt in entsprechenden angeforderten Modi. Sowie das MiniMon 
beendet wird, wechselt diese wieder auf Rot.

Gleiches verhalten bei geöffnetem MiniMon und anschließender Bestromung. 
Hier geht die Epos gleich auf grün-blinkend. Mache ich den Monitor zu 
ist Schluss. Positive Antworten auf meine NMT Befehle, aber kein 
Statuswechsel.

Jedoch wurde mir gesagt, man könne die Epos auch ausschließlich mit 
Rs232 betreiben. (In dem AtmelProjekt sollen lediglich ein Drive und ein 
paar Ventile gesteuert werden. Somit ist RS232 ausreichend und CAN als 
Bus nicht wirklich erforderlich.)

Ich weis auch das die LEDs nur den CAN Status signalisieren, jedoch 
arbeite ich ja auch mit den CANopen Registern zum Konfigurieren und 
Steuern, und ich vermute, solange das nicht grün blinkt, wird sich da 
auch nichts drehen in Sachen Motor. Was kann ich hier tun. Die Frage ist 
auch schon mit ScreenShots an den technischen Support von Maxon 
gegangen. Allerdings heute auf den Freitag Nachmittag werde ich 
sicherlich nicht mehr mit einer Antwort rechnen können. Dem Handbüchern 
konnte ich leider auch nichts dergleichen entnehmen. Hier ist die 
Steuerung der Firmware per CANopen weitaus detailierter beschrieben als 
die Ansteuerung per RS232.


LG,
SurtuR

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.