Python und ZEMAX - Schreiben von 'Extensions'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tazmany
User
Beiträge: 5
Registriert: Mittwoch 7. März 2007, 14:45
Wohnort: Tuttlingen

Hallo Python-Benutzer,

ich bin seit kurzem erst Benutzer von Python, da ich dessen Fähigkeiten der Kommunikation mit der Optikdesignsoftware ZEMAX über DDE ausnutzen möchte. Daher suche ich jemanden, der Erfahrungen auf diesem Gebiet aufweisen kann.
Mein konkretes Problem ist, dass ich in einem Textfenster in Zemax einen vorher generierte TXT-Datei darstellen möchte, mir ZEMAX aber eine Fehlermeldung brigt, dass es die Datei nicht öffnen kann.

Kann mir bitte jemand dabei helfen!
Danke an alle.

Gruß Tazmany

Code: Alles auswählen

import win32ui
import dde
import locale



server = dde.CreateServer()
server.Create("Test_Zemax_DDE")

conversation = dde.CreateConversation(server)

# Zemax benötigt kein 'topic', es muss ein leerer String mitgeschickt werden
conversation.ConnectTo("ZEMAX"," ")

sys_data = conversation.Request('GetSystem')

.
.
.

    hello.write(message)

hello.close()

conversation.Request("MakeTextWindow, C:\Tutorial\deleteme.txt, C:\Tutorial\Zemax_Radienvergleich.py, Normradientest, 6 5 4 12.55")
Wer kämpft kann verlieren,
wer nicht kämpft hat bereits verloren.
BlackJack

Du zeigst nicht wie/wo die Datei geöffnet wird, in die Du schreibst. Ist die denn wirklich vorhanden?

Und Du musst mit '\' in Zeichenketten aufpassen: Die werden benutzt um bestimmte Sonderzeichen wie Zeilenenden oder Tabs in Zeichenketten unterzubringen. Ein einzelner '\' muss entweder als '\\' geschrieben werden, oder Du musst "raw"-Zeichenketten verwenden, bei denen ein kleines r vor der Zeichenkette steht. Dann wird der '\' beim Übersetzen nicht besonders behandelt.
Tazmany
User
Beiträge: 5
Registriert: Mittwoch 7. März 2007, 14:45
Wohnort: Tuttlingen

Hi BlackJack,

Danke für die Antwort. Kurz noch ein paar Erläuterungen.
Der File ist vorhanden und ist einer reiner ASCII-File (ohne '\') in dem einfach Messwerte/Rechenwerte untereinander stehen (mit Punkt getrennt!).
Mein Problem ist, dass die DDE-Anweisung für ZEMAX den File nicht öffnen kann, er wird folglich gefunden, kann nur von ZEMAX nicht richtig interpretiert und in einem ZEMAX-Textfenster angezeigt werden. Dem File wird die Variable 'hello' zugeordnet, wie ersichtlich wird sie dann auch sachgemäß geschlossen bevor sie via DDE 'abgefragt' wird.
Falls noch Fragen sind bitte nochmals nachfragen.

Habe es heute nochmals überprüft und probiert, geht aber immer noch nicht.

Danke,
Tazmany
Wer kämpft kann verlieren,
wer nicht kämpft hat bereits verloren.
BlackJack

Ich meine die '\' in Deinem Quelltext. Da sind einige in den Pfadangaben.

Wo wird die Datei denn erzeugt? Liegt sie wirklich dort wo das andere Programm danach sucht?

Bei dem `Request()`, wie würde man dort einen Dateinamen mit einem Komma angeben?
Tazmany
User
Beiträge: 5
Registriert: Mittwoch 7. März 2007, 14:45
Wohnort: Tuttlingen

Hi BlackJack,

ok, die '\' sollten eigentlich nicht stören, da es von ZEMAX komplett als String angesehen wird. Im ZEMAX-Forum hatte ich noch weitere Tipps bekommen, das der File *.py nicht anerkannt wird, da es eine *.exe sein muss. Nach der Konvertierung zu einer auszuführenden Datei und der KOrrektur des Ortes!!! (auch der Einwand von Dir), hat es aber immer noch nicht funktioniert.
Das ZEMAX-Forum ist leider auch nicht sehr informativ, da man registriert sein muss (Supportnummer) und die 'breite Masse' der Anwender fehlt.

Noch zur letzten Anmerkung von Dir ... Bei dem `Request()`, wie würde man dort einen Dateinamen mit einem Komma angeben?.

Ehrlich gesagt keine Ahnung, ich denke mal das wird dann nicht funktionieren.

Ich freue mich weiterhin über Hilfe und Anregungen. Python will ich auf jeden Fall Treu bleiben (auch wenn nur als Hooby).

Tschüss,
Tazmany
Wer kämpft kann verlieren,
wer nicht kämpft hat bereits verloren.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Tazmany hat geschrieben:ok, die '\' sollten eigentlich nicht stören, da es von ZEMAX komplett als String angesehen wird.
Der vom Python-Interpreter interpretiert wird und gegebenfalls Probleme bereiten kann. Ist es etwa so schwer das r davor zu setzen, dass du BlackJacks Tipp nicht umsetzen kannst?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
MBR
User
Beiträge: 29
Registriert: Freitag 29. September 2006, 17:03

# Zemax benötigt kein 'topic', es muss ein leerer String mitgeschickt werden
conversation.ConnectTo("ZEMAX"," ")
" " sehe ich nicht als leeren String an, ist je immerhin was drinnen. Leer heißt für mich "".

Vieleicht hilft´s ja...

Gruß,
Markus
MBR
User
Beiträge: 29
Registriert: Freitag 29. September 2006, 17:03

Außerdem könntest du dir den Response des DDE Requests mal ausgeben lassen. Könnte auch helfen...

Code: Alles auswählen

resp = conversation.Request("MakeTextWindow, C:\Tutorial\deleteme.txt, C:\Tutorial\Zemax_Radienvergleich.py, Norrmradientest, 6 5 4 12.55")
print resp
Gruß,
Markus
Tazmany
User
Beiträge: 5
Registriert: Mittwoch 7. März 2007, 14:45
Wohnort: Tuttlingen

@ Leonidas
Der vom Python-Interpreter interpretiert wird und gegebenfalls Probleme bereiten kann. Ist es etwa so schwer das r davor zu setzen, dass du BlackJacks Tipp nicht umsetzen kannst?.
Nein, ist nicht schwer, funktioniert aber trotzdem nicht. Danke für den Hinweis 8)

@MBR

das mit dem total leeren String hatte ich zuerst ausprobiert, das Leerzeichen war schon die nächste Variante. Danke für den Tipp.

Bei dem zweiten Tipp mit 'resp' funktioniert es leider auch nicht, das Programm bleibt die Zeile zuvor stecken, weil die Datei nicht gefunden wird.
Wer kämpft kann verlieren,
wer nicht kämpft hat bereits verloren.
Tazmany
User
Beiträge: 5
Registriert: Mittwoch 7. März 2007, 14:45
Wohnort: Tuttlingen

Hi MBR,

ich habe gerade noch was probiert. Wenn ich das Skript (py) laufen lasse, aber den übersetzten Text (exe) im ZEMAX-Ordner (Extend) belasse und das Skript laufen lasse, bringt mir ZEMAX wieder die gleiche Fehlermeldung. Klicke ich diese Meldung weg, wird das Programm doch noch zu Ende ausgeführt und als "Response" bekomme ich ein 'OK' von Python geliefert! Hmmm, was nun :?:

Ich bleibe dran :!:

Tazmany
Wer kämpft kann verlieren,
wer nicht kämpft hat bereits verloren.
Antworten