Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2016 12:26:28

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

Пишу программу на Python,

Windows 7 Профессиональная 64bit

     import win32com.client
    xl = win32com.client.Dispatch("Simatic.Simatic")

Запускаю, после чего, он на меня так ругается:

     PythonWin 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32.
    Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
    >>> C:\Users\and\AppData\Local\Programs\Python\Python35\lib\re.py:203: FutureWarning: split() requires a non-empty pattern match.
      return _compile(pattern, flags).split(string, maxsplit)
    Traceback (most recent call last):
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\lib\site-packages\win32com\client\dynamic.py", line 89, in _GetGoodDispatch
        IDispatch = pythoncom.connect(IDispatch)
    pywintypes.com_error: (-2147221021, 'Операция недоступна', None, None)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 323, in RunScript
        debugger.run(codeObject, __main__.__dict__, start_stepping=0)
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\Lib\site-packages\pythonwin\pywin\debugger\__init__.py", line 60, in run
        _GetCurrentDebugger().run(cmd, globals,locals, start_stepping)
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\Lib\site-packages\pythonwin\pywin\debugger\debugger.py", line 654, in run
        exec(cmd, globals, locals)
      File "C:\Users\and\Desktop\Test.py", line 1, in <module>
        import win32com.client
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
        dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
        return (_GetGoodDispatch(IDispatch, clsctx), userName)
      File "C:\Users\and\AppData\Local\Programs\Python\Python35\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
        IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
    pywintypes.com_error: (-2147221164, 'Класс не зарегистрирован', None, None)
    >>>

Регистрировал компонент так:

     Microsoft Windows [Version 6.1.7601]
    (c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
    
    C:\Windows\system32>regsvr32.exe "c:\Program Files (x86)\Siemens\Step7\S7BIN\S7A
    BATCX.DLL"
    
    C:\Windows\system32>

Регистрация прошла успешно




Почему он не зарегистрирован?
VBA excel без проблем к нему коннектится

Офлайн

#2 Сен. 23, 2016 07:47:23

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

Подскажите хотя бы, что значит для питоновской библиотеки win32com, что класс не зарегистрирован?
Где должна в реестре быть запись о классе, что бы он так сказать прошёл регистрацию?

Отредактировано andman (Сен. 23, 2016 07:48:37)

Офлайн

#3 Сен. 23, 2016 08:00:13

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

А у меня встречный вопрос. Интересно важно какая у вас архитектура? Питон у вас x64 а batchx.dll вроде как 32. Я помнится давным давно когда через opc общался с различными штуками из питона, боролся с этим. Может в этом дело? Не спец по com так что не судите строго.

p.s.
Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты :)



Отредактировано doza_and (Сен. 23, 2016 08:03:20)

Офлайн

#4 Сен. 23, 2016 08:11:39

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

doza_and
А у меня встречный вопрос. Интересно важно какая у вас архитектура? Питон у вас x64 а batchx.dll вроде как 32. Я помнится давным давно когда через opc общался с различными штуками из питона, боролся с этим. Может в этом дело? Не спец по com так что не судите строго.p.s. Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты

Не совсем понял, на счёт архитектуры, то что я указал win7 64 bit, это не то?
Кстати пробовал я и питон 32 бит - всё тоже самое.

А на счёт СОМ, у меня выбора особо то и нет. У меня есть среда разработки STEP7(на которой мне нужно создать конечный програмный продукт), которая умеет общаться только через СОМ.

Отредактировано andman (Сен. 23, 2016 08:13:15)

Офлайн

#5 Сен. 23, 2016 08:23:11

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2580
Репутация: +  58  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

p.s.
Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты

Зато до чертиков универсальный и разжеванный и довольно много девайсов работает по нему- потому я не был бы так категоричен.

2ТС

Весьма не просто разобраться в вашей проблеме не имея нужных данных
Однако, сколько я уже топиков перечитал в своей жизни на разных ресурсах - везде где есть слово win32….. пожизненный рак.

Давайте начнем с того что вы для своего проекта попробуете использовать что либо более адекватное
например
https://github.com/pyserial/pyserial
https://pythonhosted.org/pyserial/shortintro.html#opening-serial-ports

И не пишите сразу весь код - для начала сделайте простой запрос ответ - убедитесь что есть связь! А вот дальше уже можно думать



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Сен. 23, 2016 08:46:18

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

ZerG
Давайте начнем с того что вы для своего проекта попробуете использовать что либо более адекватное
например
https://github.com/pyserial/pyserial
https://pythonhosted.org/pyserial/shortintro.html#opening-serial-ports

Вы наверное меня неправильно поняли.
COM - Component Object Model, а не последовательные порт
Опишу суть того, что я делаю, и что мне надо.

Я занимаюсь программированием промышленных контроллеров, в частности Siemens S7-300/400.
Среда разработки для этих контроллеров является STEP7 (https://ru.wikipedia.org/wiki/Simatic_Step_7)
Каждый раз писать программу для контроллера вручную - просто лень, так как структура программы практически одна и таже. На текущий момент, я делаю так: структурирую нужным мне образом данные тех-задания в excel таблицу, далее эту таблицу обрабатываю с помощью VBA, генерю тем самым исходники для step7, с помощью СОМ вставляю их прямо в среду разработки STEP7, так же с помощью СОМ компилю их и - профит!

Но сами понимаете, VBA по сравнению с python, это как сравнивать запорожец с мерседесом.
Устал я от VBA, вот и хочу переписать свой “автоген”, как я его называю, на python`e

Исходники конечно можно вставлять и вручную(копипаст), но их бывает достаточно много и делать приходится это довольно часто, получится это довольно геморно, поэтому нужно делать это автоматически.

Пока не победил я этом камень преткновения: почему VBA без проблем работает с СОМ объектом Simatic.Simatic, а python испытывает проблему незарегистрированного класса.

Отредактировано andman (Сен. 23, 2016 09:05:27)

Офлайн

#7 Сен. 23, 2016 09:03:11

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2580
Репутация: +  58  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

Да тут вы правы! Я не понял при чем тут реализация задачи общения по ком порту на питоне и автоматизация с екселем. Кроме того никто не запрещает вам использовать вин32 для других задач!
На данный момент я предложил попробовать просто связаться с вашим устройством посредством pyserial
что бы локализовать вашу проблему



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Сен. 23, 2016 09:10:20

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

ZerG
Да тут вы правы! Я не понял при чем тут реализация задачи общения по ком порту на питоне и автоматизация с екселем. Кроме того никто не запрещает вам использовать вин32 для других задач! На данный момент я предложил попробовать просто связаться с вашим устройством посредством pyserial что бы локализовать вашу проблему

Дак у меня нет никакого устройства, есть СОМ-объект, до которого я не могу достучаться на python.

Pyserial работает с последовательным портом и выполняет совсем другие задачи, или я не прав?

Офлайн

#9 Сен. 23, 2016 09:12:15

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2580
Репутация: +  58  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

Вот теперь наконец-то понял!!!!
Сдедайте скрины на ком обьект с его названиями и свойствами



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#10 Сен. 23, 2016 09:18:37

andman
Зарегистрирован: 2016-09-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся подключиться к COM объекту

ZerG
Вот теперь наконец-то понял!!!! Сдедайте скрины на ком обьект с его названиями и свойствами


В самом начале темы в первом сообщении 2 скрина моего COM-объекта Simatic, или надо какие то другие скрины?

Отредактировано andman (Сен. 23, 2016 09:19:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version