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

Расчет времени(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 пользователей

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




  • Сообщения

    • Viktor2004
      На руке Marpos привод электромоторчик
    • pps270391
      Требуется чтобы при назначении материалов, данные автоматически записывались в строки: - Заготовка - Типоразмер - Материал (для материала уже существует автоматическая команда "SW-Material@@По умолчанию@"наименование модели".SLDPRT", которая записывается автоматически) Есть ли возможность, чтобы в модель записывались остальные строки, с учетом доработки материалов. Я так понимаю доработка свойств материала делается как на предоставленном фото
    • Anat2015
      Привод наверное пневматика, вручную клапана нажимать.
    • Limon2986
    • scrimline
      А возьми в учëт тот факт что рука уже сорвалась с места, датчик нагрузки сработал и выключил привод руки. Соответственно рука то уже может нормально функционировать, просто необходимо запусть еë принудительно, проблема в том что я не знаю как это сделать. 
    • andrey2147
      Конечно, раскоксовать поможет форум.
    • Guhl
      Есть вот такие штуки. Если не лень, то можете на оптопарах hcpl спаять самому На плк простая программа с высокоскоростным счетчиком  Как вариант, по прерываню от нуль метки переписывать значенин счетчика в регистр     А фанук сам не умеет разве в диагностике показывать количество импульсов, которые насчитал?
    • gudstartup
      это как например у датчика уровни ttl какой плк работает с ttl уровнями а если уж проверять то нужен тестер сигналов например lir 590 но надо жгут изготавливать и разъем который на аi приводах стоит для энкодера проще всего проверить заменой датчика только вот со сроками покупки беда  хотя может шестерня виновата??
    • scrimline
      Сомневаюсь что попало что-то, скорее всего оператор который работал до меня этой рукой не пользовался да и за эмульсией не следил. Думаю скорее закоксовалось, поскольку после команды рука стояла на месте секунды 2-3 и начала опускаться с рывком. По поводу ладдера, постараюсь скинуть, но на нашем предприятии проблемы и с флешками и с общей сетью, да и ПК на рабочем месте нет. 
    • Bot
      Команда CSD пообщалась с представителями компании «КС-ПРО» и выяснила, как происходило внедрение G-Station, сколько времени занял процесс перехода на новую платформу, узнала об организации совместной работы и о функционале платформы. Основное направление компании «КС-ПРО» — оказание комплекса услуг технического заказчика, в том числе и для крупных офисных девелоперов. Внедрение G-Station в «КС-ПРО» проходило в ноябре 2022 года. G-Station — это всего лишь один из модулей комплексной платформы G-Tech Suite. Специалисты компании отмечают, что G-Station действительно стала хорошей альтернативой BIM 360. Специалисты «КС-ПРО» получили доступ к полноценной единой информационной среде с облачным хранилищем файлов и моделей, а также такими возможностями, как: Управление проектами, пользователями и подрядчиками; Создание чек-листов; Создание шаблонов чек-листов с процессами согласования; Передача документации на строительную площадку; Просмотр 3D- и 2D моделей [...] View the full article
×
×
  • Создать...