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

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


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

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

 

переменные в .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

 

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

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


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

 

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

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

 

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

Цитата

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

результат:

Цитата

; JOB TIME:

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

 

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

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

 

 

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

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

 

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

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

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

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

 

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

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

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

 

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

2. Шапка

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

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

 

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

 

 

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

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

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

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

 

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

2. Шапка

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

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

 

 

 

 

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

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

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

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

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

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

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

 

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

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

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

 

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

Screenshot_18.thumb.png.bdb725784523caf996954aec7b43332b.png

 

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

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

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

 

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

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

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) не совпадает с тем, что считается при генерации программы, ну и ладно, не критично.

 

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

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

Для того чтобы выводить время в начале программы можно воспользоваться файловыми командами (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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

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

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

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

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

@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

 

 

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

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

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

 

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

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

 

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

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

 

 

 

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

 

 

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах
В 6/26/2019 в 23:50, NickEL1000 сказал:

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

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

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

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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




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