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

FAQ/Unigraphics/POST


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



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 инструмента будут с одинаковым номером выводится будет только один

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

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

 

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 и эта процедура выдает пустую строку.  

 

 

Ссылка на сообщение
Поделиться на других сайтах
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  немного изменился

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

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

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

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

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

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

 

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

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

Скинул вам файл, надо сделать как на картинке. В постбилдере открываете 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

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

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

 

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

 

global mom_

 

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

 

set b [IsSetGet mom_] 

 

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

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

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

В пост билдере в разделе СтартОперации в событии [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 Так если одна переменная прочиталась а другая нет, хотя они определены одна следом за  другой в событии.

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

 

 

 

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

@Stanislav

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

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

 

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

Не очень работает.  Та же проблема осталась. Переменная 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
===============

 

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

@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_ переменные в конце операций. И так делать по всем кретическим переменным с которыми могут возникнуть проблемы в будущем.

 

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

Изменено пользователем 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
}

 

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Stanislav сказал:

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

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

 

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

 

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

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

 

1 час назад, 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]


 

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

@Stanislav 

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

MOM_output_text [SetStrTool $arToolList $mom_tool_name]

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

Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, mr_Voden сказал:

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

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

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

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

 

 

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Stanislav сказал:

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

Можно.

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • maxx2000
      Причина того - Кроилово. Кроилово всегда приводит к попадалову. Месяц простоял сколько мильонов деревянных потеряли? Вопрос риторический. И ещё будет стоять. Как памятник человеческой глупости и жадности.
    • AlexKaz
      "9 июля 1968 года на мышах был проведен самый знаменитый эксперимент американского ученого-этолога Джона Кэлхуна «Вселенная-25». Суть опыта заключалась в создании идеальных условий, где мыши могли бы жить и размножаться, не ведая никаких забот, вдали от хищников и в отсутствие эпидемий и заболеваний. Для этих целей ученый построил специальный загон, куда были помещены четыре пары белых мышей (самцов и самок). В распоряжении мышей всегда была чистая вода и еда в изобилии, специальные гнезда, где можно обустроить себе жилище ― гнезд в загоне хватало для проживания нескольких тысяч мышей. Температура в загоне в среднем составляла около 20 ℃ и была комфортной для мышей. Животные не подвергались никаким влияниям извне и жили в идеальных условиях в свое удовольствие. А дальше началось самое интересное. На первом этапе эксперимента мыши хорошо размножались, вели активный образ жизни, охотно играли. На следующей фазе эксперимента мыши стали есть меньше, перестали наедаться до отвала. На третьей фазе эксперимента, когда в загоне были уже сотни мышей, произошло распределение социальных ролей, стала ярко выраженной иерархия, клановость. Появились так называемые отверженные ― молодые особи, которых другие, взрослые мыши сгоняли в центр загона, не давали им вести нормальный образ жизни, причиняли физический вред. В природе такое, наверное, было бы невозможно, ведь эти мыши-агрессоры просто не дожили бы до старости: их бы съели хищники. Но в загоне Кэлхуна хищников не было, и взрослые мыши начали попросту издеваться над молодняком. Образовались две большие группировки: самцы-одиночки и самки-одиночки. При этом самки-одиночки отказывались спариваться <с менее статусными многочисленными молодыми самцами и с оставшимися старыми статусными> и отвергали ухаживания самцов. У мышей стал проявляться тотальный индивидуализм, мыши не стремились создать семью. На последней, четвертой стадии мышиная популяция стала сокращаться. Появились самцы, которых сам Кэлхун назвал «красивыми» (англ. beautiful ones), из-за отсутствия ран и рубцов. <В оригинале: They never engaged in sexual approaches toward females, and they never engaged in fighting, and so they had no wound or scar tissue. Thus their pelage remained in excellent condition. - Дословный перевод: Они никогда не прибегали к сексуальным подходам к самкам, и они никогда не участвовали в боях, и поэтому у них не было ран или рубцовой ткани. Таким образом, их шерсть сохранилась в отличном состоянии.> Эти мыши не вступали в борьбу за самок и территорию, не проявляли активности к размножению и только питались, спали и чистили шёрстку. У мышей стали проявляться различные формы девиантного поведения, вспышки агрессии. Самки стали проявлять агрессию, защищать себя сами, стали умерщвлять своих детенышей, а затем окончательно отказались размножаться. На пике эксперимента в загоне одновременно проживало чуть более двух тыс. мышей. Еды и гнезд было достаточно для дальнейшего роста популяции, но через четыре года после начала эксперимента Кэлхун остановил свой опыт, потому что в загоне осталось чуть более сотни мышей, и все они уже вышли из репродуктивного возраста. По итогам эксперимента Кэлхун пришел к выводу, что достижение определенной плотности населения и заполнение социальных ролей в популяции приводит к распаду общества" https://physicsoflife.pl/dict/pic/calhoun/calhoun.. https://scientificrussia.ru/articles/utopiya-dlya-mys.. https://ru.wikipedia.org/wiki/Кэлхун,_Джон_(этолог)
    • gudstartup
      @Koels вот в чем дело пока ds609 это предупреждение поэтому F может и не появится если sv601 это значит ошибка. возможно при нагреве радиатора серво определяет это как предупреждение или ваш вентилятор крутиться медленнее чем оригинальный и серва думает что он встал хотяпри этом обычно на экране в строке состояния FAN.мигает больше у меня вариантов нет....  
    • ДОБРЯК
      Решите любым алгоритмом. Тогда будет конструктивный разговор. :=)
    • Fedor
      https://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms     :) 
    • Юрий К.Ф.
      Добрый день. Не нашёл тут тему по стойке Китайско Китайской)) Lynuc N3ME. Видать мне так повезло с её наличием)) Приобрели 5-ти осевой Китаец. В б/у состоянии после удара по оси Z. Отремонтировали по механике, заменили батареи на драйверах, выставили лимиты. Всё Ок. Пригласили со стороны людей которые бы разобрались по операторской части. Те два выходных ковырялись, после сказали покажут расскажут, но за огромные деньги. Не сошлись. После месяц станок простоял, когда включили перестал реагировать на регулировку скорости шпинделя. То есть в режиме Jog, включаем обороты, которые стандартно 2140-2149 об/мин. При регулировке процетности не меняются (сама процентность показывает на мониторе). Так же при включении оборотов через команду M03S300 или другое значение, скорость так же показывает 2140-2149 об/мин. Грешить на тех товарищей с которыми не сошлись по деньгам для обучения, как то не хочется. Поковырялся в настройках шпинделя, вроде всё в норме. Проводку на шпинделе прозвонил, целая. В чём причина, не понятна. Кто нибудь сталкивался с подобным, или с подобной стойкой? Может подсказать варианты причины подобного?
    • ДОБРЯК
    • Fedor
      https://en.wikipedia.org/wiki/Eigenvalue_algorithm   Вот , кстати, важное свойство которое раньше встречал у Стренга. :)    http://elibrary.bsu.edu.az/files/kitablar/1022.pdf   
    • ДОБРЯК
      Вы ысё чаще напоминаете телевизор, который случайным образом переключает программы...:=)
    • sssdos
      сочувствую бедности(Дома на ноуте стоит Windows XP С PM 6.). Или другие причины?
×
×
  • Создать...