Python Leistungsmessergerät mit SCPI ansprechen

MesserJack

Cadet 4th Year
Registriert
Dez. 2006
Beiträge
102
Guten Tag,

ich möchte mit Python auf ein Leistungsmessgerät zugreifen. Auf meinen System befindet sich Python 2.7.
Ich gehe nach dieser Anleitung: http://www.zes.com/de/content/downl..._applicat_108_Programmers_Guide_Rev_1.0_e.zip

Wenn ich versuche das zes Modul zu laden, kommt immer eine Fehlermeldung. Es ist ein Treiber für die RS232 Schnittstelle von ZES Zimmer, damit ich sofort drauf loslegen kann.
Ich habe schon versucht die path variable zu erweitern.
Code:
import sys
sys.path.append('C:\\Users\\Michael\\Desktop\\Projekt\\Programmierung\\bin')
print sys.path
['', 'C:\\Python27\\Lib\\idlelib', 'C:\\Windows\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Users\\Michael\\Desktop\\Projekt\\Programmierung\\bin']

Aber wenn ich ein Programm starten will kommt trotzdem die Fehlermeldung
Code:
>>> 

Traceback (most recent call last):
  File "C:\Users\Michael\Desktop\Projekt\Programmierung\hello.py", line 6, in <module>
    import zes
ImportError: No module named zes

Hier ist das Script, welches ich verusche zu starten.

Code:
#
# HELLO.PY
#

# load ZES RS232 functions
import zes                 

# Open the serial interface:
LMG=zes.Open("COM3", "BAUD=38400 EOS=LF PROTO=RTS/CTS")

# Write command to instrument
zes.Write(LMG, "*IDN?")    

# Read answer from instrument
answer=zes.Read(LMG)       

# Place answer on screen
print "The connected instrument is:\n"+answer

# Write command to instrument
zes.Write(LMG, "GTL")      

# Close connection
zes.Close(LMG)             
print "\nProgramm finished"
 
Ich wüsste ehrlich gesagt nicht, wo das Modul herkommen soll. Das einzige, was ich sehe, ist die mitgelieferte DLL. Die würde ich mal einbinden und schauen, ob ich die Funktionen dann aufrufen kann.

Kann ich aber nicht für dich testen, weil ich kein Windows habe.
 
Ich habe es jetzt versucht, aber es gelingt immer noch nicht . Ich habe es auch mit PyDLL, CDLL versucht. Ich bin jetzt nicht ganz fit, was Python angeht. Ich habe es gesehen, dass es eine DLL ist, aber ich dachte, ich kann sie wie ganz normal mit import blabla laden.
Code:
import ctypes
zes = ctypes.WinDLL("C:\\Users\\Michael\\Desktop\\Projekt\\Programmierung\\bin\\zes.dll")

Code:
Traceback (most recent call last):
  File "C:/Python27/Workspace/ctypestest.py", line 4, in <module>
    zes = ctypes.WinDLL("C:\\Users\\Michael\\Desktop\\Projekt\\Programmierung\\bin\\zes.dll")
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] Das angegebene Modul wurde nicht gefunden
 
Mit import kannst du meines Wissens nach nur Module reinziehen, die entweder im eigenen Workspace (also direkt neben deinem Script oder in der Package-Struktur daneben) liegen oder die im System (in Linux liegt das im Python-Installations-Folder /usr/local/lib/python...) installiert wurden, z.B. mit pip. Gäbe es eine zes.py, könntest du die in deinen Workspace kopieren und mit import loslegen. Sehe ich aber nicht, daher kann ich mir nur den Weg über die DLL vorstellen.

Da bin ich aber raus, bzw. müsste selbst etwas rumfummeln. Und wie gesagt, das kann ich in dem Fall nicht, weil DLLs ein Windows-Konstrukt sind.

Vielleicht findet sich ja hier jemand, der damit Erfahrung hat und dir weiterhelfen kann. Ansonsten musst du mal in Richtung der Fehlermeldung wühlen und selbst probieren.
 
Du hast entweder vergessen, noch zusätzlich das Modul zes.py von der Seite herunterzuladen (schau noch mal, vielleicht gibt's da noch einen zusätzlichen D/L), oder die Spastis haben einfach vergessen, das Modul dem Archiv hinzuzufügen.
Ergänzung ()

Hmpf, ich war zu schnell mit der Behauptung. Asche über mein Haupt. In dem Archiv liegt im bin-Ordner eine mitgelieferte und anscheinend modifizierte python.exe. Wenn du dein Python-Skript über diese python.exe startest, funktioniert auch der import auf das zes-Modul.
 
Danke leute, mit der python.exe im bin Ordner hat es funktioniert. Also es kam keine Fehlermeldung und das Script wurde ausgeführt. Jetzt wollte ich mit pyVisa oder pyserial und es mit Python 3.4 versuchen. Ich werde morgen dann berichten, falls es wieder probleme gibt :p
Ergänzung ()

Hallo Leute, ich versuche es jetzt mit Python 3.4 und pyserial. Eigentlich müsste es ja egal sein, mit welcher Sprache ich es mache. SCPI werden ja als ASCII an das Instrument übergeben.

Code:
import serial
#Öffnet serielle Schnittstelle
zes = serial.Serial()
zes.baudrate = 38400
zes.port = 2
zes.rtscts = 1
zes
zes.open()
#Gibt ein True aus
zes.isOpen()
#Löscht den Buffer
zes.flushInput()
zes.flushOutput()
zes.write(bytes("*IDN?",encoding ="ascii"))
#Soll die Identifikation in eine Variable speichern und decodieren
a = zes.read()
a = a.decode("ascii")
print(a)
zes.close()
Wenn ich es mit der Python IDLE Schritt für Schritt durchführe, kommt immer nach a= zes.read() nichts mehr, weder ein Fehler noch läuft das Script weiter. Es hängt sich einfach auf. Leider ist die pyserial Homepage down... Ich kann nicht mal richtig nachgucken...
 
Ich vermute, dass zes.read() einfach blockiert, bis von der Gegenseite Daten ankommen, und wenn nix kommt, blockiert es halt bis in alle Ewigkeit. WARUM von der Gegenseite keine Daten kommen, das weiß Gott allein ...
 
Zurück
Oben