Forum: PC-Programmierung PI-Axen mit C++ programmieren (Move Relative)


von Alex M. (axolotl80)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich bin neu hier und bräuchte eure Hilfe. Ich bin ein absoluter 
Programmieranfänger und möchte es unbedingt lernen. Deshalb habe ich mir 
eine Studienarbeit ausgesucht, wo ich etwas programmieren muss.
Mein Problem:
Ich habe ältere PI (Physik Instrumente  M-511.5i) Lineartische die ich 
in C++ programmieren möchte. Von PI habe ich schon eine .dll, .lib und 
eine headerdatei erhalten, ich konnte sie einbinden und die Tische 
konnte ich auch schon verfahren. Das funktioniert ziemlich einfach mit 
der funktion LAN_sendString("1MA66666");. Es wird ein string an den µc 
gesendet, der in diesem fall mit der "1" die Achse anspricht, danach MA 
(Move Absolut) und 66666 sind die Schritte. Damit bewegen sich die 
Achsen. Nun möchte ich die Achsen auch relativ bewegen lassen und das 
geht laut PI nicht so einfach. Es gibt die Basic commands wie das "MA" 
und die extended commands wie "MR" (Move Relative) siehe Scan. Um die 
extended commands zu benutzen muss die LAN_translate(char *command; char 
*report) funktion verwender werden. Ich denke, dass bei char *command 
der String reingeschrieben wird ("1MR50000"), ich weiss aber nicht was 
bei report rein kommt. Kennt sich vielleicht jemand mit den PI-Achsen 
aus und kann mir helfen?

schon mal vielen Dank im Voraus

von Firutin (Gast)


Lesenswert?

Vor sechs Jahren habe ich in einer Projektarbeit mit PI-Lineartischen 
unter Linux (Ubuntu) in C gearbeitet.

Zumindest damals war PI selber sehr Hilfsbereit und hat mit unter 
anderem einen Linux-Treiber (experimentel oder noch in der Entwicklung, 
weiß ich nicht mehr genau) bereit gestellt.

Ich weiß jetzt nicht mehr genau, was übergeben werden muss.
Nachdem aber ein Pointer gefordert wird, sowohl für den Command-String 
als auch den Report-String würde ich es einfach ausprobieren.

Ich meine mich zu erinnern, dass die Controller-Karte nach erreichen der 
Position eine Meldung zurückgegeben hat.

Andernfalls würde ich einfach bei PI direkt mal nachfragen.
Der Kontakt damals war sehr nett und äußerst Hilfsbereit.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Alex M. schrieb:
> Ich denke, dass bei char *command
> der String reingeschrieben wird ("1MR50000"), ich weiss aber nicht was
> bei report rein kommt. Kennt sich vielleicht jemand mit den PI-Achsen
> aus und kann mir helfen?

Wenn das so aus der Dokumentation nicht hervor geht, dann ist das ein 
Bug in der Dokumentation. Wenn Firutin recht hat, freut sich der 
Hersteller ggf. sogar über feedback von Leuten, die da nicht jeden Tag 
mit arbeiten.

Dokumentation wie "report: the report" sind immer sehr hilfreich! ;-)

von Alex M. (axolotl80)


Lesenswert?

Hallo also vielen Dank für eure Antworten.
Ich habe wie empfohlen PI angeschrieben, leider war die Antwort nicht 
positiv, denn sie haben den Support für diese Tische eingestellt und 
konnten mir leider nicht helfen.

von physiker (Gast)


Lesenswert?

Hast Du es einfach mal mit einem leeren String für "report" versucht, so 
wie von Firutin vorgeschlagen? Und mal schauen, ob danach etwas anderes 
drin steht?

von Hans (Gast)


Lesenswert?

Kannst Du mehr von der Dokumentation hochladen? Vielleicht ergibt es 
sich ja aus dem Zusammenhang. Irgendwo ist bestimmt erwähnt, was es mit 
den Reports auf sich hat.

Aus der Beschreibung der LAN_translate alleine ist mir nicht klar, was 
sie macht. Übersetzt sie tatsächlich zwischen den beiden Strings, also 
formt ein Command in ein Report um oder umgekehrt? Oder sendet sie das 
Command an die Hardware und liefert ein Report zurück? Oder kann man 
entweder ein Command oder ein Report übergeben und der andere Wert darf 
NULL sein? Könnte alles sein.

Im Zweifel probier einfach mal ein paar Varianten aus und schau auf die 
Fehlercodes. Übergib beim jeweils anderen Parametern mal einen 
NULL-Pointer oder einen Zeiger auf freien Speicher und schau, ob sich 
danach etwas im Speicher geändert hat.

von Firutin (Gast)


Lesenswert?

Die Info mit welchem Controller du die PI-Tische ansteuerst, wäre noch 
hilfreich.

Ich habe damals (glaube ich zumindest) den Controller C-843 verwendet.
http://www.physikinstrumente.de/produkt-detailseite/c-843-900950.html
Und hier auch entsprechend die mitgelieferte DLL-Bibliothek.

So viel ich weiß, sollten die meisten Controller vom Befehlssatz her den 
PI-GCS unterstützen.
Damit sollte es zumindest für dich möglich sein, schon mal die richtigen 
Kommandes herauszufinden.

Eventuell findest du auch auf der PI USA Seite noch etwas.
http://www.pi-usa.us/products/Software/index.php

Grundsätzlich hat es für ziemlich viele Programmiersprachen auch 
Beispiele von PI gegeben.


Wenn du den Controller-Typen noch mitteilen kannst, finden wir 
vielleicht noch eine Lösung.

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.