Найти - Пользователи
Полная версия: Не удаётся подключиться к COM объекту
Начало » Python для новичков » Не удаётся подключиться к COM объекту
1 2 3
andman
Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало!!!
ZerG
Возможно таки помогла регистрация других ДЛЛ - тут уже точно никто не скажет!
doza_and
andman
Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало!!!

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

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, как это сделать?
ZerG
по логике
“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)

Но могу и ошибаться…. у вас там все загадочно…
andman
на команду print(path + “\\” + bname + “.scl”)

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


Проблема не в пути, а в указании s7source
ZerG
А если
 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)
andman
Программа:
         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
Что значит строка интерпритатора File “<COMObject <unknown>>”, line 3, in Add ?
Line 3 что означает? Ошибка третьего аргумента?
ZerG
Учитывая сложность и запустанность вашего случая я бы попробовал сначала написать код банально и пошагово в максимальной похожести на оригинал
После каждой строки вывести 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) и так далее
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB