Jump to content

Программирование для Solidworks - с чего начать?


SergeyR

Recommended Posts

Уважаемые профессионалы!

Использую эту САПР относительно недавно, года 2. В принципе, особых проблем, с использованием стандартных функций системы (в моделировании, построении сборок и КД) не испытываю, но есть огромное количество пожеланий к оной, которые, как я понял, кроме меня - вряд-ли кто будет исполнять. Соответственно, встал вопрос о программировании для этой сапр. Пытался разобраться с мануалом по Solidworks API, не помогло, сказывается нехватка знаний по программированию в VBA и, естессно, ангийского языка. С первым пунктом, в принципе, не очень сложно, есть умные книжки, и некоторый опыт программирования в Pascal, позже, в AutoLISP и Delphi. Признаюсь чесно, никогда крутым программером не был, но для автокада, ваял все что мне было нужно, правда, не использовал VBA, видимо, зря. Пытался записывать макросы, а потом разбираться в листингах - тоже, результаты - ниже среднего. Вопрос: Существуют-ли какие-нибудь русскоязычные материалы по этому вопросу? Возможно, кто-нибудь из вас сталкивался с подобной проблемой и нашел ее решение. В курсе, что официального русскоязычного описания API не было, потому и пристаю с глупыми вопросами к вам! Заранее благодарен всем, кто как-то отреагировал и, еще раз, прошу прощения, за глупые вопросы!

Link to post
Share on other sites


1) посмотреть здесь:

<noindex>http://www.pogruzka.com/julio/</noindex>

там есть полезные утилиты, некоторые с исходниками;

2) берем исходник и выполняем в пошаговом режиме (VB), смотрим что прога делает, как работают функци API и тд;

3) почти все действия, которые пользователь делает в SW записываются в файл "ХХХ:\Program Files\SolidWorks\swxJRNL.swj", можно посмотреть, изучить;

4) включить запись макросов SW при выполнении группы каких-либо действий - посмотреть, изучить в пошаговом режиме;

Вот, первое, что пришло в голову.

Удачи!

Link to post
Share on other sites

Вот спасибо, про лог - не знал, обязательно помотрю, потому как многое, из того, что доступно на сайте мне, пока, непонятно, либо, опять-таки, пока не нужно. Да и примеров там не так уж и много, по крайней мере, по моделированию параметрических моделей, с использованием VBA, я че-то не нашел, а до свойств файлов и конфигураций - пока далеко, тоже нужно, но для начала, нужно заставить его моделировать, а потом, согласно модели, выносить ее свойства. В любом случае, огромное спасибо! :clap_1:

Link to post
Share on other sites

Что-то не нашел я этого файла, только в Туторах валяется такой, и никакого отношения (оно и понятно) к тому что я делаю в солиде не имеет. :(

Link to post
Share on other sites

Что-то не нашел я этого файла, только в Туторах валяется такой, и никакого отношения (оно и понятно) к тому что я делаю в солиде не имеет. :(

<{POST_SNAPBACK}>

Какого файла?

Этого:

"ХХХ:\Program Files\SolidWorks\swxJRNL.swj" ?

Link to post
Share on other sites

Именно его... просмотрел настройки в солидворкс - нигде о нем ни слова не нашел. Может это в 2007 нормально?

Link to post
Share on other sites

Именно его... просмотрел настройки в солидворкс - нигде о нем ни слова не нашел. Может это в 2007 нормально?

<{POST_SNAPBACK}>

Да нет, насколько я помню уже в SW2003 он был. Я вот не помню, чтобы я где-то в установках его включал.

Может как-то по другому называется?

Если попробовать так: загрузить SW, сделать какую-либо операцию,

свернуть SW и сделать поиск последних файлов (я в TotalCommander`e это обычно делаю).

Вот для примера мой файл (я его сильно сократил, последний размер его - 380Кб):

"

' ******************************************************************************

' swxJRNL.swj - journal recorded on 01/06/07 by ssvadmin

' *****************************************************************************

Dim swApp As Object

Dim Part As Object

Dim SelMgr As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim Feature As Object

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.OpenDoc6 ("E:\ADOC_SSV\ADOC SW\Perpetum\Disk1_СБ.SLDASM", 2, 0, "", longstatus, longwarnings)

Set Part = swApp.ActivateDoc2 ("Disk1_СБ.SLDASM", False, longstatus)

swApp.ActiveDoc.ActiveView.FrameLeft = 0

swApp.ActiveDoc.ActiveView.FrameTop = 0

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.ActiveDoc.ActiveView.FrameState = 1

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.02741962598139, 0.02299999999991, 0.004757867699027, False, 0, Nothing, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.03000295000368, 0.02299999999991, 0.000434542130165, False, 0, Nothing, 0)

Part.Save2 FALSE

Set Part = swApp.ActivateDoc2 ("Magn.SLDPRT", False, longstatus)

Part.Save2 FALSE

swApp.CloseAllDocuments True

swApp.ExitApp

End Sub

"

Link to post
Share on other sites

Этот файл может оказаться в папке рабочей.

Либо в Common Files.

Или C:\Documents and Settings\<USER>\Application Data\SolidWorks и т.д. Можно попробовать поиском.

Link to post
Share on other sites

Этот файл может оказаться в папке рабочей.

Либо в Common Files.

Или C:\Documents and Settings\<USER>\Application Data\SolidWorks и т.д. Можно попробовать поиском.

<{POST_SNAPBACK}>

Но он все-таки у всех существует?

Или я в чем-то ошибаюсь?

У меня лично он "всю жизнь" находился в папке "XXX:\Program Files\SolidWorks\swxJRNL.swj".

Link to post
Share on other sites

Существует.

Я думаю в разных версиях солида он в разных местах.

2005 у меня оставлял его в рабочей папке. Было удобно, т.к. для конкретных проектов свой файл был.

Сейчас в 2006 сп 4.1 у меня он находится в папке

C:\Documents and Settings\Peshkoff_VN\Application Data\SolidWorks

Link to post
Share on other sites

Да нет же, я ввобще, не только swxJRNL.swj, но и *.swj искал на всем диске, нашел тоько один, вышеупомянутый файл... :no:

О, нашел... C:\Documents and Settings\<Username>\Application Data\SolidWorks

Link to post
Share on other sites

Всем привет.

У меня в SW2007SP2 файл журнала СВ:

c:\Documents and Settings\XXXX\Application Data\SolidWorks\swxJRNL.swj

чуть-чууть опоздал... :-)

Link to post
Share on other sites

Чет я не пойму, как заставить скрипт проставить размеры на эскизе, не выводя ниалогового окна, тоест, не спрашивая пользователя... Суть в том, что основные, скажем, размеры, пользователь забивает в форме, а вот те, которые рассчитались самим скриптом?, тоесть, начертит он линию, скажем, уже по вбитому размеру, но, чтобы определить эскиз, нужно, чтобы он его еще и проставил. Получается только так: Он чертит линию, ставит размер и переспрашивает его в меню, чего мне не нужно. Согласен, чо нет проблем, заставить его, потом вбить нужный, но это не интересно. Нужно, чтобы он пользователя без нужды, не дергал...

Link to post
Share on other sites

Чет я не пойму, как заставить скрипт проставить ...

Хых...

никакой скрипт за тебя работать не будет, и никак его НЕ заставишь работать.

Работа скрипта - это прежде всего работа человека, который его(скрипт) создал.

Какая задача стоит перед тобой??

Сформулируй.

Иногда, лично у меня бывает: какая-то проблема возникла и мысль в голове так и вертится, и ничего не получается - решения нет.

А вот попытаешься объяснить это другому человеку даже далекому от техники и, вдруг, самому становится все понятно!

Эт по-моему в психологии какое- то понятие есть. Я имею ввиду "вслух_произношение".

Link to post
Share on other sites

Короче: Я в открытом документе детали запускаю "запись". Далее, выбираю плоскость"Front", создаю в ней эскиз, в эскизе рисую прямоугольник, скажем, от точки "0", ставлю 2 размера, X и Y. Естественно солид меня спрашивает эти размеры. В полученом скрипте есть такаие строки:

boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", -0.01815158806545, 0.03563089509143, 0, False, 0, Nothing, 0)

Dim Annotation As Object

Set Annotation = Part.AddDimension2(-0.0350931, 0.029177, 0)

Part.ClearSelection2 True

Part.Parameter("D1@Эскиз1").SystemValue = 0.6

Тоесть, как я понял, он выбирает объект "Line2", далее, объявлеят переменную Annotation как Object и присваивает ей значение Part.AddDimension2(-0.0350931, 0.029177, 0), тобишь, высвечивает окошко для ввода размера, ну, с условиями размещения размерной линии и т.п. Далее, снимает выделение (как я и делал) и применяет размеру "D1@Эскиз1" значение 0.6, но уже не выводя окошко для ввода размера, хотя, когда я записывал, естественно оно тоже было. Нужно, чтобы программа с самого начала не просиля меня ввести значение размера (не показывала это окошко) а просто добавляла размер "D1@Эскиз1" к "Line2"с уще посчитанным, в ней-же, размером.

Link to post
Share on other sites

:rolleyes:

Посмотри настройки

Настройки > Параметры > Настройки пользователя > Общие > Ввести значение размера

и сниму галочку

В обычном (руками) работает

Скорее всего и в автоматическом (с помощью макроса) будет работать

Link to post
Share on other sites

Точняк! По умолчанию эта опция включена, но никто не мешает сделать так:

swApp.SetUserPreferenceToggle swInputDimValOnCreate, False

......

Образмерить......

......

swApp.SetUserPreferenceToggle swInputDimValOnCreate, True

Пасибо!

А можно (и так будет правильнее) вот так:

Sub main()

Dim DimValOn As Boolean 'объявляю переменную состояния этого параметра

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

DimValOn = swInputDimValOnCreate 'присваиваю ей текущее значение параметра

swApp.ActiveDoc.ActiveView.FrameState = 1

swApp.SetUserPreferenceToggle swInputDimValOnCreate, False 'выключаю параметр

boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

Part.ClearSelection2 True

Part.SketchRectangle -0.01265105973025, -0.01736156069364, 0, 0.02476377649326, 0.04185616570328, 0, 1

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", -0.01265105973025, 0.01978410404624, 0, False, 0, Nothing, 0)

Dim Annotation As Object

Set Annotation = Part.AddDimension2(-0.0218029, 0.0181691, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.005921772639692, 0.04158699421965, 0, False, 0, Nothing, 0)

Set Annotation = Part.AddDimension2(0.00619094, 0.052623, 0)

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("D1@Эскиз1@Деталь1.SLDPRT", "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

Part.ClearSelection2 True

Part.SketchManager.InsertSketch True

swApp.SetUserPreferenceToggle swInputDimValOnCreate, DimValOn 'возвращаю значение параметра в исходное состояние

End Sub

Link to post
Share on other sites

Виноват, фигню спорол...

Для того, чтобы присвоить аеременной текущее значение флага "Ввести значение размера" нужно вот чего:

DimValOn=SldWorks.GetUserPreferenceToggle (swInputDimValOnCreate)

Естесственно, предварительно объявив переменную

DimValOn как Boolean....

Link to post
Share on other sites

Это конечно все клево, вот только у меня swApp.SetUserPreferenceToggle отказывался упорно работать.

Ничего не происходило. Я пытался отключить анимацию. Анимация при добавлении была по умолчанию включена, при установке и сопряжении большого количества компонентов через макрос тратилось много времени, я хотел отключить анимацию, установить все, затем опять включить. Нифига не вышло...

Интересно получиться ли сейчас у тебя. Я работал в СВ2006 сп 0.0

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • maxx2000
      @areg потому что у него всего 1 публикация и не может вообще писать ЛС. сам ему напиши
    • gudstartup
      это безопасность чтобы вас в ручном режиме на шпиндель не намотало прописывается станкостроителем в plc правда у нас 500 а 54 это прям совсем мало
    • areg
      Написал в личку. А почему в личку цены не можете скинуть?
    • Kelny
      Посмотрите свойтсва файлов из Explorer Windows, на закладке ПОДРОБНО, там может быть строчка ПОСЛЕДНЕЕ СОХРАНЕНИЕ В...   или создайте макрос, добавьте пример из справки (в замен того что имеется в новом макросе) и запустите выполнение макроса, который покажет не только последнюю версию файла, но и историю файла по разным версиям (в каких вообще версиях файл редактировался): https://help.solidworks.com/2022/english/api/sldworksapi/Get_Version_History_of_Future_Version_Document_Example_VB.htm   Текст макроса из справки (если файл уже открыт в Soildworks, то в макросе ни чего менять не надо, а если открытых документов нет и надо макросом открыть документ, то поменяйте путь к файлу в тексте макроса "strFileName = swApp.GetCurrentMacroPathFolder & "\Part1.sldprt""):  
    • lem_on
      Но комп от интернета отключен. 
    • Anat2015
      Так было всегда, или "я неделю тут работаю"? Механизм возникновения проблемы даст полезную инфу.
    • Shoker
      Насколько я понял Ваш вопрос, результат будет зависеть от типа закрепления, приложенного к проушине. Если вы используете "фиксированную геометрию", тогда все точки поверхности этой поверхности будут иметь нулевые перемещения, что фактически означает запрет на вращение вокруг оси (т.к. поворот вокруг оси будет приводить к вращению-перемещению всех точек, не лежащих строго на самой оси вращения). В SW должны быть другие виды закрепления, которые будут позволять поворачиваться, при этом у точек будет нулевые радиальные и осевые перемещения. Но это нужно будет применять, только если этот ГЦ будет входить в другую расчетную схему, как элемент, воспринимающий только осевую силу (остальные будут нулевые как раз изза этого поворота), отдельный расчет с таким закреплением вам ничего не даст и ничего он не посчитает вам.
    • laytermen
      Добрый день. Нет. Стабильно 54 оборота и все. 
    • KSVSVK
      С одного дистрибутива на 2 компьютера несколько лет назад поставлен Солид. Обновления отключены.   Последнее время начались "чудеса":   1. Файл, созданный на первом компе, не открывается на втором, утверждая, что он из "будущей версии"   2. Проверка сборки эвольвентного зубчатого редуктора в "будущей версии" находит интерференции, отсутствующие в старой.   3. Расчет данного редуктора (Motion) при одних и тех же исходных данных приводит к разным результатам. Причем, на мой не очень искушенный взгляд, правильный результат у "старой" версии.   4. В контексте сборки создаю плоский эскиз, к которому привязываю размеры деталей (системное "Расположение" не использую). В какой-то момент (не отследил точно) часть размеров в эскизе пропадают. Причем эскиз остается определенным, и соответствующие взаимосвязи в нем есть. Похоже на "скрыть размер", но данный пункт не вызывался. При попытке посмотреть размеры через уравнения (режим ) Solid сообщает об ошибке и предлагает его перезапустить.   Кто-нибудь с такими "чудесами" сталкивался?
    • gudi
      Для длинных и сложных сделали ком-порт, а сеть для коротких и простых? всё равно не понимаю. Программа передалась через ком-порт, загрузилась в чпу, цикл старт нажали станок поехал ее делать, хоть час хоть неделю, хоть как. Или вы по ходу выполнения программы вы ее  через ком-порт корректируете ?
×
×
  • Create New...