Seite 1 von 1
Python und ZEMAX - Schreiben von 'Extensions'
Verfasst: Mittwoch 14. März 2007, 14:48
von Tazmany
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")
Verfasst: Mittwoch 14. März 2007, 17:56
von 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.
File ist ok und vorhanden
Verfasst: Mittwoch 14. März 2007, 19:35
von Tazmany
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
Verfasst: Mittwoch 14. März 2007, 19:59
von 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?
Problem besteht immer noch!
Verfasst: Mittwoch 21. März 2007, 11:49
von Tazmany
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
Re: Problem besteht immer noch!
Verfasst: Mittwoch 21. März 2007, 20:11
von Leonidas
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?
Verfasst: Donnerstag 22. März 2007, 08:25
von MBR
# 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
Verfasst: Donnerstag 22. März 2007, 08:27
von MBR
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
Verfasst: Donnerstag 22. März 2007, 10:11
von Tazmany
@ 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
@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.
Verfasst: Donnerstag 22. März 2007, 10:20
von Tazmany
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