Страниц: [1]
  Печать  
Автор Тема: Подскажите пожалуйста алгоритм расчета точного дозирования материала... Очень нужно!  (Прочитано 12122 раз)
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« : Июля 02, 2003, 02:07:00 pm »

Здравствуйте уважаемые господа! Столкнулся со следующей проблемой:
Есть АБЗ(асфальто-бетонный завод). Я уже практически написал программу системы управления заводом. Единственный вопрос - это точность дозирования. Поясню: есть четыре бункера каменных материалов. Мне нужно с максимальной точностью отмерять веса просыпанных материалов из этих бункеров в общий бункер КМ(каменных материалов) откуда в пропорциях (эти пропорцтии идут от рецепта приготавливаемого асфальта) материалы передаются в мешалку, где перемешиваются с битумом и далее высыпается в машину готовый асфальт. Общий бункер КМ стоит на 3-х тензодатчиках, вес с которых снимается ADAM-ми и принимается в PromPC платой АЦП.
Как я делаю сейчас: измеряю скорость просыпания материала за фиксированный интервал времени(причем эта скорость переменная - из-за неравномерного просыпания материалов. И надо добавить довольно таки высокая - порядка 300 - 500 кг/сек). Само измерение скорости идет по формуле:

СКОРОСТЬ_ПРОСЫПАНИЯ=ВЕС_ТЕКУЩИЙ-ВЕС_ПРЕДЫДУЩИЙ

Затем я ее фильтрую (методом суммирования - собираю 8 значений скоростей, складываю их между собой и делю на 8 ). Получаем ФИЛЬТРОВАННУЮ_СКОРОСТЬ. Останов просыпания материала расчитывается по формуле:

if((ВЕС_ПО_РЕЦЕПТУ-ТЕКУЩИЙ_ВЕС-ФИЛЬТРОВАННАЯ_СКОРОСТЬ*УПРЕЖДЕНИЕ)<=0) ОСТАНОВ

УПРЕЖДЕНИЕ - фиксированный павраметр (заносится в настроечных параметрах системы). Дело в том, что когда я подаю сигнал останова дозирования, материал будет еще некоторое время просыпаться. Это получается из-за того, что бункер оборудован затвором, который закрывается около 2-х 3-х секунд. Т.е. надо учесть время закрытия затвора, которое и определяется упреждением.

Все вроде бы красиво... Но точность желает лучшего - по этой методике точность примерно плюс-минус 10(15)кг. Необходимо достигнуть точности не меньше 2-3 кг.

Если я не все расскрыл, что нужно - пишите, все неясности поясню.

Если кто-нибудь сможет помочь - очень буду благодарен!

_________________
**********************
С уважением, CaptHowdy
**********************

[ Это Сообщение было отредактировано: CaptHowdy в 2003-07-02 11:07 ]
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #1 : Июля 02, 2003, 05:38:00 pm »


CaptHowdy пишет:
Здравствуйте уважаемые господа!
...


Здравствуйте...

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

1. Когда твои "камни" падают на механическую систему - каждый из них возбуждает резонансный процесс...
2. Грубо можешь считать, что каждый "камень" - это воздействие вида дельта-функции, а амплитуда воздействия - масса этого "камня"... (точнее, не "дельта" - а её интеграл: "ступенька");
3. Реакция твоей системы - это её функция отклика h(t) (это, заодно - фурье-преобразование от энергетической спектральной характеристики реакции тоей механической системы, но ты её не обмеришь, так что это "кстати")...
4. Вид этой h(t) - это что-то (по виду) похожее на интегрированный (!) sin(wt)/wt - реально она будет сильно "замазана", но "по-виду", чтоб претставить ... такого вида: ступенька с резонансной реакцией.
5. Окончательно ты имеешь (меряешь, видишь на выходе своего АЦП...) свёртку твоего потока воздействий (который ты хочешь мерять с высокой точностью) с этой функцией реакции системы h(t) - естественно, тот исходный сигнал, который ты меряешь - уже искажён...

Как делу помочь?
1. Функцию импульсного отклика h(t), именно её, ты можешь измерить! Для этого нужно разогнать всех: конструкторов, технологов, эксплуатационщиков ... (это самая сложная часть эксперимента - они никогда не хотят "расходиться")... А дальше: брасать "эталонный" камень ("какой" - это не важно, тебе не нужны абсолютные значения h(t), а только её вид) - и мерять (и записывать куда-то на диск) вид функции отклика ... и так достаточно много раз для усреднения (только для устранения статистических ошибок), усредняем только нормированные значения - в точке max к "1", например.
2. Имея такую "эталонную" функцию h(t) - дальше тебе нужно "разворачивать" (операцию обратную свёртке) твой текущий поток данных в реальном времени измерения... Это не так просто - именно в таком виде ("разворачивать") - это решать интегральное уравнение, так пробуют делать, но там есть проблемы, одна из главных - решения такого интегрального уравнения плохо обусловлены (неустойчивы)...
3. Но, к счастью, есть реальный путь: по h(t) ты восстанавливаешь (1 раз, это не "реальное время"!) частотную (резонансную) функцию h(f) - фурье-преобразование от h(t), строишь частотную характеристику корректирующего фильтра, обратную h(f) - F(f), по F(f) строишь коэффициенты корректирующего фильтра - тут миллион способов: от обратного фурье-преобразования  и до... "несть им числа" - я бы использовал авторегрессионные фильтры: Б.Марпл. мл. "Цифровой спектральный анализ", М.: "Мир".

Сложно? Несколько... так это с непривычки, а потом "попустит". Но другого пути нет! Потому, что ты исходно (!) используешь искажённые результаты (систематическая ошибка), а потом пытаешься повысить точность измерения ("точность измерения ошибки"!).

P.S. Всё, сказанное относительно h(t) - не следкет забывать, что это импульсная реакция одного конкретного экземпляра устройства! - но это не так и важно, до тех пор, пока конструктора не сделают "очередное гениальное улучщение конструкции аппарата" (а они это делают обычно "втихаря", например - изменение массы платформы, или изменение расположения тензодатчиков...), и тогда ... всё поплыло .


Затем я ее фильтрую (методом суммирования - собираю 8 значений скоростей, складываю их между собой и делю на 8 ).

Ты фильтруешь уже существенно искажённые данные (см. выше), но и это сделано одним из самых наихудших способов (усреднением). Попробуй хоть "экспоненциально сглаживание":
y(t) = sum( x(t-i) * k**i, i = 0, N-1 ) где:
x(t) & y(t) - входные и выходные данные;
k - коэффициент <=1 (!!!), кстати, при k=1 - это твой алгоритм усреднения (!), весь критерий качества - в успешном выборе этого k - экспериментируйте...
N - это твоё "8" ... или сколько там?
Записан
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #2 : Июля 02, 2003, 06:26:00 pm »

Большое спасибо за поддержку!!!

Olej пишет:
...
Попробуй хоть "экспоненциально сглаживание":
y(t) = sum( x(t-i) * k**i, i = 0, N-1 ) где:
x(t) & y(t) - входные и выходные данные;
k - коэффициент <=1 (!!!), кстати, при k=1 - это твой алгоритм усреднения (!), весь критерий качества - в успешном выборе этого k - экспериментируйте...
N - это твоё "8" ... или сколько там?

Хотелось бы увидеть вышеприведенную формулу по точнее. Как я понял, x(t) - входные данные. Делаю 8 выборок, т.е. запоминаю 8 последних значений x(t). Затем мне их нужно сложить и перемножить на k? Немного не ясно...
y(t) - это будет отфильтрованное значение x(t)? k - откуда его взять? Или это экспериментальный эмпирический коэффициент? Как мне понимать k**i?
Если не трудно, разьясните пожалуйста!

Еще раз большое спасибо!

[addsig]
Записан
zeus
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #3 : Июля 02, 2003, 06:33:00 pm »


CaptHowdy пишет:
Большое спасибо за поддержку!!!

Olej пишет:
...
Попробуй хоть "экспоненциально сглаживание":
y(t) = sum( x(t-i) * k**i, i = 0, N-1 ) где:
x(t) & y(t) - входные и выходные данные;
k - коэффициент <=1 (!!!), кстати, при k=1 - это твой алгоритм усреднения (!), весь критерий качества - в успешном выборе этого k - экспериментируйте...
N - это твоё "8" ... или сколько там?

Хотелось бы увидеть вышеприведенную формулу по точнее. Как я понял, x(t) - входные данные. Делаю 8 выборок, т.е. запоминаю 8 последних значений x(t). Затем мне их нужно сложить и перемножить на k? Немного не ясно...
y(t) - это будет отфильтрованное значение x(t)? k - откуда его взять? Или это экспериментальный эмпирический коэффициент? Как мне понимать k**i?
Если не трудно, разьясните пожалуйста!

Еще раз большое спасибо!

y(t) = x(t) + x(t-1)*k + x(t-2)*k^2 + ... + x(t-N+1)*k^(N-1)
Записан
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #4 : Июля 02, 2003, 07:50:00 pm »

Здравствуйте уважаемый!

zeus пишет:
...
y(t) = x(t) + x(t-1)*k + x(t-2)*k^2 + ... + x(t-N+1)*k^(N-1)


Вы уверены в этом? Я понимаю так: x(t) - входящая величина. y(t) - отфильтрованное значение входящей величины. Допустим, k=1, x(t)=2 (все значения - т.е. N=8). Получаем:

y(t)=2+2*1+2*1^2+2*1^3+2*1^4+2*1^5+2*1^6+2*1^7=16!

Это никак не будет равно 2! Может формула имеет другой вид, типа:

y(t)=x(t)*k^0-x(t-1)*k^1+x(t-2)*k^2-x(t-3)*k^3...-x(t-N+1)*k^(N-1)

Пожалуста подсобите мне в этой "вышке"!

[addsig]
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #5 : Июля 02, 2003, 09:03:00 pm »


CaptHowdy пишет:
Вы уверены в этом? Я понимаю так: x(t) - входящая величина. y(t) - отфильтрованное значение входящей величины. Допустим, k=1, x(t)=2 (все значения - т.е. N=8). Получаем:

y(t)=2+2*1+2*1^2+2*1^3+2*1^4+2*1^5+2*1^6+2*1^7=16!

Это никак не будет равно 2! Может формула имеет другой вид, типа:

y(t)=x(t)*k^0-x(t-1)*k^1+x(t-2)*k^2-x(t-3)*k^3...-x(t-N+1)*k^(N-1)

Пожалуста подсобите мне в этой "вышке"!

Всё правильно написано.
Не будет = 2! Это точно, потому, что будет равно 16, а ешё нужна финальная нормировка, на 8 (N), в случае k=1 ... в общем случае нормировака на:
S = sum( k^i , i = 0, N - 1) - что при k=1,N=8 и даёт 8...
Володя, нельзя же всё так дословно понимать ... а дальше:
"Пилите, Шура, пилите..."(с).

P.S. Володя, это всё "цветочки"... они не выправят существенно твою проблему - "ягодки" начнутся, когда начнёшь устранять систематическую погрешность, связанную со свёрткой... "и чем раньше - тем лучше"(с)!



[ Это Сообщение было отредактировано: Olej в 2003-07-02 18:06 ]
Записан
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #6 : Июля 02, 2003, 09:42:00 pm »


Olej пишет:
Всё правильно написано.
Не будет = 2! Это точно, потому, что будет равно 16, а ешё нужна финальная нормировка, на 8 (N), в случае k=1 ... в общем случае нормировака на:
S = sum( k^i , i = 0, N - 1) - что при k=1,N=8 и даёт 8...
Володя, нельзя же всё так дословно понимать ... а дальше:
"Пилите, Шура, пилите..."(с).

P.S. Володя, это всё "цветочки"... они не выправят существенно твою проблему - "ягодки" начнутся, когда начнёшь устранять систематическую погрешность, связанную со свёрткой... "и чем раньше - тем лучше"(с)!

Объясните мне тогда пожалуйста, что такое y(t) и как мне получить из него отфильтрованное значение x(t)?
[addsig]
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #7 : Июля 02, 2003, 09:55:00 pm »


CaptHowdy пишет:
Объясните мне тогда пожалуйста, что такое y(t) и как мне получить из него отфильтрованное значение x(t)?


Я же там написал:

y(t) = sum( x(t-i) * k**i, i = 0, N-1 ) где:
x(t) & y(t) - входные и выходные данные;

x(t) - входная последовательность (нефильтрованные входные данные),
y(t) - выходная последовательность (а это уже - результат, это - фильтрованный отсчёт).
Обычный - простейший - нерекурсивный фильтр.

Кстати, об нормировке (см. выше) - и нормировка тебе, вообще то говоря, "до фени" - она всегда происходит (при последовательных циклах работы устройства) всегда на одну величину, кой ляд разница в каких единицах его потом сравнивать с порогом: в метрах или ... фунтах стерлингов?

Записан
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #8 : Июля 02, 2003, 10:07:00 pm »


Olej пишет:
...
x(t) - входная последовательность (нефильтрованные входные данные),
y(t) - выходная последовательность (а это уже - результат, это - фильтрованный отсчёт).
Обычный - простейший - нерекурсивный фильтр.

Т.о. получается, что y(t)!=x(t), я правильно понимаю? И y(t) будет намного стабильнее чем x(t)? Так?
Если это так, то для расчета скорости просыпания материалов это подойдет, мне ведь в принципе все равно, в каких единицах она измеряется.
А как из этой формулы вытащить фильтрованый x(t)? Неужели надо y(t)/N? Например, для получения веса каменных материалов?

[addsig]
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #9 : Июля 02, 2003, 10:38:00 pm »

Нет, y(t)/S (см. выше), где S может быть и равно N (например, при k=1), но в общем случае один раз должно быть вычислено заранее, см. выражение выше.

P.S. Еще раз - эти (или другие подобные) "цацки" - проблему не решат, они только могут её смягчить!
Записан
CaptHowdy
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #10 : Июля 02, 2003, 10:44:00 pm »


Olej пишет:
Нет, y(t)/S (см. выше), где S может быть и равно N (например, при k=1), но в общем случае один раз должно быть вычислено заранее, см. выражение выше.

P.S. Еще раз - эти (или другие подобные) "цацки" - проблему не решат, они только могут её смягчить!


Ура! Наконец-то своим скудным умишком дошел.
Еще раз большое спасибо!

_________________
**********************
С уважением, CaptHowdy
**********************

[ Это Сообщение было отредактировано: CaptHowdy в 2003-07-02 19:47 ]
Записан
ship_
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #11 : Августа 22, 2004, 02:45:09 pm »

Вообще поздновато, наверное, но поделюсь своими мыслями...
Тем более, что ситуация знакомая.
1. Дозирование материалов не самое узкое место в процессе. Узким местом, обычно, является мешалка. По высказанной Вами точности дозирования рискну предположить, что обьем ее = 1 куб. И когда в ней мешается предыдущий замес, дозирование материалов может быть выполнено неспешно.
2. О самом дозировании... вес материалов на весах может быть разным. (Ну, покупатель сколько захочет асвальта, столько и купит.) следовательно параметры резонансной системы - тоже меняются... Более того, взвешивание всех материалов из 4 бункеров производится последовательно. Как учесть такую массу параметров резонансной системы, а если один из материалов высыпался на весы неравномерно? А если одного из материалов нет в этом рецепте асфальта?
3. Вспомните, как раньше действовали продавщицы в магазинах при взвешивании сахарного песка, например. Сначала грубо, на глазок, потом отсыпали-досыпали. Хорошая отправная точка, только в нашем случае отсыпать нельзя. Следовательно делим процесс на две стадии. Грубо и точно.
4. Время закрытия шибера(заслонки). Чегой-то оно у Вас слишком большое (3 секунды) Если это действительно так, то проблем с точным дозированием у Вас точно не возникнет.
Я рискну предположить, что те полтонны или более, которые сыпятся на весы после выдачи команды на закрытие шибера, это высота столба материала от заслонки до платформы весов.
Ну плюс еще те остатки, которые сыпятся во время закрывания.
Попробую набросать алгоритм, простенький, но, может, кому сгодится...
1. Грубо дозируем первый материал. Открываем шибер, ждем набора на весах нужного веса минус высота столба(точнее его масса). Параметры настраиваются так, чтоб недовешивал.

2. Переходим к точной дозировке. Если есть возможность, и материал дозируется двумя шиберами, то открываем только один и на короткое время. Если у вас действительно время открытия-закрытия 3 сек, то можете открывать не полностью, на 0,3 сек, например.(QNX с этим справится.

3. Повторяем шаги 1,2 для всех 4-х, или там сколько в рецепте бункеров.
4. параллельно с этими шагами дозируем битум, ну там добавки, если есть какие.(ну там все с точностью и по времени должно пройти). Хотя, можно применить такую же схему.


Еще один совет, ну для повышения производительности, если техпроцесс вдруг "ждет" дозирования каменных материалов. Актуально для первого замеса. Ну, особенности производства, если перерыв в самосвалах был. Грубо дозируем все "каменные материалы", потом точно додозируем те два, которые в процентном отношении недовесили. Дозировка битума - тоже в процентном соотношении. Получаем замес хорошего качества, но с недовесом или перевесом уже не компонентов а асфальта. Это ерунда, в последующих замесах учтем.

Вот, вычислительные мощности для такой задачи мизерные. А цифровые фильтры хорошо работают, когда ваши весы с 2-3 тоннами щебня и песка успокаиваются. Тем более, что после каждого закрытия шибера надо ждать успокоения(или фильтровать). И вот тут-то они незаменимы.


Впрочем, недостатки есть и при дозировани по скорости и по столбу. Дождик прошел, и скорость ссыпания уже не та. Как впрочем и масса столба. Есть вероятность перевеса. Ну поддозируем в процентном отношении другие материалы и все... Не заставлять же оператора с лопатой к весам бегать.
 
Вобщем, если все вышесказанное кому-то поможет - буду рад. А может, кто-нибудь лучше предложит.
Записан
j-punch
Участник
*
Offline Offline

Сообщений: 36


Просмотр профиля
« Ответ #12 : Сентября 17, 2010, 12:03:16 pm »

Добрый день!
Расскажите как Вы справились с проблемой дозирования.
Записан
Страниц: [1]
  Печать  
 
Перейти в: