Jump to content

FAQ/Unigraphics/POST


Fixidea

Recommended Posts



museok
10.03.2023 в 09:37, Artas28 сказал:

Кто нибудь сталкивался с такой проблемой, что пост выводит не весь список инструмента?
Закинул в начале программы 2 команды, init tool list и create tool list. в итогде получаю вот такое:
N0010 %
N0020 O1234 ( Exercise1_sldprt_setup_1.prt )
N0030 ( CONTROL HAAS )
N0040 (------------------------------)
N0050 (           TOOLS              )
N0060 (------------------------------)
N0070 ( T#    NAME            LENGTH )
N0080 (------------------------------)
N0090 (2      MILL_D50        75.0   )
N0100 (1      MILL_D8         75.0   )
N0110 (4      STD_DRILL       60.0   )
N0120 ()                                   <------------- тут должна была быть центровка.
N0130 ()                                   <--------------тут должна была быть фасочная фреза
N0140 (------------------------------------)

 

Центровка и фасочная фреза не выводится, попробовал на некоторых примеров из книги, такая же беда. какой то инструмент выводится, а какой то специфический нет. 

Я даже взял готовый пост  http://cccp3d.ru/topic/68335-faqunigraphicspost/?p=607950 . всё равто такая же проблема. В новой версии что то поменялось с названием инструмента в NX и теперь пост их не видит?
Вопрос, как починить?

 

image.png

в этом коде есть лимит на номер инструмента до 30 вроде его можно там найти и исправить хоть до 999 , и если у тебя 2 инструмента будут с одинаковым номером выводится будет только один

Link to post
Share on other sites
andromed

Скорей всего дело вот тут:

 

proc MAP_TOOL_TYPE { } {
   global mom_tool_type

   if {[string match "Milling*" $mom_tool_type]} {
      return "MILL"
   } elseif { [string match "Turning*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Grooving*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Threading*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Drilling*" $mom_tool_type]} {
      return "DRILL"
   } else {
      return ""
   }
}

 

set tool_type [MAP_TOOL_TYPE]

 

 switch $tool_type {

      "MILL" {


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }
"THREADMILL" {


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }

      "DRILL" {

         #set mom_tool_point_angle [expr (180.0 / 3.14159) * $mom_tool_point_angle]


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }

      "LATHE" {

         set pi [expr 2 * asin(1.0)]
         set tool_orient [expr (180. / 3.14159) * $mom_tool_orientation]
         set output [format "%-10s %-10.4f %-15.3f %-5d %-5d"  $tool_name  $mom_tool_nose_radius $tool_orient  $mom_tool_length_adjust_register]
      }
   }

 

Центровка и фасочная не попадают в условие MAP_TOOL_TYPE и эта процедура выдает пустую строку.  

 

 

Link to post
Share on other sites
KGmotorsport
9 минут назад, andromed сказал:

Скорей всего дело вот тут:

 

proc MAP_TOOL_TYPE { } {
   global mom_tool_type

   if {[string match "Milling*" $mom_tool_type]} {
      return "MILL"
   } elseif { [string match "Turning*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Grooving*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Threading*" $mom_tool_type]} {
      return "LATHE"
   } elseif { [string match "Drilling*" $mom_tool_type]} {
      return "DRILL"
   } else {
      return ""
   }
}

 

set tool_type [MAP_TOOL_TYPE]

 

 switch $tool_type {

      "MILL" {


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }
"THREADMILL" {


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }

      "DRILL" {

         #set mom_tool_point_angle [expr (180.0 / 3.14159) * $mom_tool_point_angle]


         set output [format "%-6d %-15s %-6.1f "  $mom_tool_number $tool_name  $mom_tool_length ]
      }

      "LATHE" {

         set pi [expr 2 * asin(1.0)]
         set tool_orient [expr (180. / 3.14159) * $mom_tool_orientation]
         set output [format "%-10s %-10.4f %-15.3f %-5d %-5d"  $tool_name  $mom_tool_nose_radius $tool_orient  $mom_tool_length_adjust_register]
      }
   }

 

Центровка и фасочная не попадают в условие MAP_TOOL_TYPE и эта процедура выдает пустую строку.  

 

 

в новых NX mom_tool_type  немного изменился

Link to post
Share on other sites
Stanislav

Постав впереди * и сократи искомые слова. Например не Drilling* а  *Drill*

Link to post
Share on other sites
semus_irk

Здравствуйте, подскажите как добавить в постпроцессор NX. В конце, что бы выводилось

Позиция инструмента

параметры инструмента

время работы инструмента

Общее время работы УП.

 

Прошу расписать подробно т.к не совсем освоил еще

Link to post
Share on other sites
Artas28

Скинул вам файл, надо сделать как на картинке. В постбилдере открываете Custom command и импортируете его туда. А дальше перетаскиваете как на картинке. Получается вот так. Попробовал реализовать время для каждого инструмента отдельно, получилось как то странно, убрал))
В итогде выглядит так:
(Mach Time:32 min.);
(T3 FR_D20HF L=75.0)
(T4 CHM_4X16 L=75.0)
(T6 DR_D4.2_VHM L=80.0)
(T11 SDR_D8_HSS L=100.0)
(T14 DR_D5.8_VHM L=80.0)
(T15 TAP_M5 L=100.0)
(T16 DR_D7.8_VHM L=80.0)
(T17 REAM_D8 L=100.0)
(T23 FR_D6 L=75.0)
(T24 FR_D12 L=75.0)

Скрытый текст

 

image.png

 

image.png

 

image.png

 

 

 

ToolTimeName.tcl

Edited by Artas28
Link to post
Share on other sites
Stanislav

Помогите с процедурой надо проверить именно что переменная существует (не ее значение, а именно саму переменную) если она существует вернуть ее значение если нет то вернуть пустую строку.

 

Набросал процедуру пока написал undefined потом будет пустая строка.

 

global mom_

 

proc IsSetGet {$var} {
 # upvar $varIn $var
  if {[info exists $var]} {
    return $var
 } else {
    return "undefined +$var пустая строка" 
 }

 

set b [IsSetGet mom_] 

 

То есть в процедуру мне нужно передать ни саму переменную а ссылку на нее идентификатор и проверить существует ли переменная. Как это сделать?

Link to post
Share on other sites
Stanislav

Еще вопрос как раз завязанный на вопрос выше.

В пост билдере в разделе СтартОперации в событии [start_of_path] есть моя процедура которая собирает инфу по инструменту.

 

Я запрашиваю переменную global mom_tool_length_adjust_register -регистр коррекции на длину.

Но в процессе генерации УП пост ругается что такой переменной нет. 

Хотя есть переменная  $mom_tool_cutcom_register

 

В отладчике смотрю 

Event 1: MOM_start_of_program

Var: mom_tool_length_adjust_register = 0
Var: mom_length_comp_register = 0

 

Event 2: MOM_machine_mode

Var: mom_tool_length_adjust_register = 2
Var: mom_tool_cutcom_register = 2

 

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

Так почему пост ругается что нет переменной?

 

 

 

Edited by Stanislav
Link to post
Share on other sites
mr_Voden

@Stanislav

Скрытый текст

proc IsSetGet { v1 } {
         upvar $v1 v2
         if { [info exists v2] } { return $v2 } else { return "undefined $v1" }
}

 

Link to post
Share on other sites
Stanislav

Не очень работает.  Та же проблема осталась. Переменная var внутренняя, не становится внешней переменной varIn

посему ветвление идет всегда по ветке else т.к. внутренняя переменная var не определена

 

proc IsSetGet {varIn} {
  upvar $varIn var
  if {[info exists var]} {
    return $var
  } else {
    return "undefined $varIn"
  }
}

global z
global a

set a "t33"
MOM_output_text "==============="
MOM_output_text [IsSetGet $a]
MOM_output_text [IsSetGet $z]
MOM_output_text "==============="


Error Info: can't read "z": no such variable
    while executing

Либо если не выводить Z то
===============
undefined t33
===============

 

Edited by Stanislav
Link to post
Share on other sites
mr_Voden

@Stanislav Проблема осталась, потому что вы передаете значение переменной в функцию, а не ее название.

Link to post
Share on other sites
Stanislav
24.03.2023 в 21:07, mr_Voden сказал:

@Stanislav Проблема осталась, потому что вы передаете значение переменной в функцию, а не ее название.

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

 

++++++=============================================================================++++++++++++

Столкнулся с проблемой, нюансом. 

Две операции в одной задан патрон в другой не задан патрон.

 

В первом событии присутствует переменная mom_holder_number_of_steps и равна она 2  - количество ступеней патрона.

Я использую принцып mom_holder_number_of_steps > 0 в качестве флага использования патрона.

 

Во втором событии (относящемся ко 2ой операции другим инструментом без патрона) переменной mom_holder_number_of_steps вовсе нет в потоке данных события.

 

Но мой проверочный код  вывел 2 раза "===========2"

 if { [info exists mom_holder_number_of_steps] } {
     MOM_output_text "============== $mom_holder_number_of_steps"
  }

Что говорит о том что переменная установленнная однажды даже при запуске 2ой операции не переписывается, не обновляется, а просто так и весит с тем значением что было ей присвоено в первом событии .

 

Можно конечно проверять еще что длина первой ступени патрона mom_tool_holder_length  > 0 и тогда это уже будет совместным флагом использования патрона.

 

Либо обнулять системные mom_ переменные в конце операций. И так делать по всем кретическим переменным с которыми могут возникнуть проблемы в будущем.

 

Как правильно поступать? Как действуете вы?

Edited by Stanislav
Link to post
Share on other sites
Stanislav

Видимость процедур глобальна?

Не нужно писать слово global перед вызовом самописной процедуры описанной в обработчике события начала программы. gloobal нужно только для переменных?

 

 

Ниже приведенное работает. TestP вызывается без объявления перед этим процедуры глобальной global TestP

#=============================================================
proc PB_CMD_A_INITIAL { } {
#=============================================================
global count
set count 0

proc TestP {} {
   MOM_output_text "TEST ================================="
}

}



#=============================================================
proc PB_CMD_A_OPERATION_START { } {
#=============================================================
#Вывод строки с номером и именем операции
MOM_output_text "(Operation_$operation_count: $mom_operation_name)"

TestP
}

 

Link to post
Share on other sites
mr_Voden
3 часа назад, Stanislav сказал:

Насколько я понял из мануалов в TCL то что я хочу не реализуемо.

Ну...как скажете)

 

3 часа назад, Stanislav сказал:

 

Либо обнулять системные mom_ переменные в конце операций. И так делать по всем кретическим переменным с которыми могут возникнуть проблемы в будущем.

NX не сбрасывает переменные в конце каждой операции, если это не прописано в посте.

 

1 час назад, Stanislav сказал:

Видимость процедур глобальна

Да.

Link to post
Share on other sites
Stanislav

Почему у меня не получается передать массив в процедуру? Как передать массив в процедуру.

 

Попробовал переменные в процедуру передаются но когда я пытаюсь передать переменную-массив ругается что переменная является массивом, ну я как бы вкурсе что это массив ))).

Error Info: can't read "arToolList": variable is array
    while executing
"SetStrTool $arToolList $mom_tool_name"
    (procedure "PB_CMD_A_OPERATION_STR_TOOL" line 7)

 

******
proc SetStrTool {arToolList tool_name} {

}

******
global arToolList
global mom_tool_name

#Вывод строки инструмента
MOM_output_text [SetStrTool $arToolList $mom_tool_name]


 

Edited by Stanislav
Link to post
Share on other sites
mr_Voden

@Stanislav 

9 минут назад, Stanislav сказал:

MOM_output_text [SetStrTool $arToolList $mom_tool_name]

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

  • Нравится 1
Link to post
Share on other sites
Stanislav
16 минут назад, mr_Voden сказал:

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

Понял спасибо. Переделал.

Полагал что можно передать весь массив целиком. 

Давно не занимался php но по-моему там это было возможно, от туда и тянется.  

 

 

Link to post
Share on other sites
mr_Voden
2 часа назад, Stanislav сказал:

Полагал что можно передать весь массив целиком. 

Можно.

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.




  • Сообщения

    • миталник
      Шпонка, передавая крутящий момент, работает на срез и смятие. Исходя из этого и подбирается (рассчитывается) размер шпонки.
    • AlexKaz
      Под результатами ессно надо понимать экономию времени и денег. Если покупка более дорогой и худшей по качеству услуги выливается в тотальный геморрой и не приводит ни к какой экономии ресурсов - нафиг не нужны такие услуги...
    • AlexKaz
      IMHO, не по Сеньке шапка. Софт англосаксов - это следствие диверсификации их экономик. Софт - это сфера услуг, призванная экономить деньги. А вот деньги зарабатывать можно только на товарном производстве (рынок акций, депозитов, и прочие финансы - это только обслуга реального сектора). Толкая софт впереди паровоза экономики как её драйвер есть риск не добиться ни-че-го, кроме довольных рож софтописателей. Во-первых, эти редиски ломят цену за софт внутри РФ словно уже живут за бугром и получают з.п. как бугром. Во-вторых, рынок РФ они не ставят приоритетным, РФ для них - это 1/50 мирового пирога - так себе полигон для отработки технологий. Соответственно, эти люди не понимают в массе что нужно миру - потому как в РФ экономика откровенно не выдающаяся и всех тонкостей и нужностей силами спецов РФ не создать и не описать. Как следствие, на выходе имеем большой пшик - деньги влиты, а результаты мир не устраивают.   Лунная же миссия и будущий Марс - это резервирование человеческой популяции, и чем раньше сделать бэкап - тем лучше. В глобальном смысле. В локальном же смысле эти проекты есть уйма заказов на железо. А железо можно и без софта создать или использовать примитивные софтины... Чёт Королёв без CAD/CAE обходился (но не без вычислитетелей). Вот ведь странный человек - ни одной CAD-шараге не забашлял...
    • Александр1979
      Такое бывает если фазы на синхронный двигатель перепутаны.
    • lublu_abs
      понял посмотрите для одного диаметра вала b и h   Посмотрите на b и h для одного диаметра вала, например 20 и 45. гост на конические концы валов Гост шпоночные соединения: Как не сложно заметить, размеры отличаются  
    • irbitsky
      Могут быть любыми. Имеется ввиду на условном виде сверху. Это касается узких торцов паза. А вот  Они идентичны    Или я просто не заметил разницы. Укажите конкретно, какие размеры отличаются. Обоими. Могут быть любыми. Имеется ввиду на условном виде сверху. Это касается узких торцов паза. А вот  Они идентичны    Или я просто не заметил разницы. Укажите конкретно, какие размеры отличаются. Обоими.
    • Viktor2004
      Ну, рассказываю все по порядку Купили манагеры глобусный стол но без двигателей. Так дешевле Потом где-то по объявлению купили два движка и привод. И сказали собирать. Тут уже в качестве юмора постили картинку где вместо шин постоянного тока кусок кабеля ВВГ примерно 25 кв мм. Так вот я вместо шин скрутил в несколько слоев кабель ВВГ 2,5 кв мм. Оптические пачкорды у меня были, а вот соединители CXA2A --- CXA2B пришлось поискать. Вроде в ЧИП и ДИПе они на сайте есть, но в реалии не оказалось. С трудом достали. Там же достали разъемы кабелей 4-5 осей. Осталось сварганить кабели. Купили контрольный электрический кабель. Спаяли, подключили, а он не работает. SV0368 Заземление эффекта не дало. Поехал искать витую пару, да такую, что бы каждая жила была многожильной. Нашел на рынке. Витую пару подключил только на линию данных. 5-6 контакт энколера. Остальные провода оставил от контрольного кабеля. У него сечение побольше. Ошибка SV0368 ушла. Затем оказалось что цоколевка разъемов энкодера 4 и 5 оси разная. Конечно на двигателях и на приводе она одинаковая, а на промежуточном разъеме оси она разная. Пришлось перепаивать. Подключил. Тут оказалось что энкодер одного двигателя не обнуляется и не отслеживает положение вала. Менял местами двигатели, отдельно энкодеры, не работает именно тот энкодер. Стал пытаться запускать все по очереди. Забил параметры как указал выше и стал проверять сначала на 4-й оси, потом на 5-й. Поочередно отключая то одну, то другую. При движении от маховичка вначале ось страгивается с места, потом начинает гудеть, а двигатель греться. Иногда дергается так что аж подпрыгивает. На обеих каналах ведет себя одинаково что один, что другой движок, когда исправный энкодер на них вешаю.    
    • lem_on
      че за бред, сам сначала влез, а потом я ему пишу оказывается.
    • статист
      Никогда этой версии не ставил. Попробуйте 21 версию поставить. С ней таких проблем не наблюдалось
    • Maik812
      Я переименования файла с разными свойствами решал так.  Все го то сделать нужно плагин который писать будет через апи свойство в фаил. На прямую он пишет но ссылка то на имя старое. Создать библиотеку с именами в файлах со свойствами различными в любом порядке и тд за пару кликов.. На данном фото переименовании по габаритам и по имени папки где лежат файлы. Все сохраняется по шаблону и просто выбирается.
×
×
  • Create New...