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

FAQ/Unigraphics/POST


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

Только что, artem-nafanya сказал:

С этим кодом тоже самое((

Совсем думать не хотите)

if { !$bsearch } {

    lappend list_tool $row_tool

} elseif { ![info exists double_tools($row_tool)] } { set double_tools($row_tool) 0 }

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


15 минут назад, lexincton сказал:

Совсем думать не хотите)

if { !$bsearch } {

    lappend list_tool $row_tool

} elseif { ![info exists double_tools($row_tool)] } { set double_tools($row_tool) 0 }

Я уж битый час думаю.

Пока что несколько строчек кода с вложенными командами это неподъёмно, если только не указать, что конкретно тут не так.

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

Я уж битый час думаю.

Пока что несколько строчек кода с вложенными командами это неподъёмно, если только не указать, что конкретно тут не так.

Так тоже не работает? В сообщении же указание на ошибку - [info exists double_tools($row_tool)]  обращение без $ должно быть

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

Так тоже не работает? В сообщении же указание на ошибку - [info exists double_tools($row_tool)]  обращение без $ должно быть

Так ошибку не выдаёт.

Я не понимал, если переменная double_tools объявлена, то не значит что он не может быть с символом $ или без него.

 

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

Благодарность @lexincton

Проверка на одинаковые номера инструментов  

#запись

if { ![info exists list_tool] } { set list_tool {} }
set row_tool $mom_tool_number
set bsearch 0
foreach tool $list_tool {
    if { $tool == $row_tool } {
        set bsearch 1
        break
    }
}
if { !$bsearch } {
    lappend list_tool $row_tool
} elseif { ![info exists double_tools($row_tool)] } { set double_tools($row_tool) 0 }

 

#чтение

foreach number [array names double_tools]  {
MOM_display_message "ОБНАРУЖЕНЫ ОДИНАКОВЫЕ НОМЕРА ИНСТРУМЕНТОВ T$number"
}

Hide  

 

В итоге рабочий код для проверки одинаковых номеров инструментов выглядит так:

часть #запись поместил в

часть #чтение в репроцесс в завершении программы. Если весь код поместить в "автоматическую смену инструмента", то почему-то дважды выводит одно и тоже сообщение.

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

@lexincton

Объединил преимущества первого и второго вариант кода для формирования и вывода списка инструментов.

 

Показать содержимое  

1) В событии начала программы инициируем массив, в который будем собирать необходимую информацию о применяемом инструменте:

global array_tool_name
global tool_index_max

set tool_index_max ""

for {set i 1} {$i<=$tool_index_max} {incr i} {
set array_tool_name($i) ""
}

 

2) В событии начало программы добавляем команду пользователя:

 

global mom_tool_adjust_register
global mom_tool_number
global list_tool

#НАПОЛНЕНИЕ МАССИВА ДАННЫМИ
set tool_data "; T$mom_tool_number / D$mom_tool_adjust_register"

if { ![info exists list_tool] } { set list_tool {} }
set row_tool $tool_data
set bsearch 0
foreach tool $list_tool {
    if { $tool == $row_tool } {
        set bsearch 1
        break
    }
}
if { !$bsearch } { lappend list_tool $row_tool }

 

 

3) В событии конца программы добавляем команду:

 

global list_tool
global ptp_file_name

#НАЧАЛО РЕПРОЦЕССА
set tmp_file_name "${ptp_file_name}_"

if {[file exists $tmp_file_name]} {
MOM_remove_file $tmp_file_name
}

MOM_close_output_file $ptp_file_name
file rename $ptp_file_name $tmp_file_name
set ifile [open $tmp_file_name r]
set ofile [open $ptp_file_name w]


set buf ""
#ВЫВОД СОДЕРЖИМОГО МАССИВА С ПОМОЩЬЮ ЦИКЛА
foreach number [lsort -ascii $list_tool] {
        puts $ofile $number
}
#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП
while { [gets $ifile buf] > 0 } {
       puts $ofile $buf}

close $ifile
close $ofile

MOM_remove_file $tmp_file_name
MOM_open_output_file $ptp_file_name

Hide  

Будет выводить список в таком формате:

Показать содержимое  

; T2 / D1
; T3 / D1
; T3 / D2
; T6 / D1

Hide  
Правда нумерацию кадров сюда "прикрутить" не удалось.
Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, artem-nafanya сказал:

Правда нумерацию кадров сюда "прикрутить" не удалось.

mom_seqnum

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

mom_seqnum

Если добавить сюда:

set tool_data "$mom_seqnum ;T$mom_tool_number / D$mom_tool_adjust_register"

То выводит так:

160 ;T2 / D1
250 ;T2 / D1
390 ;T6 / D1
40. ;T2 / D1
550. ;T3 / D1
640. ;T3 / D2

 

Если добавить сюда:

foreach number [lsort -ascii $list_tool] {
puts $ofile "$mom_seqnum $number"
}

То выводит так:

710 ;T2 / D1
710 ;T2 / D1
710 ;T6 / D1
710 ;T2 / D1
710 ;T3 / D1
710 ;T3 / D2

 

Надо чтобы было так:

100 ;T2 / D1
110 ;T2 / D1
120 ;T6 / D1
130 ;T2 / D1
140 ;T3 / D1
150 ;T3 / D2

А дальнейшие кадры УП начинались со 160 или иного номера кадра, на котором закончится нумерация массива с инструментами.

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

А дальнейшие кадры УП начинались со 160 или иного номера кадра, на котором закончится нумерация массива с инструментами.

Если это Fanuc или Siemens, то можно номера кадров не указывать. Или вы уже очень серьёзно настроены победить неправильную нумерацию?:smile: Как вариант, можно сначала постпроцессировать программу без нумерации кадров, а в конце написать процедуру, которая уже, вашу полностью готовую программу со всеми добавлениями, пронумерует.

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

Если это Fanuc или Siemens, то можно номера кадров не указывать. Или вы уже очень серьёзно настроены победить неправильную нумерацию?:smile: Как вариант, можно сначала постпроцессировать программу без нумерации кадров, а в конце написать процедуру, которая уже, вашу полностью готовую программу со всеми добавлениями, пронумерует.

Да, в принципе оно и так работает на станке. Просто будет подряд несколько кадров с одинаковыми номерами.

Интересно как это можно реализовать, ведь в советском постпроцессоре это как-то сделали, неужели сейчас сложнее или раньше трава была зеленее и программисты сильнее))

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

Интересно как это можно реализовать, ведь в советском постпроцессоре это как-то сделали, неужели сейчас сложнее или раньше трава была зеленее и программисты сильнее))

Как это реализовать @vicebear написал, вот реализация:

 

#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП

global mom_sys_seqnum_start mom_sys_seqnum_incr

set mom_seqnum $mom_sys_seqnum_start

while { [gets $ifile buf] > 0 } {
       puts $ofile "N$mom_seqnum $buf"

       incr mom_seqnum  $mom_sys_seqnum_incr

}
close $ifile
close $ofile

 

Соотв-но в программе выключить нумерацию

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

Эх, а кто же мне поможет с моей трансформацией и вообще с этими расчетами координат. Уж больно "тонкий" этот слой, что в упор не вижу. Печаль...

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

Эх, а кто же мне поможет с моей трансформацией и вообще с этими расчетами координат. Уж больно "тонкий" этот слой, что в упор не вижу. Печаль...

Почитайте для начала про переменные mom_kin_* и переменные mom_*_matrix.

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

Как это реализовать @vicebear написал, вот реализация:

 

Показать содержимое  

#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП

global mom_sys_seqnum_start mom_sys_seqnum_incr

set mom_seqnum $mom_sys_seqnum_start

while { [gets $ifile buf] > 0 } {
       puts $ofile "N$mom_seqnum $buf"

       incr mom_seqnum  $mom_sys_seqnum_incr

}
close $ifile
close $ofile

MOM_remove_file $tmp_file_name
MOM_open_output_file $ptp_file_name

Соотв-но в программе выключить нумерацию

Hide  

Способ хорош и работает, но он нумерует "#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП", с нумерацией которой всё в порядке. Надо чтобы нумеровал только одну строку в массиве "2)" как описано выше.

Изменено пользователем artem-nafanya
Ссылка на сообщение
Поделиться на других сайтах
48 минут назад, artem-nafanya сказал:

Способ хорош и работает, но он нумерует "#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП", с нумерацией которой всё в порядке. Надо чтобы нумеровал только одну строку в массиве "2)" как описано выше.

global mom_sys_seqnum_start mom_sys_seqnum_incr
set mom_seqnum $mom_sys_seqnum_start

 

#ВЫВОД СОДЕРЖИМОГО МАССИВА С ПОМОЩЬЮ ЦИКЛА
foreach number [lsort -ascii $list_tool] {
        puts $ofile "N$mom_seqnum $number"

        incr mom_seqnum  $mom_sys_seqnum_incr
}
#ВЫВОД ОСТАЛЬНОЙ ЧАСТИ УП
while { [gets $ifile buf] > 0 } {
       puts $ofile "N$mom_seqnum $buf"

       incr mom_seqnum  $mom_sys_seqnum_incr

}

close $ifile
close $ofile

MOM_remove_file $tmp_file_name
MOM_open_output_file $ptp_file_name

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

Как сделать что бы нумеровалась только вторая строчка из массива, а не первая?

18 минут назад, lexincton сказал:

#ВЫВОД СОДЕРЖИМОГО МАССИВА С ПОМОЩЬЮ ЦИКЛА
foreach number [lsort -ascii $list_tool] {
        puts $ofile "N$mom_seqnum $number"

        incr mom_seqnum  $mom_sys_seqnum_incr
}

Изменено пользователем artem-nafanya
Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, artem-nafanya сказал:

Как сделать что бы нумеровалась только вторая строчка из массива, а не первая?

#ВЫВОД СОДЕРЖИМОГО МАССИВА С ПОМОЩЬЮ ЦИКЛА

set i 1
foreach number [lsort -ascii $list_tool] {

        set seq_temp ""

        if { $i < 2 } {                

                incr i

        } else {

                set seq_temp "N$mom_seqnum " 

                set i 1

                incr mom_seqnum  $mom_sys_seqnum_incr

        }
        puts $ofile "$seq_temp$number"       
}

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

#ВЫВОД СОДЕРЖИМОГО МАССИВА С ПОМОЩЬЮ ЦИКЛА

Показать содержимое  

set i 1
foreach number [lsort -ascii $list_tool] {

        set seq_temp ""

        if { $i < 2 } {                

                incr i

        } else {

                set seq_temp "N$mom_seqnum " 

                set i 1

                incr mom_seqnum  $mom_sys_seqnum_incr

        }
        puts $ofile "$seq_temp$number"       
}

Hide  

Нумеруется так же первая строка, но теперь через одно значение массива. 

Пример:  

T2

D1

;
N10 T2

D1

;
T6

D1

;

N20 T6

D1

;

T7

D1

;

N20 T3

D1

Hide  
Изменено пользователем artem-nafanya
Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, artem-nafanya сказал:

Нумеруется так же первая строка, но теперь через одно значение массива

Про какую строку речь?

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

Про какую строку речь?

В примере выше строка с индексом "T".

 

Надо что бы было так
 

T2
N10 D1
;
T2
N20 D1
;
T6
N30 D1
;
N40 T6
D1
;
N50 T7
D1
;
N60 T3
D1

Hide  
Ссылка на сообщение
Поделиться на других сайтах
  • SHARit закрепил это тему

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

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

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

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

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

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

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

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

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

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




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