VicktorVR

Расчет времени(Timing) при генерации программы

Pinned posts

ID: 1   Posted

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

 

переменные в .gpp вроде описал и инициализировал:

 

    global numeric time_factor block_time  change_tool_time

    global logical calc_job_time


    time_factor=1
    block_time=0
    change_tool_time=20
    calc_job_time=TRUE

 

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

Share this post


Link to post
Share on other sites


UnPinned posts

ID: 2   Posted

У меня так:

@MSG

      if msg ne '' and msg ne ' '
          {nl,'MSG(" 'upper(msg)' ")'}
     endif

      if job_time eq ''
          {' '}
       else
          {nl,'MSG(" JOB TIME:'job_time' ")'}
     endif

ENDP

 

1 person likes this

Share this post


Link to post
Share on other sites

ID: 3   Posted

Т.е. job_time - это и есть тот самый адрес, по которому солид записывает время обработки?

 

Спасибо! Попробую.

К сожалению не понял, зачем отдельная функция...

 

Попробовал по простому:

Цитата

{nl,'; JOB TIME:'job_time' '}

результат:

Цитата

; JOB TIME:

Такое впечатление, что по адресу job_time ничего нет, причем сам адрес вроде как есть, иначе солид бы заругался на неопределенную переменную...

 

Объясните, пожалуйста, что не так?

Share this post


Link to post
Share on other sites

ID: 4   Posted (edited)

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

Т.е. job_time - это и есть тот самый адрес, по которому солид записывает время обработки?

 

Спасибо! Попробую.

К сожалению не понял, зачем отдельная функция...

 

Попробовал по простому:

результат:

Такое впечатление, что по адресу job_time ничего нет, причем сам адрес вроде как есть, иначе солид бы заругался на неопределенную переменную...

 

Объясните, пожалуйста, что не так?

 

{nb, cCb,job_name,job_time,cCe}

 

вот так описано у меня. Если я генерирую траекторию без времени обработки то ячейка job_time будет пустая. получу (F-contour2)

Если генерировать траекторию со временем обработки - соответственно получу (F-contour2  0:00:56)

 

Через trace можно также отследить переменную tool_work_time но она также работает только если генерировать с временем.

 

 

Edited by Ishimtcev
1 person likes this

Share this post


Link to post
Share on other sites

ID: 5   Posted

Вот спасибо, ваш ответ направил меня в нужную сторону.

 

Параметр/ячейка  job_time относится к отдельному переходу, соотв. и работать с ним надо в переходе(я затолкал в @start_of_job и все заработало).

В принципе не сложно складывать все длительности переходов в "аккумулятор" - переменную и в конце программы вывести общую длительность обработки всеми инструментами по всем переходам. А как (автоматически) вывести ее в начале программы? Я так понимаю при генерировании "шапки" переходы еще не рассчитаны и соотв. данных о времени нет.

Share this post


Link to post
Share on other sites

ID: 6   Posted (edited)

13 минуты назад, VicktorVR сказал:

Вот спасибо, ваш ответ направил меня в нужную сторону.

 

Параметр/ячейка  job_time относится к отдельному переходу, соотв. и работать с ним надо в переходе(я затолкал в @start_of_job и все заработало).

В принципе не сложно складывать все длительности переходов в "аккумулятор" - переменную и в конце программы вывести общую длительность обработки всеми инструментами по всем переходам. А как (автоматически) вывести ее в начале программы? Я так понимаю при генерировании "шапки" переходы еще не рассчитаны и соотв. данных о времени нет.

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

 

1. Подменный цикл Без вывода кадров.

2. Шапка

3. Вывод времени с подменного цикла

3. Цикл генерации траектории в УП

 

Это Вдвое увеличит по объему ваш файл пост процессора

 

 

Edited by Ishimtcev

Share this post


Link to post
Share on other sites

ID: 7   Posted

Эх, не все так просто, time_job похоже строка, надо сначала из нее часы, минуты, секунды выделить...

5 минут назад, Ishimtcev сказал:

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

 

1. Подменный цикл Без вывода кадров.

2. Шапка

3. Вывод времени с подменного цикла

3. Цикл генерации траектории в УП

 

 

 

 

Т.е. как бы два раза сгенерировать УП, при это первый раз только для расчета времени? Спасибо, и так попробую.

Share this post


Link to post
Share on other sites

ID: 8   Posted

2 минуты назад, VicktorVR сказал:

Эх, не все так просто, time_job похоже строка, надо сначала из нее часы, минуты, секунды выделить...

Т.е. как бы два раза сгенерировать УП, при это первый раз только для расчета времени? Спасибо, и так попробую.

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

Share this post


Link to post
Share on other sites

ID: 9   Posted

Резервные копии само-собой, еще и архивы дома и на почте :).

 

Пока путь с выделением из строки часов и минут(секунды не критичны), преобразованием их в числа и складыванием в "аккумулятор" мне кажется проще.

Share this post


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

Резервные копии само-собой, еще и архивы дома и на почте :).

 

Пока путь с выделением из строки часов и минут(секунды не критичны), преобразованием их в числа и складыванием в "аккумулятор" мне кажется проще.

Screenshot_18.thumb.png.bdb725784523caf996954aec7b43332b.png

 

зачем вам аккумулятор?

Share this post


Link to post
Share on other sites

А общее время все программы из 3-5-10 инструментов?

 

Понятно, что можно просто в симуляторе в солиде прогнать, но ведь 12 век, хочется чтоб само считало :)

Share this post


Link to post
Share on other sites

21 конечно :(

 

Между делом победил расчет, есть подозрение, что изобрел велосипед, к тому же трехколесный, но главное работает:

 

Цитата

;  JOB TIMING - РАСЧЕТ ВРЕМЕНИ ПЕРЕХОДА
 if job_time eq ''
          {' '}
       else
;          {nl,'; JOB TIME:' job_time' '}

; удаляем двоеточия
time_str = replace(job_time, ":", "", 0)
 ;{nl,'; TIME STR:' time_str' '}

;обрезаем минуты от часов и секунд
m_str=right(time_str, 4)
m_str=left(m_str, 2)
minutes=tonum(m_str)
; {nl,'; M STR:' m_str' '}
; {nl,'; MINUTES:'minutes' '}
;обрезаем часы
H_str=left(time_str, 3)
hours=tonum(h_str)
 ;{nl,'; H STR:' h_str' '}
 ;{nl,'; HOURS:'hours' '}
minutes_job=minutes+hours*60
; {nl,'; MINUTES_JOB:'minutes_job' '}
total_time = total_time + minutes_job
     endif

При смене инструмента добавляется еще минута, и результат выводится в конце программы. Хотелось бы в начале, но это уже выше моего понимания :).

 

Почему-то время из визуализации/симуляции немного (6 минут на 500) не совпадает с тем, что считается при генерации программы, ну и ладно, не критично.

 

Всем еще раз спасибо.

1 person likes this

Share this post


Link to post
Share on other sites

Для того чтобы выводить время в начале программы можно воспользоваться файловыми командами (File Commands).

Разделить вывод постпроцесора на три части (три файла) например (ну или больше по необходимости), 1 - все что до расчетного машинного времяни, 2 - само расчетное время и 3 - все что после.

И потом собрать их в правильном порядке.

 

пример из поста:

    { '!! open file = header1 !!' }
    ...
    {nl, '!! close file = header1 !!' }
    {nl, '!! open file = tool_header !!' }

    ...

    {nl, '!! close file = tool_header !!' }
    {nl, '!! open file = header2 !!' }

    ...

   {nl, '!! close file = header2 !!' }

    {nl, '!! open file = body !!' }

    ...

и тд

 

а в конце собираем

 

@end_of_file

    {nl, '!! close file = body !!' }
     ...
    {nl, '!! open file =' W_file_name, '.NC !!' }

    {nl, '!! copy file = header1 !!' }
    {nl, '!! copy file = header2 !!' }
    {nl, '!! copy file = tool_header !!' }
    {nl, '!! copy file = body !!' }
    {nl, '!! delete file = header1 !!' }
    {nl, '!! delete file = header2 !!' }
    {nl, '!! delete file = tool_header !!' }
    {nl, '!! delete file = body !!' }
endp

 

принцип такой

 

и таким образом можно перемещать любые части кода в нужное место программы

 

 

1 person likes this

Share this post


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

Для того чтобы выводить время в начале программы можно воспользоваться файловыми командами (File Commands).

Разделить вывод постпроцесора на три части (три файла) например (ну или больше по необходимости), 1 - все что до расчетного машинного времяни, 2 - само расчетное время и 3 - все что после.

И потом собрать их в правильном порядке.

 

пример из поста:

    { '!! open file = header1 !!' }
    ...
    {nl, '!! close file = header1 !!' }
    {nl, '!! open file = tool_header !!' }

    ...

    {nl, '!! close file = tool_header !!' }
    {nl, '!! open file = header2 !!' }

    ...

   {nl, '!! close file = header2 !!' }

    {nl, '!! open file = body !!' }

    ...

и тд

 

а в конце собираем

 

@end_of_file

    {nl, '!! close file = body !!' }
     ...
    {nl, '!! open file =' W_file_name, '.NC !!' }

    {nl, '!! copy file = header1 !!' }
    {nl, '!! copy file = header2 !!' }
    {nl, '!! copy file = tool_header !!' }
    {nl, '!! copy file = body !!' }
    {nl, '!! delete file = header1 !!' }
    {nl, '!! delete file = header2 !!' }
    {nl, '!! delete file = tool_header !!' }
    {nl, '!! delete file = body !!' }
endp

 

принцип такой

 

и таким образом можно перемещать любые части кода в нужное место программы

 

 

можно живой пример

Share this post


Link to post
Share on other sites
18 часов назад, NickEL1000 сказал:

можно живой пример

Поддержу, очень интересно как это реализуется

Share this post


Link to post
Share on other sites

@init_post
    ...

    global string W_file_name
    global integer total_time
    global logical UFlag<<30>>
    ...
    total_time      = 0
    UFlag<<2>>      = false   ; --==  Calculate job time Flag  ==--
    ...
endp

 

@start_of_file
    local numeric file_leng
    { '!! open file = header0 !!' }
    file_leng = strlen(g_file_name) - 4
    W_file_name = left(g_file_name,file_leng)
       ; before tools definition
    {nl, '%'}
    {nl, 'O'(program_number-index_split_file+1), ' (', W_file_name, ')'}
    local string hr,min,sec
    hr = left(time, 2)
    min = substr(time,4,2)
    sec = substr(time,7,2)
    {nl, '(DATE#'date, ' TIME#'hr,'-'min,'-'sec, ')'}
    {nl, '( GENERATED BY 'upper(user_account), ' )'}
    {nb, '(SUBROUTINES# O'first_proc_number, ' .. O'last_proc_number, ')'}
    if home_number gt 6
        {nb, '( --== MAIN HOME G54 P'(home_number - 6), ' ==-- )'}
    else
        {nb, '( --== MAIN HOME G'(53 + home_number), ' ==-- )'}
    endif
    {nl, '!! close file = header0 !!' }    
    {nl, '!! open file = header1 !!' }
    if rotate_used then
        gcode = 69
        {nb, 'G'gcode}
    endif
    {nb, 'G49 G40 G0 G80 G90 G94'}
    ...
    {nl, '!! close file = header1 !!' }
    {nl, '!! open file = tool_header !!' }
endp

 

@start_program
    {nl, '!! close file = tool_header !!' }
    ....
    {nl, '!! open file = body !!' }
endp

 

@end_of_file
    ...
    {nl, '%'}
    {nl, '!! close file = body !!' }
    {nl, '!! open file = header0 !!' }

    local integer hr min
    hr  = 0
    min = 0
    
    while total_time >= 3600
       hr = hr + 1
       total_time = total_time - 3600
    endw
    while total_time >= 60
       min = min + 1
       total_time = total_time - 60
    endw    

    {nl,  '( --== TOTAL TIME# ', tostr(hr:'z2.0(p)'), '-', tostr(min:'z2.0(p)'), '-', tostr(total_time:'z2.0(p)'),  ' ==-- )'}
    
    {nl, '!! close file = header0 !!' }
    {nl, '!! open file =' W_file_name, '.NC !!' }
    {nl, '!! copy file = header0 !!' }
    {nl, '!! copy file = header1 !!' }
    {nl, '!! copy file = tool_header !!' }
    {nl, '!! copy file = body !!' }
    {nl, '!! delete file = header0 !!' }
    {nl, '!! delete file = header1 !!' }
    {nl, '!! delete file = tool_header !!' }
    {nl, '!! delete file = body !!' }
endp

 

@call_proc
    ...

    {nb, 'M98 P'label}

    {' ('upper(message)}
    
   if job_time <> ''
        UFlag<<2>> = true
        call @calc_job_time
        {')'}
        UFlag<<2>> = false
    else
        {')'}
    endif

    ....

endp

 

@start_of_job
    if job_time <> ''
        {nl, ' ('}
        call @calc_job_time
        {')'}
    endif
...
endp

 

@calc_job_time

    local integer seconds_job
    local string hr,min,sec
    
    hr = left(job_time, strlen(job_time)-6)
    min = substr(job_time,strlen(job_time)-4, 2)
    sec = right(job_time, 2)
    seconds_job = tonum(sec) + (tonum(min)*60) + (tonum(hr)*3600)
    if UFlag<<2>>
        total_time = total_time + seconds_job
    endif
    if !UFlag<<2>>
        {'JOB TIME#'}
    endif
    {hr,'-'min,'-'sec}
endp

 

@change_tool
    total_time = total_time + 10

    ....

endp

 

Наваяла под фанук

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

 

1f7fffcb8f56527766ad3f20e7752a9c.jpeg

 

87c0bc00c8b00d452a9227c1bac6755f.jpeg

 

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

 

 

4 people like this

Share this post


Link to post
Share on other sites
8 часов назад, Carmen сказал:

@init_post
    ...

    global string W_file_name
    global integer total_time
    global logical UFlag<<30>>
    ...
    total_time      = 0
    UFlag<<2>>      = false   ; --==  Calculate job time Flag  ==--
    ...
endp

 

@start_of_file
    local numeric file_leng
    { '!! open file = header0 !!' }
    file_leng = strlen(g_file_name) - 4
    W_file_name = left(g_file_name,file_leng)
       ; before tools definition
    {nl, '%'}
    {nl, 'O'(program_number-index_split_file+1), ' (', W_file_name, ')'}
    local string hr,min,sec
    hr = left(time, 2)
    min = substr(time,4,2)
    sec = substr(time,7,2)
    {nl, '(DATE#'date, ' TIME#'hr,'-'min,'-'sec, ')'}
    {nl, '( GENERATED BY 'upper(user_account), ' )'}
    {nb, '(SUBROUTINES# O'first_proc_number, ' .. O'last_proc_number, ')'}
    if home_number gt 6
        {nb, '( --== MAIN HOME G54 P'(home_number - 6), ' ==-- )'}
    else
        {nb, '( --== MAIN HOME G'(53 + home_number), ' ==-- )'}
    endif
    {nl, '!! close file = header0 !!' }    
    {nl, '!! open file = header1 !!' }
    if rotate_used then
        gcode = 69
        {nb, 'G'gcode}
    endif
    {nb, 'G49 G40 G0 G80 G90 G94'}
    ...
    {nl, '!! close file = header1 !!' }
    {nl, '!! open file = tool_header !!' }
endp

 

@start_program
    {nl, '!! close file = tool_header !!' }
    ....
    {nl, '!! open file = body !!' }
endp

 

@end_of_file
    ...
    {nl, '%'}
    {nl, '!! close file = body !!' }
    {nl, '!! open file = header0 !!' }

    local integer hr min
    hr  = 0
    min = 0
    
    while total_time >= 3600
       hr = hr + 1
       total_time = total_time - 3600
    endw
    while total_time >= 60
       min = min + 1
       total_time = total_time - 60
    endw    

    {nl,  '( --== TOTAL TIME# ', tostr(hr:'z2.0(p)'), '-', tostr(min:'z2.0(p)'), '-', tostr(total_time:'z2.0(p)'),  ' ==-- )'}
    
    {nl, '!! close file = header0 !!' }
    {nl, '!! open file =' W_file_name, '.NC !!' }
    {nl, '!! copy file = header0 !!' }
    {nl, '!! copy file = header1 !!' }
    {nl, '!! copy file = tool_header !!' }
    {nl, '!! copy file = body !!' }
    {nl, '!! delete file = header0 !!' }
    {nl, '!! delete file = header1 !!' }
    {nl, '!! delete file = tool_header !!' }
    {nl, '!! delete file = body !!' }
endp

 

@call_proc
    ...

    {nb, 'M98 P'label}

    {' ('upper(message)}
    
   if job_time <> ''
        UFlag<<2>> = true
        call @calc_job_time
        {')'}
        UFlag<<2>> = false
    else
        {')'}
    endif

    ....

endp

 

@start_of_job
    if job_time <> ''
        {nl, ' ('}
        call @calc_job_time
        {')'}
    endif
...
endp

 

@calc_job_time

    local integer seconds_job
    local string hr,min,sec
    
    hr = left(job_time, strlen(job_time)-6)
    min = substr(job_time,strlen(job_time)-4, 2)
    sec = right(job_time, 2)
    seconds_job = tonum(sec) + (tonum(min)*60) + (tonum(hr)*3600)
    if UFlag<<2>>
        total_time = total_time + seconds_job
    endif
    if !UFlag<<2>>
        {'JOB TIME#'}
    endif
    {hr,'-'min,'-'sec}
endp

 

@change_tool
    total_time = total_time + 10

    ....

endp

 

Наваяла под фанук

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

 

1f7fffcb8f56527766ad3f20e7752a9c.jpeg

 

87c0bc00c8b00d452a9227c1bac6755f.jpeg

 

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

 

 

шикарно, век живи - век учись

open file - close file можно сделать параллельными/вложенными потоками в разные части, или пока один кусок не закроешь второй не открыть?

Share this post


Link to post
Share on other sites
11 час назад, NickEL1000 сказал:

шикарно, век живи - век учись

 

Ученье свет! =)

20 часов назад, Carmen сказал:

 

Наваяла под фанук

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

 

 

 

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

 

 

 

@Carmen  Спасибо вам! Очень полезно.

 

А у вас случаем опыт по добавлению процедур измерения в пост нет?..

Share this post


Link to post
Share on other sites
В 6/26/2019 в 23:50, NickEL1000 сказал:

open file - close file можно сделать параллельными/вложенными потоками в разные части, или пока один кусок не закроешь второй не открыть?

Я думаю можно и не закрывать, он сам закрывает файл, когда открываешь следующий. Это я для себя писала, для феншуя :)

Потоков пока нет, насколько я понимаю.

 

В 6/27/2019 в 11:24, Ishimtcev сказал:

А у вас случаем опыт по добавлению процедур измерения в пост нет?..

Ничего сложного в этом нет.

 

Share this post


Link to post
Share on other sites

ID: 21   Posted

@Carmen  Здравствуйте, можно вас попросить немного разъяснить работу с процедурами  т.к. у меня не получается при включении процедур при генерации кода выдает сообщение что надо обратно отключить процедуры не нет и при трассировке никаких доп. операторов не появляется (@LOOP)    

Безымянный.jpg

222.jpg

Share this post


Link to post
Share on other sites

ID: 22   Posted

2 часа назад, Povar1 сказал:

Здравствуйте, можно вас попросить немного разъяснить работу с процедурами  т.к. у меня не получается при включении процедур при генерации кода выдает сообщение что надо обратно отключить процедуры не нет и при трассировке никаких доп. операторов не появляется (@LOOP)    

 

 

Чтобы такой ошибки не было и появились подпрограммы в файле уп, надо отключить в файле станка трансформацию программы.

Структура программы => Стандартная => Трансформация программы -- поставить Нет.

2 people like this

Share this post


Link to post
Share on other sites

ID: 23   Posted

@Povar1 Не совсем по теме топика

 

fa2e386ea7a2428d12a67292cbdbeb8b.jpeg

2 people like this

Share this post


Link to post
Share on other sites

ID: 24   Posted

26 минут назад, Carmen сказал:

Не совсем по теме топика

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • FrezerAST
      А ведь эти люди порой возглавляют отделы, заводы и даже страны. Страшновато знаете ли на улицу выходить. Попадется на встречу такой "спаситель России"  и начнёт меня "уму разуму" учить
    • GS
      ======== В сериале "Новый папа" в качестве папамобиля "снялся" УАЗ https://rg.ru/2019/03/29/reg-pfo/v-seriale-novyj-papa-v-kachestve-papamobilia-snialsia-uaz.html
    • O_Dandy
      Я делаю по другому. Делаю деталь из сварных профилей. Если нужно просто сделать чертеж с деталировкой сколько и какой длины нарезать трубы - на листе чертежа:   Вставка - таблица - список вырезов сварного изделия причем я выбираю cut list.sldwldtbt (а не предлагаемый weldtable-standard.sldwldtbt). см ниже В таблице выделяя столбцы можешь изменять их тип и описание (на панели слева) Причем рекомендую использовать профиля  от LeninSW : Квадратная труба ГОСТ 8639-82 и Прямоугольная труба ГОСТ 8645-68 там адекватно заполнены свойства   Если нужно делать деталировку отдельно каждой/некоторых труб и тем более если потом еще и вставляешь потом в другую сборку, то лучше из готовой детали сварных профилей (с сделанными отверстиями в некоторых трубах) создать сборку: (см скрин)   Далее тебе придется потренироваться, потому как внятного хелпа по этому разделу я не нашел.   У меня в (2016 солиде)  обязательно сначала нужно указать название и путь сохранения сборки, потом выбрать все элементы и присвоить им имена (или автоназначение имен). В резульате у тебя будет деталь с рамой - потом зависимая от этой детали сборка и соответственно детали этой сборки.  Само собой если тебе нужно что-то поменять в сварной раме ты меняешь деталь-родитель самой сборки - сама сборка и детали этой сборки меняются автоматом.    !! Важно Обязательно должны стоять галочки Создать список вырезов автоматически и Обновлять автоматически (см скрин).   Будут вопросы - пиши     cut list.sldwldtbt
    • Guhl
      если вы его вынули сфоткали и вставили в течение 30 мин, то данные сохранятся, так как там есть ионисторы на платах.
    • mannul
      @leex Можно использовать только кривые, без модели. Шаблон это и есть кривая, нарисованная, сгенерированная, взятая из модели или загруженная из файла. Я сначала вас вообще не так понял, думал вы хотите выборку внутри сделать, а потом стенки у букв прямые. Для плавного перемещения инструмента по поверхностям(если я вас правильно понял) подходят проекционные стратегии.
    • Pavel P.V.
      Кому на калым, кто действительно ищет нормальный продукт за приемлемую цену) нам не жалко)))) пусть попробуют все. во всяком случае за продукт не стыдно. 
    • Anat2015
      Так тут надо головой напрягаться, время тратить. Тут молодых искать надо, горячих.
    • Елена
      Очень редко, рекомендации из интернета. На всякий случай запомните. Лет через 20 может пригодиться.
    • chatjokey
      лично я не удивлен, что вы еще и малышеву смотрите.   
    • Гранник
      Какие такие патиссоны? Г. Малахов советовал только оздоровительные огурцы! Турта, в вашем возрасте, это важно! Хотяяя... на счет кабачков, тоже подумайте...