|
- Участник
- Здесь с 15.07.2017
- Сообщений: 5
|
Подключение E14-140M к программе на Python
Прошу помощи при подключении модуля E14-140M к программе на Python под Windows либо через lcomp.dll, либо через lusbapi.dll. Сейчас проблема в том, что не удается правильно описать интерфейс IDaqLDevice в программе на Python. Работающий пример, который бы открывал плату и к примеру, читал бы ее серийный номер, был бы абсолютно достаточным.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Подключение E14-140M к программе на Python
можно посмотреть на wlcomp.dll и пример к нему. это будут просто С функции. без плюсов. должно быть полегче.
|
|
- Участник
- Здесь с 15.07.2017
- Сообщений: 5
|
Re: Подключение E14-140M к программе на Python
Спасибо, посмотрел wlcomp.dll, но при попытке ее использовать на 64-битной ОС появляется ошибка: ---------------------------------------------------------------------------
WindowsError Traceback (most recent call last)
<ipython-input-3-3b8c505be86b> in <module>()
1 from ctypes import *
2
----> 3 wl = cdll.wlcomp
4
5 hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp.dll')))
c:\Progs\anaconda2\lib\ctypes\__init__.pyc in __getattr__(self, name)
434 if name[0] == '_':
435 raise AttributeError(name)
--> 436 dll = self._dlltype(name)
437 setattr(self, name, dll)
438 return dll
c:\Progs\anaconda2\lib\ctypes\__init__.pyc in __init__(self, name, mode, handle, use_errno, use_last_error)
364
365 if handle is None:
--> 366 self._handle = _dlopen(self._name, mode)
367 else:
368 self._handle = handle
WindowsError: [Error 193] %1 не является приложением Win32
Код, вызвавший ошибку: from ctypes import *
wl = cdll.wlcomp
hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp.dll')))
hErr = pointer(c_ulong())
print 'hDll', hDll
hIfc = pointer(c_ulong(wl.CallCreateInstance(hDll, 0, hErr)))
print 'hIfc', hIfc
print 'hErr', hErr
print wl.OpenLDevice(hIfc)
Не могли бы вы выложить для скачивания 64-битную версию wlcomp.dll ?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Подключение E14-140M к программе на Python
|
|
- Участник
- Здесь с 15.07.2017
- Сообщений: 5
|
Re: Подключение E14-140M к программе на Python
Благодарю! Файл получил! Теперь библиотека wlcomp64 открывается. И работает, но только на Windows XP 64-bit и только с драйвером 6.0.2.5 от 20.12.2011. Версии драйвера для E14-140 выше 6.0.2.5 не устанавливаются на Windows XP 64-bit (проверял версии 7.0.0.5 от 20.12.2017 и 7.0.0.4 от 04.06.2015). При попытке запуска на Windows 7 64-bit происходит следующее: Вызов LoadAPIDLL проходит без ошибок и я получаю указатель hDll. При вызове CallCreateInstance возвращается код ошибки 2 вместо 0 и нулевой указатель hIfc. Под Windows XP 64-bit на этом этапе код ошибки 0 и годный указатель hIfc. Код, который запускался на обеих системах: from ctypes import cdll, pointer, c_ulong
wl = cdll.wlcomp64
hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp64.dll')))
hErr = pointer(c_ulong())
print 'hDll', hDll.contents.value
hIfc = pointer(c_ulong(wl.CallCreateInstance(hDll, 0, hErr)))
print 'hIfc', hIfc.contents.value
print 'hErr', hErr.contents.value
Результат запуска на Windows 7 64-bit: hDll 4200464384
hIfc 0
hErr 2
Результат запуска на Windows XP 64-bit: hDll 187891712
hIfc 188361808
hErr 0
При этом на семерке работает штатная программа LGRAPH без проблем, с любой версией драйвера. Целевая платформа, для которой разрабатывается программа - Windows 7 64-bit, установить туда XP не представляется возможным. Прошу Вашей подсказки, что же нужно сделать, чтобы использовать E14-140 через wlcomp64 под Windows 7 64-bit.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Подключение E14-140M к программе на Python
письмом ответил. wlcomp.h там другой чуток.
|
|
- Участник
- Здесь с 15.07.2017
- Сообщений: 5
|
Re: Подключение E14-140M к программе на Python
Спасибо, получил письмо с примером! Скомпилированный пример действительно работает как надо в 64-битном режиме на Windows 7. wlcomp.h для 64 бит отличается в том, что для hDll используется тип данных c_ulonglong вместо c_ulong в 32-битной версии. Изменение типа данных однако не изменило картины для программы на питоне. Все так же, на семерке не работает, в XP работает. В итоге поставил 32-битный питон, который заработал с 32-битной wlcomp.dll под 64-битной ОС. Благодарю за помощь.
|
|
- Участник
- Здесь с 19.08.2018
- Сообщений: 1
|
Re: Подключение E14-140M к программе на Python
Здравствуйте! Пытаюсь начать работать с е14-140м с помощью питона также в win7 х64. Поставил драйвер lcomp_old.dll, свежая версия почему-то становилась криво. Сейчас вроде стоит нормально, L-Graph работает. Запускаю приведенный выше код в питоне 3.7 х32 с 32-битным файлом wlcomp.dll в каталоге. Получаю значение указателя hDll = 0. Подскажите, пожалуйста, в чем может быть ошибка? Если можно, пришлите упомянутый выше файл с примером. Сергей 84 пишет:Скомпилированный пример действительно работает как надо в 64-битном режиме на Windows 7. wlcomp.h для 64 бит отличается в том, что для hDll используется тип данных c_ulonglong вместо c_ulong в 32-битной версии. Изменение типа данных однако не изменило картины для программы на питоне. Все так же, на семерке не работает, в XP работает. В итоге поставил 32-битный питон, который заработал с 32-битной wlcomp.dll под 64-битной ОС. Благодарю за помощь.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Подключение E14-140M к программе на Python
|
|
|
Re: Подключение E14-140M к программе на Python
Здравствуйте! Пытаюсь подключить библиотеку wlcomp.dll через Python следующим образом: import ctypes as ct import os libname = os.path.abspath(os.path.join(os.path.dirname(__file__), "wlcomp.dll")) wl = ct.CDLL(libname) В итоге получаю ошибку: OSError: [WinError 193] %1 не является приложением Win32 Система, под которой работаю: Windows 10. Модуль, с которым пытаюсь работать: E14-440. Пожалуйста, подскажите, как решить проблему.
|
|
|
Re: Подключение E14-140M к программе на Python
Внимательно ознакомился с ответами выше и удалось решить проблему. Однако, теперь столкнулся с проблемой, которая выше также обозначается, а именно: при выполнении кода pythona: from ctypes import *
wl = cdll.wlcomp
hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp.dll')))
hErr = pointer(c_ulong())
hIfc = pointer(c_ulong(wl.CallCreateInstance(hDll, 0, hErr)))
print('hDll', hDll.contents.value)
print('hIfc', hIfc.contents.value)
print('hErr', hErr.contents.value)
Получаю: Пожалуйста, подскажите, как это устранить. Заранее спасибо! Dmitry пишет:Здравствуйте! Пытаюсь подключить библиотеку wlcomp.dll через Python следующим образом: import ctypes as ct import os libname = os.path.abspath(os.path.join(os.path.dirname(__file__), "wlcomp.dll")) wl = ct.CDLL(libname) В итоге получаю ошибку: OSError: [WinError 193] %1 не является приложением Win32 Система, под которой работаю: Windows 10. Модуль, с которым пытаюсь работать: E14-440. Пожалуйста, подскажите, как решить проблему.
|
|
|
Re: Подключение E14-140M к программе на Python
Добрый день, подскажите пожалуйста есть ли версия wlcomp под linux (debian)? пытаемся подключиться к е14-140 посредством python и библиотеки lcomp.so из http://download.opensuse.org/repositori … Debian_10/, открытие библиотеки и createinstance проходят, а openldevice нет, видимо в lcomp.so просто не оформлена/отсутствует такая функция. Или, если возможно, приведите пример открытия устройства на python с помощью lcomp.so
|
|
- Участник
- Здесь с 21.05.2021
- Сообщений: 7
|
Re: Подключение E14-140M к программе на Python
Запишусь в очередь на манну небесную пример под Питон.
|
|
- Участник
- Здесь с 20.10.2020
- Сообщений: 39
|
Re: Подключение E14-140M к программе на Python
это тоже теоретически можно. но если wlcomp собрать в принципе не очень сложно и есть его исходники в виндовой версии. то питон мне придется как-то выучить немного... так что сроки этого даже по тикету будут приличные...
|
|
|
Re: Подключение E14-140M к программе на Python
Добрый день. Тоже, прямо очень необходимо получить разъяснения и примеры. Заранее признателен.
|
|
|
Re: Подключение E14-140M к программе на Python
Dmitry пишет:Внимательно ознакомился с ответами выше и удалось решить проблему. Однако, теперь столкнулся с проблемой, которая выше также обозначается, а именно: при выполнении кода pythona: from ctypes import *
wl = cdll.wlcomp
hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp.dll')))
hErr = pointer(c_ulong())
hIfc = pointer(c_ulong(wl.CallCreateInstance(hDll, 0, hErr)))
print('hDll', hDll.contents.value)
print('hIfc', hIfc.contents.value)
print('hErr', hErr.contents.value)
Получаю: Пожалуйста, подскажите, как это устранить. Заранее спасибо! Dmitry пишет:Здравствуйте! Пытаюсь подключить библиотеку wlcomp.dll через Python следующим образом: import ctypes as ct import os libname = os.path.abspath(os.path.join(os.path.dirname(__file__), "wlcomp.dll")) wl = ct.CDLL(libname) В итоге получаю ошибку: OSError: [WinError 193] %1 не является приложением Win32 Система, под которой работаю: Windows 10. Модуль, с которым пытаюсь работать: E14-440. Пожалуйста, подскажите, как решить проблему.
Получилось ли решить эту проблему? Тоже сижу голову ломаю
|
|
|
Re: Подключение E14-140M к программе на Python
|
|
|
Re: Подключение E14-140M к программе на Python
У вас получилось работать с этой библиотекой? У меня CreateInstance работает, hDll и hIfc определяются, а OpenLDevice не работает (Windows 10, x64) hDll 140734843846656
Err 0
hIfc 3071912784
Traceback (most recent call last):
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcard.py", line 13, in <module>
with LCOMP(slot=0) as ldev:
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcomp\lcomp.py", line 123, in __enter__
if self.OpenLDevice():
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcomp\lcomp.py", line 151, in OpenLDevice
_wlib.OpenLDevice(self._ifc)
OSError: exception: access violation reading 0x00000000B719AB50
|
|
|
Re: Подключение E14-140M к программе на Python
Андрей9834863 пишет:Dmitry пишет:Внимательно ознакомился с ответами выше и удалось решить проблему. Однако, теперь столкнулся с проблемой, которая выше также обозначается, а именно: при выполнении кода pythona: from ctypes import *
wl = cdll.wlcomp
hDll = pointer(c_ulong(wl.LoadAPIDLL('lcomp.dll')))
hErr = pointer(c_ulong())
hIfc = pointer(c_ulong(wl.CallCreateInstance(hDll, 0, hErr)))
print('hDll', hDll.contents.value)
print('hIfc', hIfc.contents.value)
print('hErr', hErr.contents.value)
Получаю: Пожалуйста, подскажите, как это устранить. Заранее спасибо! Dmitry пишет:Здравствуйте! Пытаюсь подключить библиотеку wlcomp.dll через Python следующим образом: import ctypes as ct import os libname = os.path.abspath(os.path.join(os.path.dirname(__file__), "wlcomp.dll")) wl = ct.CDLL(libname) В итоге получаю ошибку: OSError: [WinError 193] %1 не является приложением Win32 Система, под которой работаю: Windows 10. Модуль, с которым пытаюсь работать: E14-440. Пожалуйста, подскажите, как решить проблему.
Получилось ли решить эту проблему? Тоже сижу голову ломаю
Вам нужно поменять dll файлы на 64-битные скорее всего, все библиотеки по умолчанию есть тут: C:\Program Files (x86)\LCard\LIBRARY\BIN
|
|
|
Re: Подключение E14-140M к программе на Python
denisgriaznov пишет:У вас получилось работать с этой библиотекой? У меня CreateInstance работает, hDll и hIfc определяются, а OpenLDevice не работает (Windows 10, x64) hDll 140734843846656
Err 0
hIfc 3071912784
Traceback (most recent call last):
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcard.py", line 13, in <module>
with LCOMP(slot=0) as ldev:
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcomp\lcomp.py", line 123, in __enter__
if self.OpenLDevice():
File "C:\Users\Denis\Desktop\Laser Physics\Python UI\Optical Clock UI\lcomp\lcomp.py", line 151, in OpenLDevice
_wlib.OpenLDevice(self._ifc)
OSError: exception: access violation reading 0x00000000B719AB50
UPD: нашел проблему, в этой строчке для 64-битной версии нужно тоже менять тип c_uint на c_ulonglong: _ifc_type = lambda x: pointer(c_uint(x))
нужно заменить на _ifc_type = lambda x: pointer(c_ulonglong(x))
|
|
|
Re: Подключение E14-140M к программе на Python
Странно. У меня на Win7 64bit на python3.7 64bit вариант _ifc_type = lambda x: pointer(c_uint(x))
работает. Проверю и обновлю библиотеку
|
|
|
Re: Подключение E14-140M к программе на Python
Обновил. Спасибо за подсказку
|
|
- Участник
- Здесь с 04.10.2023
- Сообщений: 3
|
Re: Подключение E14-140M к программе на Python
Скиньте, пожалуйста рабочий код на Python 64-bit для E14-440.
|
|
|
Re: Подключение E14-140M к программе на Python
Добавил поддержку E440 в https://github.com/RAA80/python-lcomp, но правильную работу не гарантирую, т.к у меня нет модуля E440 для проверки
|
|
- Участник
- Здесь с 04.10.2023
- Сообщений: 3
|
Re: Подключение E14-140M к программе на Python
Теперь всё работает! Спасибо!
|