Zugang zu USB über Python

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.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Achso, meinst du etwa SWIG als Systemvariable deklarieren?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Toni83 hat geschrieben:Das SWIG muss im %PATH% sein, damit die distutils die afair findet?
Du musst schon richtig zitieren, damit es Sinn macht:
Leonidas hat geschrieben:Wenn SWIG im %PATH% ist, dann findet distutils die afair von selbst.
Da heißt: wenn das "Simplified Wrapper and Interface Generator"-Binary (in deinem Fall swig.exe) in einem Ordner ist der in der Umgebungsvariable %PATH% gespeichert ist gefunden wird, dann finden as far as I recall (Slang) die Python distutils dieses Programm und können es verwenden, ohne zusätzliche Konfiguration zu benötigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Servus,

habe gestern noch Visual Studio 6.0 auf meinem Rechner installiert, wie Python es benötigt. Zusätzlich habe ich auch noch SWIG installiert und beides als Systemvariablen deklariert.
Nun geht das ganze schon ein ganzes Stück weiter, allerdings treten immer noch Fehler auf:

D:\Python23>python setup.py build
running build
running build_py
copying nidaq.py -> build\lib.win32-2.3
running build_ext
building '_nidaq' extension
swigging nidaq.i to nidaq_wrap.c
D:\Programme\swigwin-1.3.29\swig.exe -python -o nidaq_wrap.c nidaq.i
nidaq.i(37): Warning(118): %typemap(except) is deprecated. Use the %exception di
rective.
D:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe /c /nologo /Ox /MD /W3 /GX
/DNDEBUG -I. "-ID:/Programme/National Instruments/NI-DAQ/DAQmx ANSI C Dev/includ
e" -ID:\Python23\include -ID:\Python23\PC /Tcnidaq_wrap.c /Fobuild\temp.win32-2.
3\Release\nidaq_wrap.obj
nidaq_wrap.c
nidaq_wrap.c(2479) : fatal error C1083: Cannot open include file: 'Numeric/array
object.h': No such file or directory
error: command '"D:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe"' failed w
ith exit status 2

Soviel ich sehen kann fehlt die object.h, oder er kann diese nicht finden. Soviel ich noch von der C-Programmierung weiss, ist object.h eines der Standardbibliotheken.
Was ist da falsch? Und was bedeutet "failed with exit status 2"?

Gruss,
Toni
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Guck was vor dem object.h steht: "Numeric/object.h" fehlt, das gehört zur Numeric-Bibliothek für Python. Such mal im Netz danach; dafür gibts auch einen Python-Installer.
--- Heiko.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Sorry, wusste nicht, dass dies zu Python gehört.
Werde gleich mal nachschauen. Danke.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Toni83 hat geschrieben:Sorry, wusste nicht, dass dies zu Python gehört.
Gibts hier.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Habe jetzt die Numeric Bibliothek für Python installiert.
Nachdem ich sämtliche Bibliotheken von National Instruments eingefügt habe, die setup.py benötigt, kamen Probleme beim linken:

D:\Python23>python setup.py build
running build
running build_py
copying nidaq.py -> build\lib.win32-2.3
running build_ext
building '_nidaq' extension
swigging nidaq.i to nidaq_wrap.c
D:\Programme\swigwin-1.3.29\swig.exe -python -o nidaq_wrap.c nidaq.i
nidaq.i(37): Warning(118): %typemap(except) is deprecated. Use the %exception di
rective.
D:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe /c /nologo /Ox /MD /W3 /GX
/DNDEBUG -I. "-ID:/Programme/National Instruments/NI-DAQ/DAQmx ANSI C Dev/includ
e" -ID:\Python23\include -ID:\Python23\PC /Tcnidaq_wrap.c /Fobuild\temp.win32-2.
3\Release\nidaq_wrap.obj
nidaq_wrap.c
nidaq_wrap.c(2865) : warning C4013: 'AI_Check' undefined; assuming extern return
ing int
nidaq_wrap.c(2907) : warning C4013: 'AI_Clear' undefined; assuming extern return
ing int
nidaq_wrap.c(2982) : warning C4013: 'AI_Configure' undefined; assuming extern re
turning int
nidaq_wrap.c(3034) : warning C4013: 'AI_Read' undefined; assuming extern returni
ng int
nidaq_wrap.c(3085) : warning C4013: 'AI_Read_Scan' undefined; assuming extern re
turning int
nidaq_wrap.c(3133) : warning C4013: 'AI_Setup' undefined; assuming extern return
ing int
nidaq_wrap.c(3185) : warning C4013: 'AI_VRead' undefined; assuming extern return
ing int
nidaq_wrap.c(3236) : warning C4013: 'AI_VRead_Scan' undefined; assuming extern r
eturning int
nidaq_wrap.c(3315) : warning C4013: 'AI_VScale' undefined; assuming extern retur
ning int
nidaq_wrap.c(3396) : warning C4013: 'AO_Configure' undefined; assuming extern re
turning int
nidaq_wrap.c(3426) : warning C4013: 'AO_Update' undefined; assuming extern retur
ning int
nidaq_wrap.c(3478) : warning C4013: 'AO_VScale' undefined; assuming extern retur
ning int
nidaq_wrap.c(3532) : warning C4013: 'AO_VWrite' undefined; assuming extern retur
ning int
nidaq_wrap.c(3580) : warning C4013: 'AO_Write' undefined; assuming extern return
ing int
nidaq_wrap.c(3618) : warning C4013: 'DAQ_Check' undefined; assuming extern retur
ning int
nidaq_wrap.c(3660) : warning C4013: 'DAQ_Clear' undefined; assuming extern retur
ning int
nidaq_wrap.c(3702) : warning C4013: 'DAQ_Config' undefined; assuming extern retu
rning int
nidaq_wrap.c(3741) : warning C4013: 'DAQ_DB_Config' undefined; assuming extern r
eturning int
nidaq_wrap.c(3779) : warning C4013: 'DAQ_DB_HalfReady' undefined; assuming exter
n returning int
nidaq_wrap.c(3846) : warning C4013: 'DAQ_DB_Transfer' undefined; assuming extern
returning int
nidaq_wrap.c(3942) : warning C4013: 'DAQ_Monitor' undefined; assuming extern ret
urning int
nidaq_wrap.c(4033) : warning C4013: 'DAQ_Op' undefined; assuming extern returnin
g int
nidaq_wrap.c(4081) : warning C4013: 'DAQ_Rate' undefined; assuming extern return
ing int
nidaq_wrap.c(4169) : warning C4013: 'DAQ_Start' undefined; assuming extern retur
ning int
nidaq_wrap.c(4217) : warning C4013: 'DAQ_StopTrigger_Config' undefined; assuming
extern returning int
nidaq_wrap.c(4304) : warning C4013: 'DAQ_to_Disk' undefined; assuming extern ret
urning int
nidaq_wrap.c(4351) : warning C4013: 'Get_DAQ_Device_Info' undefined; assuming ex
tern returning int
nidaq_wrap.c(4382) : warning C4013: 'Get_NI_DAQ_Version' undefined; assuming ext
ern returning int
nidaq_wrap.c(4422) : warning C4013: 'Init_DA_Brds' undefined; assuming extern re
turning int
nidaq_wrap.c(4535) : warning C4013: 'SCAN_Op' undefined; assuming extern returni
ng int
nidaq_wrap.c(4618) : warning C4013: 'SCAN_Setup' undefined; assuming extern retu
rning int
nidaq_wrap.c(4714) : warning C4013: 'SCAN_Start' undefined; assuming extern retu
rning int
nidaq_wrap.c(4831) : warning C4013: 'SCAN_to_Disk' undefined; assuming extern re
turning int
nidaq_wrap.c(4886) : warning C4013: 'Timeout_Config' undefined; assuming extern
returning int
nidaq_wrap.c(4934) : warning C4013: 'WFM_Chan_Control' undefined; assuming exter
n returning int
nidaq_wrap.c(4985) : warning C4013: 'WFM_Check' undefined; assuming extern retur
ning int
nidaq_wrap.c(5078) : warning C4013: 'WFM_ClockRate' undefined; assuming extern r
eturning int
nidaq_wrap.c(5159) : warning C4013: 'WFM_DB_Config' undefined; assuming extern r
eturning int
nidaq_wrap.c(5223) : warning C4013: 'WFM_DB_HalfReady' undefined; assuming exter
n returning int
nidaq_wrap.c(5309) : warning C4013: 'WFM_DB_Transfer' undefined; assuming extern
returning int
nidaq_wrap.c(5419) : warning C4013: 'WFM_from_Disk' undefined; assuming extern r
eturning int
nidaq_wrap.c(5477) : warning C4013: 'WFM_Group_Control' undefined; assuming exte
rn returning int
nidaq_wrap.c(5540) : warning C4013: 'WFM_Group_Setup' undefined; assuming extern
returning int
nidaq_wrap.c(5636) : warning C4013: 'WFM_Load' undefined; assuming extern return
ing int
nidaq_wrap.c(5734) : warning C4013: 'WFM_Op' undefined; assuming extern returnin
g int
nidaq_wrap.c(5789) : warning C4013: 'WFM_Rate' undefined; assuming extern return
ing int
nidaq_wrap.c(5871) : warning C4013: 'WFM_Set_Clock' undefined; assuming extern r
eturning int
nidaq_wrap.c(6050) : warning C4013: 'Config_DAQ_Event_Message' undefined; assumi
ng extern returning int
D:\Programme\Microsoft Visual Studio\VC98\BIN\link.exe /DLL /nologo /INCREMENTAL
:NO "/LIBPATH:D:\Programme\National Instruments\NI-DAQ\DAQmx ANSI C Dev\lib" /LI
BPATH:D:\Python23\libs /LIBPATH:D:\Python23\PCBuild nidaq32.lib nidex32.lib /EXP
ORT:init_nidaq build\temp.win32-2.3\Release\nidaq_wrap.obj /OUT:build\lib.win32-
2.3\_nidaq.pyd /IMPLIB:build\temp.win32-2.3\Release\_nidaq.lib
Creating library build\temp.win32-2.3\Release\_nidaq.lib and object build\tem
p.win32-2.3\Release\_nidaq.exp
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Check
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Clear
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Configure
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Read
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Read_Scan
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_Setup
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_VRead
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_VRead_Scan
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AI_VScale
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AO_Configure
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AO_Update
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AO_VScale
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AO_VWrite
nidaq_wrap.obj : error LNK2001: unresolved external symbol _AO_Write
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Check
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Clear
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Config
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_DB_Config
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_DB_HalfReady
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_DB_Transfer
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Monitor
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Op
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Rate
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_Start
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_StopTrigger_Conf
ig
nidaq_wrap.obj : error LNK2001: unresolved external symbol _DAQ_to_Disk
nidaq_wrap.obj : error LNK2001: unresolved external symbol _Get_DAQ_Device_Info
nidaq_wrap.obj : error LNK2001: unresolved external symbol _Get_NI_DAQ_Version
nidaq_wrap.obj : error LNK2001: unresolved external symbol _Init_DA_Brds
nidaq_wrap.obj : error LNK2001: unresolved external symbol _SCAN_Op
nidaq_wrap.obj : error LNK2001: unresolved external symbol _SCAN_Setup
nidaq_wrap.obj : error LNK2001: unresolved external symbol _SCAN_Start
nidaq_wrap.obj : error LNK2001: unresolved external symbol _SCAN_to_Disk
nidaq_wrap.obj : error LNK2001: unresolved external symbol _Timeout_Config
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Chan_Control
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Check
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_ClockRate
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_DB_Config
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_DB_HalfReady
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_DB_Transfer
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_from_Disk
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Group_Control
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Group_Setup
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Load
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Op
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Rate
nidaq_wrap.obj : error LNK2001: unresolved external symbol _WFM_Set_Clock
nidaq_wrap.obj : error LNK2001: unresolved external symbol _Config_DAQ_Event_Mes
sage
build\lib.win32-2.3\_nidaq.pyd : fatal error LNK1120: 48 unresolved externals
error: command '"D:\Programme\Microsoft Visual Studio\VC98\BIN\link.exe"' failed
with exit status 1120

Weiß jemand von euch was "unresolved external symbol" heißt? Das benötigte "_nidaq.pyd" wurde deshalb nicht erstellt, was ein sehr großes Problem bedeutet.

Gruss,
Toni
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

unresolved external symbol ...
"Nicht auflösbares externes Symbol" wäre wohl eine ordentliche Deutsche übersetzung. Im Endeffekt heißt das soviel wie dass das Programm was Du probierst zu kompilieren eine Funktion oder ein Datenelement des entsprechenden Namens aus einer Bibliothek braucht, allerdings der linker, der die einzelnen Teile eines Programms zusammenfügt (daher der Name für diesen Schritt) diese Namen über die er meckert nirgendwo im Programm (in diesem Fall in der Python-Erweiterung) finden kann.

Im Endeffekt bedeutet das, daß Du gegen eine .lib-Datei linken mußt, in der diese Namen beschrieben sind, aber das nicht tust.

Unabhängig davon: der Compiler meldet auch schon eine ganze Menge Fehler, und zwar sind in der Quelldatei auch keine Beschreibungen für die Symbole die gesucht werden vorhanden (deswegen diese Warnung), und damit wird ein Standardrückgabewert für die Funktion des entsprechenden Namens angenommen. Das ist unschön, drückt aber im Endeffekt denk ich zusammen aus, dass Du einfach gegen die Bibliothek die Du einbinden willst nicht linkst (und der entsprechende Header-File nicht im Verzeichnis ist). Ich würd davon ausgehen dass das setup.py kaputt ist.
--- Heiko.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Das gibt es doch nicht. Ich werde noch hier verrückt.
Ich werde augenblicklich mit dem Ersteller in Kontakt treten und das nachfragen. Wenn nichts mehr geht werde ich wahrscheinlich ganz auf Python 2.2 umsteigen (Müsste dann alle Extensions für 2.2 downloaden und installieren. Fraglich ob alle auch in 2.2 vorhanden sind :? ).
Danke für die Hilfe. Werde mich melden, falls ich was neues in Erfahrung gebracht habe.

Gruss,
Toni
lula
User
Beiträge: 3
Registriert: Samstag 8. April 2006, 13:15
Wohnort: Leipzig

Hallo Toni83,

ich greife auf die Datei nidaq32.dll über ctypes zu.
Damit kann man problemlos die Karten von NI ansteuern.

Tschüß Lutz

PS. hier noch ein paar Programmzeilen, vielleicht hilft es Dir

Code: Alles auswählen

from ctypes import *

pydll=windll.nidaq32            # DLL geladen
AI_Read=pydll.AI_Read           # Funktion aus dll geladen
AO_Write=pydll.AO_Write
dig_out=pydll.DIG_Out_Line      # Funktion aus dll geladen
port_config=pydll.DIG_Prt_Config
dig_input=pydll.DIG_In_Line

# Analogwert einlesen
kanal=0
deviceNumber=c_int(1)       # i16 assigned by MAX 
chan=c_int(kanal)
gain=c_int(-1)
h_ret=c_int(999)
status=AI_Read(deviceNumber,chan,gain,byref(h_ret))

# dig Input
deviceNumber=c_int(1)       # i16 assigned by MAX 
port=c_int(0)
mode=c_int(0)
dir_=c_int(0)
line=c_int(1)
status=port_config(deviceNumber, port, line, dir_)
status =dig_input (deviceNumber, port, line,byref(h_ret))
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Hört sich ja ganz gut an, das ganze mit ctypes zu lösen. Habe aber ein Problem mit windll:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Toni Adam Krol\Desktop\ctypes.py", line 1
, in ?
from ctypes import *
File "C:\Dokumente und Einstellungen\Toni Adam Krol\Desktop\ctypes.py", line 4
, in ?
pydll=windll.nidaq32 # DLL geladen
NameError: name 'windll' is not defined
Drücken Sie eine beliebige Taste . . .

Was ist der Grund dafür? Gibt es für win32dll etwa auch eine Python-Extension oder liegt das an einer Einstellung?

Gruss,
Toni
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Das liegt am Dateinamen. ;-) Du hast die Datei ctypes genannt, und damit importiert sie sich selbst... Was natürlich nicht klappen kann. Benenn die Datei irgendwie anders, und er wird das ctypes importieren was Du haben willst.
--- Heiko.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Vielen Dank für den Hinweis!!! Natürlich oberbehämmert von mir... :?
Vielleicht noch eine Frage für heute:
Ich kriege morgen das Gerät von National Instruments und möchte heute schon das Programm dafür schreiben.
Ist diese Meldung:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Toni Adam Krol\Eigene Dateien\versuch.py"
, line 3, in ?
pydll=windll.nidaq32 # DLL geladen
File "D:\Python23\Lib\site-packages\ctypes\_loader.py", line 200, in __getattr
__
dll = self.load_version(name)
File "D:\Python23\Lib\site-packages\ctypes\_loader.py", line 170, in load_vers
ion
return self._plat_load_version(name, version, mode)
File "D:\Python23\Lib\site-packages\ctypes\_loader.py", line 121, in _plat_loa
d_version
return self.load(name, mode)
File "D:\Python23\Lib\site-packages\ctypes\_loader.py", line 112, in load
return self._load(libname, mode)
File "D:\Python23\Lib\site-packages\ctypes\_loader.py", line 124, in _load
return self._dlltype(libname, mode)
File "D:\Python23\Lib\site-packages\ctypes\__init__.py", line 300, in __init__

self._handle = _dlopen(self._name, mode)
WindowsError: [Errno 126] Das angegebene Modul wurde nicht gefunden
Drücken Sie eine beliebige Taste . . .

richtig, falls das Gerät an das USB Interface nicht angehängt wurde? Eigentlich steht es ja da, aber ich hege immer noch etwas misstrauen...

Ich bedanke mich schon mal bei allen die mir bis dahin geholfen haben.

Gruss,
Toni
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Klingt eher als würde die Datei nidaq32.dll nicht gefunden. Versuch mal, sie in %WINDIR%\system32 zu kopieren und dann zu importieren, was dann passiert.

Wie ich darauf komme? So:

Code: Alles auswählen

>>> import ctypes
>>> ctypes.windll.kernel32
<WinDLL 'kernel32', handle 7c800000 at 9ef468>
>>> ctypes.windll.nosuchdll
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "C:\Programme\Python\Lib\site-packages\ctypes\__init__.py", line 346, in __getattr__
    dll = self._dlltype(name)
  File "C:\Programme\Python\Lib\site-packages\ctypes\__init__.py", line 383, in __init__
    self._handle = _LoadLibrary(self._name)
WindowsError: [Errno 126] Das angegebene Modul wurde nicht gefunden
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Nun ja habe jetzt noch erfahren, dass die nidaq32.dll die ich erhalten habe eigentlich die nidex32.dll ist, nur umbenannt wurde. Außerdem war Sie nicht im Python Ordner und auch nicht im system32, weshalb es schon gar nicht hätte funktionieren können. Ich habe allerdings erst morgen die CD mit den dll´s zur Hand, weshalb ich mich morgen noch mal melden werde ob es geklappt hat.
Danke für die Hilfe!

Gruss,
Toni
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Servus,

habe endlich die CD und die Steuerung gekriegt. Habe jetzt feststellen müssen, dass das Gerät einen anderen Treiber braucht. Es wurde nicht der NI-DAQ sondern der NI-DAQmx Treiber mitgeliefert. Ich habe jetzt auch noch von NI erfahren müssen, dass der mx Treiber eine andere dll enthält als der traditionelle (statt nidaq32.dll enthält es nicaiu.dll). Nicht nur das, auch die vom User lula in seinem Beitrag beschriebenen Funktionsaufrufe sind jetzt bei der anderen dll andere.
Ich habe mir mal erlaubt die Source von lula etwas zu modifizieren:

Code: Alles auswählen

from ctypes import * 

pydll=windll.nicaiu            		# DLL geladen 
AI_Read=pydll.DAQmxReadBinaryI16       	# Funktion aus dll geladen 
AO_Write=pydll.DAQmxWriteBinaryI16 


# Analogwert einlesen 
kanal=0 
deviceNumber=c_int(1)       		# i16 assigned by MAX 
chan=c_int(kanal) 
gain=c_int(-1) 
h_ret=c_int(999) 
status=AI_Read(deviceNumber,chan,gain,byref(h_ret)) 

# dig Input 
deviceNumber=c_int(1)       		# i16 assigned by MAX 
port=c_int(0) 
mode=c_int(0) 
dir_=c_int(0) 
line=c_int(1) 
status=port_config(deviceNumber, port, line, dir_) 
status =dig_input (deviceNumber, port, line,byref(h_ret)) 
Ich weiss aber nicht ob dies stimmt. Falls sich hier einer mit der nicaiu.dll auskennt, wäre ich außerordentlich dankbar, wenn er sich hier dazu äußern könnte.

Gruss,
Toni

Edit (Leonidas): Code in Python-Tags gesetzt.
lula
User
Beiträge: 3
Registriert: Samstag 8. April 2006, 13:15
Wohnort: Leipzig

Hallo Toni83,

Ich habe bisher nur mit dem traditionellen NI-DAC gearbeitet, kenne mich also in der nicaiu.dll nicht aus.
NI liefert meist Beispiele in VB oder C/C++ mit. Vielleicht kannst Du dort die Aufrufkonventionen ableiten.

Tschüß Lutz
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Ich glaube ich muss da selber durch...
Danke für die Antwort lula!
Werde mal schauen ob ich etwas in Erfahrung bringe. Werde dann auf jeden Fall wenn ich Erfolg habe, den Source hier für die Nachwelt ins Forum stellen.
Danke erstmal allen für die Hilfe.

Gruss,
Toni
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Habe da nocmal ein Problem. Habe jetzt möglichen Source gefunden:

static TaskHandle ghProcessTask=0;

// Analog Out (static) ------------------------------------------------------
DAQmxCreateTask("", &ghProcessTask);
DAQmxCreateAOVoltageChan(ghProcessTask, ProcessChannel, "", -amplitude, amplitude, DAQmx_Val_Volts, NULL);
DAQmxCfgOutputBuffer (ghProcessTask, 0);

DAQmxStartTask(ghProcessTask);
while(gRunning){
DAQmxWriteAnalogScalarF64 (ghProcessTask, 0, 10.0, data[++i%bufferSize], 0);
Delay(0.05);
}
DAQmxCleanTask(ghProcessTask);

Problem: &ghProcessTask und static TaskHandle ghProcessTask=0;
Wie löse ich das in Python? Gibt es da eine Möglichkeit mit ctypes?

Gruss,
Toni
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Habe inzwischen eine Lösung gefunden. Problem dabei:
Der Code ist in C geschrieben, da ich für den neuen Treiber NIDAQmx keine Möglichkeit sehe diesen in Python zu schreiben.
Nun weiss ich leider nicht wie ich meinen C-Code bzw. mein angelegtes Projekt (enthält 2 Programme) in Python einbinde. Im Prinzip will ich nur einen Wert aus dem C-Code in Python zurückgeben. Wie ich allerdings den Code von Python aufrufe weiss ich leider nicht und benötige da eure Hilfe...

Gruss,
Toni

P.S.: Wer gleiche oder ähnliche Probleme hat, hier der Code: (Ich hoffe es bringt euch weiter :D)

USB 6009 (Auslesen eines Spannungswerts):

Code: Alles auswählen

#include <stdio.h>
#include <NIDAQmx.h>

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

int main(void)
{
	int32       error=0;
	TaskHandle  taskHandle=0;
	int32       read;
	float64     data[1000];
	char        errBuff[2048]={'\0'};

	/*********************************************/
	// DAQmx Configure Code
	/*********************************************/

	DAQmxErrChk (DAQmxCreateTask("",&taskHandle));

	DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
	DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));

	/*********************************************/
	// DAQmx Start Code
	/*********************************************/
	DAQmxErrChk (DAQmxStartTask(taskHandle));

	/*********************************************/
	// DAQmx Read Code
	/*********************************************/

	DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));

	/*********************************************/
	// Read Voltage Input
	/*********************************************/

	printf("Acquired %f points\n",data[0]);
	
		

Error:
	if( DAQmxFailed(error) )
		DAQmxGetExtendedErrorInfo(errBuff,2048);
	if( taskHandle!=0 )  {
		/*********************************************/
		// DAQmx Stop Code
		/*********************************************/
		DAQmxStopTask(taskHandle);
		DAQmxClearTask(taskHandle);
	}
	if( DAQmxFailed(error) )
		printf("DAQmx Error: %s\n",errBuff);
	printf("End of program, press Enter key to quit\n");
	getchar();
	return 0;
}
Und NIDAQmx.c für das dll Handling. (Falls jemand dies benötigt dem kann ich das schicken, da der Code dazu zu lang wäre um in an dieser Stelle zu senden.)
Antworten