Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 23, 2016 12:48:57

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

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

Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало!!!

Офлайн

#2 Сен. 23, 2016 13:23:13

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

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

Возможно таки помогла регистрация других ДЛЛ - тут уже точно никто не скажет!



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

Офлайн

#3 Сен. 23, 2016 21:12:58

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

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

andman
Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало!!!

Насколько я помню наш продукт GIW позволяет как программировать step контроллеры так и имитировать их работу на на персоналках. Сам этим не занимаюсь, но если интересно могу спросить.



Офлайн

#4 Окт. 6, 2016 10:39:19

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

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

Помогите со следующей проблемкой:

VBA скрипт работает так:

    Dim s As New Simatic
    Dim Pro As S7Project
    Dim Prg As S7Program
    Dim Src As S7Source
    Set Pro = s.Projects(ProjectName)
    Set Prg = Pro.Programs(ProgramName)
    Set Src = Prg.Next("Sources").Next.Add("Signal", S7Source, ActiveWorkbook.Path + "\signal.scl")

После чего в среду разработки вставляется исходник signal.scl

Пробую аналог на python:
        simatic = win32com.client.Dispatch("Simatic.Simatic")
        Pro = simatic.Projects(cfg.nick("ProjectName").value)
        Prg = Pro.Programs(cfg.nick("ProgramName").value)
        Src = Prg.Next("Sources").Next.Add(bname, win32com.client.Dispatch("Simatic.S7Source"), path + "\\" + bname + ".scl")

Получаю ошибку:

 Traceback (most recent call last):
  File "Main.py", line 251, in <module>
    step7()
  File "Main.py", line 249, in step7
    signal()
  File "Main.py", line 242, in signal
    Src = Prg.Next("Sources").Next.Add(bname, win32com.client.Dispatch("Simatic.
S7Source"), path + "\\" + bname + ".scl")
  File "<COMObject <unknown>>", line 3, in Add
  File "C:\Users\and\AppData\Local\Programs\Python\Python35-32\lib\site-packages
\win32com\client\dynamic.py", line 228, in __int__
    return int(self.__call__())
  File "C:\Users\and\AppData\Local\Programs\Python\Python35-32\lib\site-packages
\win32com\client\dynamic.py", line 197, in __call__
    return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.
defaultDispatchName,None)
pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467
259), None)
Для продолжения нажмите любую клавишу . . .

Собственно у меня такие вопросы:

В строке simatic = win32com.client.Dispatch(“Simatic.Simatic”), simatic это уже объект класса Simatic или сам класс?
По ощущения вроде как объект.

Но в строке, на которую ругается нужно указать сам класс, а не объект класса S7source, как это сделать?

Отредактировано andman (Окт. 6, 2016 10:51:40)

Офлайн

#5 Окт. 6, 2016 11:09:23

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

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

по логике
“ActiveWorkbook.Path + ”\signal.scl“” = равно пути где лежит файл.
Другими словами на выходе что-то типа
c:\programma\signal.scl
думаю у вас должно получиться что-то типа

 Src = Prg.Next("Sources").Next.Add(bname, win32com.client.Dispatch("Simatic.S7Source"), "путь к файлу.scl")
то есть
 path = os.path.join(os.getcwd(), bname + '.scl')
print(path)
Src = Prg.Next("Sources").Next.Add(bname, win32com.client.Dispatch("Simatic.S7Source"), path)

Но могу и ошибаться…. у вас там все загадочно…



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

Офлайн

#6 Окт. 6, 2016 11:16:16

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

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

на команду print(path + “\\” + bname + “.scl”)

получаю C:\Users\and\PycharmProjects\Tuhard\signal.scl
что соответствует нужному файлу


Проблема не в пути, а в указании s7source

Офлайн

#7 Окт. 6, 2016 11:23:19

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

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

А если

 path = os.path.join(os.getcwd(), bname + '.scl')
print(path)
source = win32com.client.Dispatch("Simatic.S7Source")
Src = Prg.Next("Sources").Next.Add(bname, source, path)



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

Отредактировано ZerG (Окт. 6, 2016 11:26:03)

Офлайн

#8 Окт. 6, 2016 11:34:15

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

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

Программа:

         bname = "signal"
        simatic = win32com.client.Dispatch("Simatic.Simatic")
        Pro = simatic.Projects(cfg.nick("ProjectName").value)
        Prg = Pro.Programs(cfg.nick("ProgramName").value)
        #print(path + "\\" + bname + ".scl")
        #Prg.Next("Sources").Next.Add(bname, win32com.client.Dispatch("Simatic.S7Source"), path + "\\" + bname + ".scl")
        path = os.path.join(os.getcwd(), bname + '.scl')
        print(path)
        src = win32com.client.Dispatch("Simatic.S7Source")
        Src = Prg.Next("Sources").Next.Add(bname, src, path)

Ошибка:
 C:\Users\and\PycharmProjects\Tuhard\signal.scl
Traceback (most recent call last):
  File "Main.py", line 256, in <module>
    step7()
  File "Main.py", line 254, in step7
    signal()
  File "Main.py", line 248, in signal
    Src = Prg.Next("Sources").Next.Add(bname, src, path)
  File "<COMObject <unknown>>", line 3, in Add
  File "C:\Users\and\AppData\Local\Programs\Python\Python35-32\lib\site-packages
\win32com\client\dynamic.py", line 228, in __int__
    return int(self.__call__())
  File "C:\Users\and\AppData\Local\Programs\Python\Python35-32\lib\site-packages
\win32com\client\dynamic.py", line 197, in __call__
    return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.
defaultDispatchName,None)
pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467
259), None)
Для продолжения нажмите любую клавишу . . .

Отредактировано andman (Окт. 6, 2016 11:40:40)

Офлайн

#9 Окт. 6, 2016 11:43:30

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

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

Что значит строка интерпритатора File “<COMObject <unknown>>”, line 3, in Add ?
Line 3 что означает? Ошибка третьего аргумента?

Офлайн

#10 Окт. 6, 2016 11:52:39

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

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

Учитывая сложность и запустанность вашего случая я бы попробовал сначала написать код банально и пошагово в максимальной похожести на оригинал
После каждой строки вывести print('…') что бы лутче понимать все ли удачно проходит
И смотреть все ли методы отработали - так будет проще выявить “узкое место”
Попробуйте что нить в стиле

 s = win32com.client.Dispatch("Simatic.Simatic")
_Pro = win32com.client.Dispatch("Simatic.S7Project")
_Prg = win32com.client.Dispatch("Simatic.S7Program")
_Src = win32com.client.Dispatch("Simatic.S7Source")
path = os.path.join(os.getcwd(), bname + '.scl')
Pro = s.Projects(cfg.nick("ProjectName").value)
Prg = _Pro.Programs(cfg.nick("ProgramName").value)
Src = Prg.Next("Sources").Next.Add(bname, _Src, path)
Может вы банально гдето не тот тип переменной засылаете?
например bname у вас b'Ololoo' а нужно str(bname) и так далее



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version