Перейти к публикации

Автоматизация с помощью API


Qzen

Рекомендованные сообщения

Вот тут сборка в которой значение размера изменяется через определенное время, анимацией это назвать язык не поворачивается.

Сделано в СВ2010 СП3.

Сопряжения в сборке уже созданы, но впринципе их можно и через API добавлять

Спасибо =) Файлы не открылись - версия моего SW старовата, но вот макрос поглазел. Надо бы подразобраться и выудить оттуда все полезности.Но в принципе, то ,что надо =)

А насчет назвать это анимацией... да это не анимация как таковая - это лишь процесс визуализации, но если нажать кнопочку "включить запись", затем запустить макрос, то в итоге получим видеофайл, где сборка примерно так движется, как надо =)

Изменено пользователем Qzen
Ссылка на сообщение
Поделиться на других сайтах


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

Если в сборке определены все сопряжения и есть траектория (полагаю, что эскиз), то зачем нужен API? То что предлагает анимация не подходит под ваши задачи? В Solidworks, кажется, до 2010 было Инструменты-Добавления-Solidworks Animation. В SW2010 закладка внизу окна с надписью Исследование движение
Ссылка на сообщение
Поделиться на других сайтах

Если в сборке определены все сопряжения и есть траектория (полагаю, что эскиз), то зачем нужен API? То что предлагает анимация не подходит под ваши задачи? В Solidworks, кажется, до 2010 было Инструменты-Добавления-Solidworks Animation. В SW2010 закладка внизу окна с надписью Исследование движение

Не задавайтесь этим вопросом =) Мне необходимо автоматизировать движение сборки. Вручную создавать движение - меня не устраивает. Объясню почему: у меня шестизвенный промышленный манипулятор. Отработка траектории на таком манипуляторе может решаться несколькими способами. А мне нужен самый энергетически оправданный. Для этого есть обратная задача кинематики, решенная в mathcad. Там можно построить матрицу значений положений каждого из звеньев для каждой точки траектории. Поэтому вручную сделать движение - не есть решение задачи :)
Ссылка на сообщение
Поделиться на других сайтах

Не задавайтесь этим вопросом =) Мне необходимо автоматизировать движение сборки. Вручную создавать движение - меня не устраивает. Объясню почему: у меня шестизвенный промышленный манипулятор. Отработка траектории на таком манипуляторе может решаться несколькими способами. А мне нужен самый энергетически оправданный. Для этого есть обратная задача кинематики, решенная в mathcad. Там можно построить матрицу значений положений каждого из звеньев для каждой точки траектории. Поэтому вручную сделать движение - не есть решение задачи :)

Ну матрицу "значений положений каждого из звеньев для каждой точки траектории" можно и в VB создать и записать - это же обычный массив переменных! Причем в VB этот массив может быть одноменым и N-мерным...

Дак зачем-то вручную создавать анимпцию?????

В SW2008-20010-м все это встроенно! Переключаешься в режим анипции(есть есть заклдака внизу, свлева), двигаещь "ключ", а затем двигаещь нужные компоненты сборки. Потом старт "вычисление" и анимация. Можно одноаременно записывать а AVI-файл. Все.

Правда перед всем этим нужно задать сопряжения между комеонентами сборки. Ну в большинстве случаев это просто необходимо. Api тут может потребоваться лишь а авто-наложением сопряжений. Но тут нужно знать уникальное имя компонента. Например его Идентификатор, луше всего его PID, т.е. его (или `Persistent Reference IDs`- это из справки по API SW - там куча пимеров) - что-то типа электронной подписи любого компонента. Его можго записывать или в файл или а реестр...

PS. может я чего-то и не понял - объясняйте (если не секрет) :-)

PPS. Вы вот не путайте три справки: по MCAD`у, SW и API SW...

Если все это делать не на VBA, а на VB, справка и возможности VB помощнее будут. А если еще и на С++, то вААще....

Ссылка на сообщение
Поделиться на других сайтах

Ну матрицу "значений положений каждого из звеньев для каждой точки траектории" можно и в VB создать и записать - это же обычный массив переменных! Причем в VB этот массив может быть одноменым и N-мерным...

Дак зачем-то вручную создавать анимпцию?????

В SW2008-20010-м все это встроенно! Переключаешься в режим анипции(есть есть заклдака внизу, свлева), двигаещь "ключ", а затем двигаещь нужные компоненты сборки. Потом старт "вычисление" и анимация. Можно одноаременно записывать а AVI-файл. Все.

Правда перед всем этим нужно задать сопряжения между комеонентами сборки. Ну в большинстве случаев это просто необходимо. Api тут может потребоваться лишь а авто-наложением сопряжений. Но тут нужно знать уникальное имя компонента. Например его Идентификатор, луше всего его PID, т.е. его (или `Persistent Reference IDs`- это из справки по API SW - там куча пимеров) - что-то типа электронной подписи любого компонента. Его можго записывать или в файл или а реестр...

PS. может я чего-то и не понял - объясняйте (если не секрет) :-)

PPS. Вы вот не путайте три справки: по MCAD`у, SW и API SW...

Если все это делать не на VBA, а на VB, справка и возможности VB помощнее будут. А если еще и на С++, то вААще....

1. Все и так будет делаться на VB6.0 =)

2. Создать матрицу значений в VB можно! Но изначально эта матрица получена в Mathcad'e. Если есть соображения, как её оттуда перенести в VB - в студию. Просто, насколько я смотрел, с помощью VB можно передать значение переменной в MC и вернуть результат. А вот массив нельзя, вроде как =(

3. Двигаешь ключ, двигаешь компоненты - это ж ручной труд! Или я что-то не понимаю? Мне нужно, чтобы все происходило автоматически. Пользователь жал кнопочку "Визуализировать модель" и она начинала перестраиваться в соответствии с матрицей, вытащенной из MC.

=====

Проблема состоит в том, что изначально даны MC и SW. Можно делать что угодно, лишь бы они автоматически связывались друг с другом и по данным, полученным из одной системы другая автоматически производила изменения чертежа.

Ссылка на сообщение
Поделиться на других сайтах

Объясните чайнику ,почему в SW такой код работает:

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

boolstatus = Part.ShowConfiguration2("2")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("3")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("4")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("5")

Part.EditRebuild3

Part.GraphicsRedraw2

End Sub

А вот такой не хочет:

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

For i = 2 To 5

conf = Str(i)

boolstatus = Part.ShowConfiguration2(conf)

Part.EditRebuild3

Part.GraphicsRedraw2

Next i

End Sub

Они же полностью равнозначны?

Изменено пользователем Qzen
Ссылка на сообщение
Поделиться на других сайтах

Объясните чайнику ,почему в SW такой код работает:

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

boolstatus = Part.ShowConfiguration2("2")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("3")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("4")

Part.EditRebuild3

Part.GraphicsRedraw2

boolstatus = Part.ShowConfiguration2("5")

Part.EditRebuild3

Part.GraphicsRedraw2

End Sub

А вот такой не хочет:

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

For i = 2 To 5

conf = Str(i)

boolstatus = Part.ShowConfiguration2(conf)

Part.EditRebuild3

Part.GraphicsRedraw2

Next i

End Sub

Они же полностью равнозначны?

попробуйте задать правильную размерность переменной

Sub main()

Dim conf As String

...
Ссылка на сообщение
Поделиться на других сайтах

попробуйте задать правильную размерность переменной

Sub main()

Dim conf As String

...

Так и сделано - положительного результата нет.

Ссылка на сообщение
Поделиться на других сайтах

Так и сделано - положительного результата нет.

Попробуйте вместо conf = Str(i) написать conf = СStr(i)

У меня такой вариант работает

Option Explicit

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim bres As Boolean

Sub main()

	Set swApp = Application.SldWorks

	Set swModel = swApp.ActiveDoc

	

	bres = swModel.ShowConfiguration2("2")

	swModel.EditRebuild3

	swModel.GraphicsRedraw2

	

	bres = swModel.ShowConfiguration2("3")

	swModel.EditRebuild3

	swModel.GraphicsRedraw2

	

	bres = swModel.ShowConfiguration2("4")

	swModel.EditRebuild3

	swModel.GraphicsRedraw2

	

	bres = swModel.ShowConfiguration2("5")

	swModel.EditRebuild3

	swModel.GraphicsRedraw2

	

	Call Variant2

End Sub



Sub Variant2()

	Dim conf As String

	Dim i As Integer

	For i = 2 To 5

		conf = CStr(i)

		bres = swModel.ShowConfiguration2(conf)

		swModel.EditRebuild3

		swModel.GraphicsRedraw2

	Next i



End Sub
Ссылка на сообщение
Поделиться на других сайтах

Ух ты, спасибо! Действительно работает =)

А в чем, собственно, разница? :)

При преобразовании числа в строку функцией Str, обязательно резервируется позиция для знака числа. Соответсвенно, если число является положительным, то возвращенная строка будет содержать пробел на месте знака. То есть нужно или ввести еще функцию Trim(), или, как сделал я, CStr(), которая просто преобразует выражение к соответствующему типу данных (String в нашем случае)
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

А как использовать из VB6.0 функции API Solidworks?

Нужно подключиться к какой-то DLL, содержащей функции Solid'a или как?

Нужно просто открыть файл сборки, адрес которой известен =)

Ссылка на сообщение
Поделиться на других сайтах

А как использовать из VB6.0 функции API Solidworks?

Нужно подключиться к какой-то DLL, содержащей функции Solid'a или как?

Нужно просто открыть файл сборки, адрес которой известен =)

Так же как и в VBA. Подключить библиотеки. Обычно их две (sldworks.tlb и swconst.tlb). Файл сборки открыть можно функцией: status = SldWorks->OpenDoc6 ( filename, type, options, configuration, &Errors, &Warnings, &retval )
Ссылка на сообщение
Поделиться на других сайтах

Так же как и в VBA. Подключить библиотеки. Обычно их две (sldworks.tlb и swconst.tlb). Файл сборки открыть можно функцией: status = SldWorks->OpenDoc6 ( filename, type, options, configuration, &Errors, &Warnings, &retval )

То есть фактически после подключения этих двух библиотек, функции, вводимые мною в код программы на VB6 будут идентичны функциям, используемым в макросах Solidworks ?
Ссылка на сообщение
Поделиться на других сайтах

То есть фактически после подключения этих двух библиотек, функции, вводимые мною в код программы на VB6 будут идентичны функциям, используемым в макросах Solidworks ?

Да.
Ссылка на сообщение
Поделиться на других сайтах

По клику кнопки пытаюсь сделать следующее:

Dim swApp As SldWorks.SldWorks

Dim status As Boolean

Dim fn As String

fn = Input13.Text 'Содержит имя файла

status = swApp.OpenDoc(fn, 2)

Не выходит. Не хочет запускаться... Пишет "Object variable or With block variable not set"

Что может быть не так? Ругается на строчку .помеченную красным

Ссылка на сообщение
Поделиться на других сайтах

По клику кнопки пытаюсь сделать следующее:

Dim swApp As SldWorks.SldWorks

Dim status As Boolean

Dim fn As String

fn = Input13.Text 'Содержит имя файла

status = swApp.OpenDoc(fn, 2)

Не выходит. Не хочет запускаться... Пишет "Object variable or With block variable not set"

Что может быть не так? Ругается на строчку .помеченную красным

Правильно и пишет. У вас swApp только объявлен, но не определен.

Добавьте перед status = swApp.OpenDoc(fn, 2)

Set swApp = GetObject(, "SldWorks.Application")
Ссылка на сообщение
Поделиться на других сайтах

Помогло, но относительно.

Он открывает файл только при наличии запущенного SW. Этот вопрос решаем - сначала можно запустить SW, затем открыть файл, ведь так? Или есть более простые способы?

А дальше беда. Файл открывается в окне SW, а VB выдает ошибку "Object doesn't support this property or method"

Есть подозрение, что он так говорит из-за следующей за открытием файла строчки

End Sub, относящейся к завершению операции, происходящей при нажатии кнопки =)

Так ли это?

Ссылка на сообщение
Поделиться на других сайтах

Помогло, но относительно.

Он открывает файл только при наличии запущенного SW. Этот вопрос решаем - сначала можно запустить SW, затем открыть файл, ведь так? Или есть более простые способы?

А дальше беда. Файл открывается в окне SW, а VB выдает ошибку "Object doesn't support this property or method"

Есть подозрение, что он так говорит из-за следующей за открытием файла строчки

End Sub, относящейся к завершению операции, происходящей при нажатии кнопки =)

Так ли это?

Попробуйте так:

Set swApp = CreateObject("SldWorks.Application")

swApp.Visible = True



Dim swModel As SldWorks.ModelDoc2

Dim lError As Long

Dim lWarning As Long



Set swModel = swApp.OpenDoc6(fn, swDocPART, swOpenDocOptions_Silent, "", lError, lWarning) ' при swDocPart - будет открыватся документ детали.

З.Ы. VB6 под рукой нет.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...