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.



  • Сообщения

    • soklakov
      потому что без конвекции) по телопроводности воздух - один из лучших изоляторов. в базальтовой вате изолирует не базальт, а воздух. базальт просто не горит, а вата мешает воздуху заниматься конвективным теплообменом.
    • MotorManiac
      Так то забавные результаты получились у автора, циркуляции нет из-за отсутствия градиента температур, гидростатика дает разную Т газа возле пода-свода, тогда нужно учитывать не среднюю Т , а минимальную - около пода.
    • karachun
      Сделал следующую итерацию - добавил объем воздуха твердым телом с к-том теплопроводности 0.018 и задал 40 Вт мощности на весь объем воздуха. И получилось не очень - температура в центре достигает 350 градусов. @soklakov Но эта конструкция может быть единичной и там не будет жестких требований к расходу провода или электричества. Я бы вообще постарался обвить обогреваемое оборудование этим проводом (тм же не просто воздух а какая-нибудь электроника). Если этот прибор значительно меньше самой коробки то нужно поддерживать постоянную температуру только вокруг прибора. Поставить прибор на ножки, обмотать поводом и закрыть кожухом, чтобы уменьшить конвективный теплообмен.  
    • soklakov
      однажды десятиклассники собрали проект с тепловым расчетом, в котором, в общем-то решалась линейная  задача теплопроводности многослойной стенки. кому-то хватило участка 1*1м2, а кто-то построил целое здание со всеми стенами. первые получали решение, само собой, быстрее, просто умножая на площадь всех стен, вторые решали медленнее и были точнее. но все параметризовали проект, в качестве выходных параметров была стоимость постройки, отталкиваясь от стоимости материалов стенки и их толщин, а также стоимость владения - сформированная исходя из мощности обогрева, потребной для поддержания +18 внутри дома, когда холодной зимой за бортом в -55. занятие длилось четыре часа, к концу все справились с заданием. а те, что рисовали целый дом, подрисовали туда еще один стальной болтик М8, идущий сквозь стену и создающий, тем самым, тепловой мостик - и узнали, как изменяется стоимость владения из-за одного неверно выполненного болта. точных цифр не помню, но было обидно дорого. Это Вам не нужна, а у ТС ограничение 190 С.
    • eliseyi@mail.ru
      координаты Е нету то есть не нужна только X Y Z MPCNC станок для хобби, прошивка Marlin 2.0.x alpha snapshot удобна тем, что вся электроника стоит копейки и печатать можно с Флешки https://3deshnik.ru/wiki/index.php/G-коды
    • karachun
      @soklakov Та нам же нужна средняя температура воздуха а не температура нагревателя.
    • soklakov
      в такой матмодели и нет места излучению. но нет и температуры нагревателя.
    • Neuvic
      Вопрос закрыт , спасибо большое lexa345 
    • Pavel_AMD
      190 градусов, но там все равно термостат будет регулировать температуру
    • karachun
      Немного изменил методику, теперь учитываю альфа внутри - 8 и альфа снаружи 20 и беру площадь как среднюю между площадью внутренней и внешней стенки. Для температуры воздуха внутри 0 градусов надо ~43,9 Вт. Посчитал эту же задачу в МКЭ, одну восьмушку и получил мощность ~33,5 Вт. Результаты по аналитике завышают мощность на 30%.