Jump to content

Переименование файлов сборки по "маске"


Ectoplaza

Recommended Posts

Ectoplaza

Собственно в вопросов два:

 

1. Необходимо переименовать каждую деталь входящую в общую сборку, добавив дату ревизии в конце имени файла.

2. Далее, имея в имени файла предыдущие число, месяц и год, сделать выборку и заменить числа актуальными на момент изменения/сохранения файла.

Есть ли в CATIA такая возможность?

 

p.s. PDM'ы не предлагать их нет у нас...

Link to post
Share on other sites


  • 2 months later...

@lexincton Написал скрипт, который рекурсивно обходит дерево, нумерует детали/сборки и обновляет дату ревизии документов входящих в сборку. Далее попытался сохранить измененные файлы под новыми именами, но получил ошибку. Не могу понять почему код не работает, строку с ошибкой закомментировал.

 

Reveal hidden contents  
Language = "VBSCRIPT"
Sub CATMain()
Set mainDocument = CATIA.ActiveDocument
Set rootAssembly = mainDocument.Product
sTmpPath = CATIA.ActiveDocument.Path
clrProp rootAssembly
setProp rootAssembly, 0, sTmpPath
clrProp rootAssembly
End Sub

Sub setProp(thisProduct, thisAsm, sTmpPath)
  Dim currAsm, currPrt
  currAsm = thisAsm
  currPrt = 0
  Set productList = thisProduct.Products
  setData thisProduct, currAsm, 0, "CADProduct", sTmpPath
  For i = 1 To productList.Count
    If (productList.Item(i).DescriptionRef <> "True" And _
        productList.Item(i).Revision <> "ANY") Then
      If (productList.Item(i).Products.Count > 0) Then
        currAsm = currAsm + 1
        setProp productList.Item(i), currAsm, sTmpPath
      Else
        currPrt = currPrt + 1
        setData productList.Item(i), thisAsm, currPrt, "CADPart", sTmpPath
      End If
    End If
  Next
End Sub

Sub setData(document, thisAsm, thisPrt, thisDfn, sTmpPath)
  document.PartNumber = "MP 2720 " & _
    String(2 - Len(thisAsm), "0") & thisAsm & _
    String(2 - Len(thisPrt), "0") & thisPrt
  document.Definition = "Definition"
  document.Revision = getDate()
  document.DescriptionRef = "True"

  'Error: Object doesn't support this property or method "document.SaveAs"
  'document.SaveAs(sTmpPath & "\" & document.PartNumber & " " & _
  'document.Definition & " " & document.Revision & "." & thisDfn)
End Sub

Function getDate()
  SetLocale "en-us"
  Dim currDay, currMonth, currYear, mark
  currDay = Day(Date)
  currMonth = Month(Date)
  currYear = Year(Date) Mod 100
  getDate = String(2 - Len(currDay), "0") & currDay & "." & _
         MonthName(currMonth,true) & "." & currYear
End Function

Sub clrProp (thisProduct)
  Set productList = thisProduct.Products
  For i = 1 To productList.Count
    productList.Item(i).DescriptionRef = ""
    clrProp productList.Item(i)
  Next
End Sub
Hide  

 

А вот код, что ниже  под спойлером, работает, т.е. сохраняет деталь под новым именем. Код простой, в нем нет проверки соответствия типу, работает только с ранее сохраненными деталями, но, тем не менее работает.

 

Reveal hidden contents  
Language = "VBSCRIPT"
Sub CATMain()
Set partDocument1 = CATIA.ActiveDocument
Set product1 = partDocument1.GetItem("PartName")

partDocument1.SaveAs(CATIA.ActiveDocument.Path & "\" & product1.PartNumber & " " & _
		     product1.Definition & " " & product1.Revision & ".CATPart")
End Sub
Hide  

 

Буду благодарен за любую помощь.

Link to post
Share on other sites
  • 2 weeks later...

@lexincton Строку "document.SaveAs" заменил на "document.ReferenceProduct.Parent.SaveAs" и все заработало.

Правда я так и не понял что я сделал. Пока что в работе макроса много ограничений, но он работает.

 

Единственно что хотелось бы избавиться от этого сообщения, которое появляется для каждой сохраняемой детали.

 

Reveal hidden contents  

33.JPG.6906c14f82942b32c09516165f42beee.JPG

Hide  
Link to post
Share on other sites
Скрытый текст

'Language = "VBSCRIPT"
Sub CATMain()
CATIA.DisplayFileAlerts = False
Set mainDocument = CATIA.ActiveDocument
Set rootAssembly = mainDocument.Product
sTmpPath = CATIA.ActiveDocument.Path
clrProp rootAssembly
setProp rootAssembly, 0, sTmpPath
clrProp rootAssembly
CATIA.DisplayFileAlerts = True
End Sub

Sub setProp(thisProduct, thisAsm, sTmpPath)
  Dim currAsm, currPrt
  currAsm = thisAsm
  currPrt = 0
  Set productList = thisProduct.Products
  setData thisProduct, currAsm, 0, "CADProduct", sTmpPath
  For i = 1 To productList.Count
    If (productList.Item(i).DescriptionRef <> "True" And _
        productList.Item(i).Revision <> "ANY") Then
      If (productList.Item(i).Products.Count > 0) Then
        currAsm = currAsm + 1
        setProp productList.Item(i), currAsm, sTmpPath
      Else
        currPrt = currPrt + 1
        setData productList.Item(i), thisAsm, currPrt, "CADPart", sTmpPath
      End If
    End If
  Next
End Sub

Sub setData(document, thisAsm, thisPrt, thisDfn, sTmpPath)
  document.PartNumber = "MP 2720 " & _
    String(2 - Len(thisAsm), "0") & thisAsm & _
    String(2 - Len(thisPrt), "0") & thisPrt
  document.Definition = "Definition"
  document.Revision = getDate()
  document.DescriptionRef = "True"
  'Error: Object doesn't support this property or method "document.SaveAs"
  Dim dc As document
  Set dc = document.ReferenceProduct.Parent
  dc.SaveAs sTmpPath & "\" & document.PartNumber & " " & document.Definition & " " & document.Revision & "." & thisDfn
End Sub

Function getDate()
Dim codeString As String
Dim scriptControl As Object
Set scriptControl = CreateObject("MSScriptControl.ScriptControl")

codeString = "Sub getDateByLocale(locale)" & vbCrLf & "SetLocale locale" & vbCrLf & " End Sub"
With scriptControl
    .Language = "VBScript"
    .addCode codeString
    printDateByLocale = .Run("getDateByLocale", "en-us")
End With
  Dim currDay, currMonth, currYear, mark
  currDay = Day(Date)
  currMonth = Format(Date, "m") 'MonthName(Month(Now)) '
  
  currYear = Year(Date) Mod 100
  getDate = String(2 - Len(currDay), "0") & currDay & "." & _
         Format(Date, "m") & "." & currYear
End Function

Sub clrProp(thisProduct)
  Set productList = thisProduct.Products
  For i = 1 To productList.Count
    productList.Item(i).DescriptionRef = ""
    clrProp productList.Item(i)
  Next
End Sub

 

Ну зачем у продукта то сейв аз вызывать. Код в примере для VBA. Кстати после SetLocale месяц все равно русский (может на скрипте срабатывает, может неправильно вызываю - не уверен).

CATIA.DisplayFileAlerts = False

 возможно поможет

Edited by Martmath2
  • Нравится 1
Link to post
Share on other sites

@Martmath2  Спасибо, это именно то что мне нужно было.

 

Тестовая сборка до применения макроса 

5be5862b0e436_1bedore.JPG.6eb31c4ae4cb01ca0354a73e6727070d.JPG

Hide  

 

Тестовая сборка после применения макроса  

5be5862bcbf36_2after.JPG.136ffd80540490b78055e9d57e264baa.JPG

Hide  

 

В планах добавить дополнительную проверку и обновлять дату ревизии только тем сборкам/деталям, в которые вносились правки. Правда пока не знаю как получить доступ к этому свойству. Предполагаю что должно быть какое-то свойство "Modified"  но пока не нашел.

  • Нравится 1
Link to post
Share on other sites
Скрытый текст

Sub CATMain()
Dim productDocument1 As ProductDocument
Set productDocument1 = CATIA.ActiveDocument
Dim product1 As Product
Set product1 = productDocument1.Product
rtt = FileDateTime(product1.ReferenceProduct.Parent.FullName)
End Sub

 

Дату из файла сравнивать с тем что записал до этого, как вариант.

Цитата

Предполагаю что должно быть какое-то свойство "Modified"

нету.

Link to post
Share on other sites
  • 1 year later...
В 09.11.2018 в 18:12, Ectoplaza сказал:

@Martmath2  Спасибо, это именно то что мне нужно было.

 

Тестовая сборка до применения макроса 

5be5862b0e436_1bedore.JPG.6eb31c4ae4cb01ca0354a73e6727070d.JPG

Hide  

 

Тестовая сборка после применения макроса  

5be5862bcbf36_2after.JPG.136ffd80540490b78055e9d57e264baa.JPG

Hide  

 

В планах добавить дополнительную проверку и обновлять дату ревизии только тем сборкам/деталям, в которые вносились правки. Правда пока не знаю как получить доступ к этому свойству. Предполагаю что должно быть какое-то свойство "Modified"  но пока не нашел.

Всем привет. Итоговым вариантом макроса можете поделиться?

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.




  • Сообщения

    • wildthing
      Здравствуйте ,появилась проблема со станком -  Haas VF-1 2012 года , во время отработки программы менялся инструмент с т3 в т5 ,т3 инструмент поставил и поехал в т5 на т4 встал в аварийку и выдал 157 ошибку ( замыкание на землю)  , сбросили ошибку и сделали рекавери дабы отвести сменщик инструмента от шпинделя , станок по осям вышел в 0 ,но  при попытки смены инструмента выдает 867 ошибку КЗ кабеля рг ауси  ( не нашёл её на сайте абамета и хааса ) , возможно кто-то сталкивался с данной проблемой и поможет советом , заранее спасибо  
    • AlexArt
      Очень интересно, но не понятно. Нужен простой пример действий и целей. Тогда, возможно, получится подсказать.
    • KorovnikovAV
      У тебя странные представления о страхе. Страна кстати в большинстве белая, просто с высоким уровнем преступности. А свои влажные фантазии оставь при себе, мне такое не интересно. 
    • netlend
      Добавка следуюющих страниц  
    • Jesse
      это ты типа показал, как надо шутить?)   это вряд ли..) и что же с тобой делали в ЮАР чёрные мальчики, давай рассказывай Только сильно без подробностей
    • Alex_anders
      Устанавливаю комплекты Simodrive 611 (платы 6SN1118-1NH01-...) на фрезерный станок. Управление импульсными сигналами, ОС по энкодерам син/кос. Почитал мануалы, скачал Simocom U. Подключил на столе. В целом все понятно, вопросов по параметризации приводов нет, двигатели работают нормально. Осталась пара вопросов.    1. Так и не понял, как организовать экстренное торможение двигателями при пропадании сигнала разрешения. Сигнал Естоп по ТБ должен быть заведен и в чпу и в привод. Если кнопкой аппаратно разрывать сигнал разрешения привода, он останавливается выбегом. У меня хоть и двигатели с тормозами, но хотелось бы сделать совсем по-правильному.     2. Не понял, может ли этот привод управлять вентилятором шпиндельного двигателя. Нашел параметр, при достижении температуры выводить предупреждение. Настроил его на выход. Вроде бы все хорошо, но по истечении таймаута (240с макс), привод вываливается в ошибку по перегреву. Такой вариант не прокатил  ).   
    • netlend
      Добрый вечер. Вообщем станок поехал,причину озвучивать не буду-элементарная ошибка ,что аж стыдно.С правой стороны обнаружил отгнивщий датчик ренишау.Дума завтра электронщик вернет-и предупреждение исчезнет.Не решилась проблема с проскоком револьверной головки и автозапуском гидравлики.Сделал фотки PMC страниц-может кто увидит некорректные данные.Буду благодарен за подсказки.
    • Ветерок
      Я тоже. Но Солид непобедим.
    • Shvg
      Не совсем понятно что пишется. Macros, standalone API (.exe files) или add-in (.dll files). И да, это затратная функция, особенно в exe файлах. Примерно раз в десять время можно сократить в них используя swApp.CommandInProgress.   Вот примерные тестовые результаты сборки из 10000 шариков с использованием CommandInProgress и exe файла. Время дано в миллисекундах. Функция GetChildren: 3198 Цикл for: 21069 Функция GetChildren: 3078 Цикл for: 21612 Функция GetChildren: 3127 Цикл for: 21538 Функция GetChildren: 3237 Цикл for: 21151 Функция GetChildren: 2973 Цикл for: 21622   Без CommandInProgress сама функция GetChildren отрабатывала 42...48 сек. P.S. Комп старенький.
    • ressurect83
      Подкидывал два других драйвера по оси Х, менял местами драйвера. Реакции ноль.
×
×
  • Create New...