PDA

Просмотр полной версии : помогите новичку



Anton58
07.12.2013, 15:45
есть гидропресс, на нем два датчика( тензодатчик давления с токовой петлей 4-20мА и датчик перемещения типо линейки с шагом в 1 сотку). Собрана схема MB110-8ac+ PLC100. Задача: надо замыкать один выход на ПЛК при условии: приращение по давлению в трех последовательных циклах постоянно растет, а приращение по перемещению убывает.

Ryzhij
07.12.2013, 18:10
Уточните, пожалуйста:
1. Что Вы вкладываете в понятие "цикл"? Цикл ПЛК? Или метки времени? Или возвратно-поступательные ходы ползуна пресса? Метка начала-конца цикла у Вас есть?
2. Вы решили задачу ввода координаты ползуна пресса в ПЛК?
3. Давление ползуна фиксируем в конце цикла или регистрируем непрерывно и выбираем максимум?

Anton58
07.12.2013, 22:25
1. Снимаем показания датчиков с максимально возможной частотой ( в идеале не ниже 100Гц). 2. Считаем приращения значений по двум датчикам ( датчик давления 4-20мА, датчик перемещения с вольтовой характеристик ой 0-5в). 3. Рассматриваем минимум три цикла измерения то есть по два приращения по каждому датчику, быстрее всего понадобится рассматривать больше циклов ( на данном этапе интересует принцип программирования и лучший язык для реализации). 4. Надо отследить момент когда приращение по давлению увеличивается, а в это же время приращение по перемещению уменьшается, не важно во сколько раз.

Anton58
07.12.2013, 22:30
Грубо говоря кулачок пресса встречает металл. Кулачок пресса движется максимум 3,5 мм в секунду. Те процесс относительно медленный не ударный, используется именно давление пресса, а не инерция кулачка.

rovki
07.12.2013, 22:49
1. на данном этапе интересует принцип программирования и лучший язык для реализации). 4. Надо отследить момент когда приращение по давлению увеличивается, а в это же время приращение по перемещению уменьшается, не важно во сколько раз.
Несколько не корректный вопрос .Все зависит от имеющегося у вас опыта программирования .Если его нет ,то Вам сильно не помогут на форуме ,для этого есть курсы .А вообще такая задача легко решается на ПР114 и овен лоджике (там помогут ;-в теме области применения ПР114).

Anton58
08.12.2013, 00:04
Про пр114 пока ничего не знаю, на данный момент интересует именно кодесис. Основные два вопроса: 1. Возможности этого железа (100 реальных Гц)? 2. Как принципиально и на каком языке решить эту задачу лучше всего в кодесисе? П.с. Был бы программером возможно и не спросил бы. Есть задача, хочу ее решить и почерпнуть много интересного для себя в мире ПЛК и кодесисе в частности.

petera
08.12.2013, 02:06
Собрана схема MB110-8ac+ PLC100.


1. Снимаем показания датчиков с максимально возможной частотой ( в идеале не ниже 100Гц). 2. Считаем приращения значений по двум датчикам ( датчик давления 4-20мА, датчик перемещения с вольтовой характеристик ой 0-5в). 3. Рассматриваем минимум три цикла измерения то есть по два приращения по каждому датчику, быстрее всего понадобится рассматривать больше циклов ( на данном этапе интересует принцип программирования и лучший язык для реализации). 4. Надо отследить момент когда приращение по давлению увеличивается, а в это же время приращение по перемещению уменьшается, не важно во сколько раз.
Скорей всего ничего из этого не выйдет. Хотя 100 Гц это цикл ПЛК 10 мс, вполне реально выдержать если в программе больше ничего не нужно делать если бы не обмен с модулем по ModBus, где возможно будет узкое место.
Лучше взять например ПЛК160 у которого уже есть быстрые (10мс) аналоговые входы.
Но и в этом случае мало вероятно, что выйдет. Без отключенного входного(аппаратного) фильтра результаты последовательных измерений будут содержать случайные погрешности измерений и шумы из-за наводок. Не получится сделать правильный вывод по двум измерениям увеличивается или уменьшается физическая величина.
Если аппаратный фильтр включить, то будет задержка в результатах измерения

− «50 Hz 1por» – входной фильтр среднего, первого порядка, длиной 32. Групповое время задержки фильтра равно 10 мс.
− «50 Hz 2por» – входной фильтр среднего, второго порядка, длиной 32. Групповое время задержки фильтра равно 20 мс.
− «50 Hz 4por» – входной фильтр среднего, четвертого порядка, длиной 32. Групповое время задержки фильтра равно 40 мс.
− «200 Hz 1por» – входной фильтр среднего, первого порядка, длиной 8. Групповое время задержки фильтра равно 2,5 мс. При работе с этим типом фильтра не гарантируется заявленная точность измерения.
Примечания.
1) Устанавливать фильтры меньшего порядка рекомендуется только в случае необходимости получения задержки измерения менее 40 мс.
2) Фильтры «50 Hz» 1, 2 и 4 порядков обеспечивают подавление помех с частотами, кратными 50 Гц.

ЗЫ. Тезисы о влиянии аппаратного фильтра для MB110-8ac тоже справедливы.

capzap
08.12.2013, 09:51
Надо отследить момент когда приращение по давлению увеличивается
нарисуйте различные графики изменения давления и примените формулу

x = K(Pₙ₋₂ - 2*Pₙ₋₁ + Pₙ)сразу станет понятно в какую сторону пойдет смещение

rovki
08.12.2013, 09:56
Нужен поиск экстремума (точнее ,момент времени ). Анализируем приращение и смотрим знак ......

Anton58
08.12.2013, 10:32
Просто не понимаю тогда зачем вообще нужен mb110-8ac со своими 200Гц, если в единственный на нем порт невозможно передать этот реал с такой частотой? Можно конечно прицепить датчик перемещения другого типа непосредственно к плк и освободить RS-485. Или может не понимаю чего? С чьей стороны будет узкий канал?

Anton58
08.12.2013, 11:12
Можно поподробнее про формулу?

capzap
08.12.2013, 11:52
каждый цикл снимаете показания с датчика давления. Далее текущее значение записываете в промежуточную переменную, а значение промежуточной переменной перед этим во вторую промежуточную переменную, таким образом будет три значения текущей итерации и двух предыдущих, вернувшись к формуле получается что если сумма значений текущего и две итерации назад больше чем предыдущая итерация умноженная на два, то показания растут, если меньше то падают, если равно нулю значит это линейный график, что в реальности невозможно

Anton58
08.12.2013, 21:40
каждый цикл снимаете показания с датчика давления. Далее текущее значение записываете в промежуточную переменную, а значение промежуточной переменной перед этим во вторую промежуточную переменную, таким образом будет три значения текущей итерации и двух предыдущих, вернувшись к формуле получается что если сумма значений текущего и две итерации назад больше чем предыдущая итерация умноженная на два, то показания растут, если меньше то падают, если равно нулю значит это линейный график, что в реальности невозможно

Принцип понятен, спасибо! Думаю на st напишу, очень уж похож на добрый турбо паскаль. Но вот меня напугали низким быстродействием системы со стороны модбас и циклом плк. Как можно повысить быстродействие? И как можно проверить на реальном железе его?

capzap
08.12.2013, 21:48
через конфигурацию вряд ли, а через библиотечные функции можно в среднем посылать запросы с периодом 20мс

Sergey666
08.12.2013, 23:12
Смысл в этих 20мс???
Какая скорость опроса у аналогового входа , к которому подключен датчик????
Блин , опрос весовых дозаторов (3...5) с реально быстрым опросом (50гц) через конфигурацию с периодом 50мс успеваем проводить.
Сколько можно парить юные(и не очень) головы своими библиотеками опроса??????:mad:
Ну нет у библиотеки такого уж сильного преимущества.(чес слово вообще по модбасу преимуществ НЕТУ).

capzap
08.12.2013, 23:29
А есть ли весоаые дозаторы,работающие по модбас,вроде бы у них свой протокол,аскишный,что помедленее рту будет.

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

Предложите свое решение, раз в моем глазу соринка не нравиться

Anton58
08.12.2013, 23:32
VAR
delta: TIME;
prevScanTime: TIME;
END_VAR

(*Время цикла*)
delta := TIME() - prevScanTime;
prevScanTime := TIME();

Вот видел такую манипуляцию. Поможет она? Куда поставить в конец или начало программы?

capzap
08.12.2013, 23:38
Запрсы по последовательным портам длятся больше одного цикла плк, так что в таком виде не поможет

Sergey666
08.12.2013, 23:53
Из 1го поста(стартового).
Вам надо обработку сделать (типа дискреты) с целью фиксации факта приращения .(допустим 1 десятая-приращение , 1 сотка - игнор).

Далее конструевина (по таймеру (типа время скана)).

Pressure_Up:=false;
Pressure_Dn:=False;
Tmr_scan(In:=not Tmr_scan.Q, Pt:=word_to_time(Time_scan*10)(*Тады 1==10мс*));
IF Tmr_scan.Q Then
IF Pressure>=Old_pressure+Discreta_P then
Pressure_Up:=true;
end_if

IF Pressure<=Old_pressure-Discreta_P then
Pressure_Dn:=True;
end_if
Old_pressure:=Pressure;
End_if
Rtrig_up(Clk:=Pressure_Up);
Rtrig_dn(Clk:=Pressure_Dn);

If Rtrig_Up.Q Then
Count_Up:=Count_Up+1;
End_if
Далее счетчик обнуляйте когда требуется.

Оцифрованнее мислить надо Товарищи!!!!!!!
Цифра - это всегда кусочки.:pТока маленькие.

petera
09.12.2013, 00:08
VAR
delta: TIME;
prevScanTime: TIME;
END_VAR

(*Время цикла*)
delta := TIME() - prevScanTime;
prevScanTime := TIME();

Вот видел такую манипуляцию. Поможет она? Куда поставить в конец или начало программы?
Предлагаю такой вариант

PROGRAM PLC_PRGVAR
delta: TIME; (*Время цикла ПЛК*)
prevScanTime: TIME;
t1: TIME;
t2: TIME; (*Время выполнения программы*)
END_VAR
------------------------------
(*Этот код в начале программы*)
t1:=TIME();
delta := t1 - prevScanTime;
prevScanTime := t1;
(*------------------------------*)
(*Здесь тело программы*)
(*------------------------------*)
(*В самом конце программы*)
t2:=TIME()-t1;


Можно измерить и время цикла ПЛК и время выполнения программы.

Валенок
09.12.2013, 11:43
Из 1го поста(стартового).
Вам надо обработку сделать (типа дискреты) с целью фиксации факта приращения .(допустим 1 десятая-приращение , 1 сотка - игнор).
Далее конструевина (по таймеру (типа время скана))..

Какие таймеры для времени скана ?
Есть событие - приход данных. В этот момент и делать расчеты. Какой смысл читать одно и тоже письмо два раза ?
Для библиотек - естественное определение события, через конфигурацию - через гланды:
if ai <> _ai then
_ai := ai;
.... //обработка события
else
.... //курим бамбук
end_if
Причем для конфига теоритически (хотя и редко) возможна ситуация пропуска обработки при одинаковых подряд значениях. Значит опять лепить предельный таймер (или через указатель записывать нечто во вход с целью обнаружить приход данных) Но гланды - остаются.

Вопрос был об узких местах.
8АС - мин. время оцифровки (1..8) * 5мс. В зависимости от кол-ва вкл. входов.
Если 1вход - узкое место сеть. За 5мс даже через библиотеку не справится.
Если 8входов - узкое место модуль (исхожу их того - что он один)
Если код ПЛК от 50мс - узкое место программист

Sergey666
09.12.2013, 12:13
А какой смысл фиксировать приход одних и тех-же данных .
Таймер - не время , а период Скана.
Еще ни разу , сколь большой проект не был цикл ПЛК больше 5мс не ставил.
Цикл ПЛК это одно , период фиксации приращений аналоговой величины , полученной по модбасу - совсем другое.

Валенок
09.12.2013, 13:35
А какой смысл фиксировать приход одних и тех-же данных .
Разве ж я про фиксацию говорил ? Расчеты делатьтолько в момент прихода данных - это наиболее оперативная и более чем достаточная реакция.
А временной интервал между реальными приходами далеко не факт что будет равен желаемому времени/периоду скана.
И цикл ПЛК тут вообще не при делах.

Anton58
09.12.2013, 14:13
Какие таймеры для времени скана ?
Есть событие - приход данных. В этот момент и делать расчеты. Какой смысл читать одно и тоже письмо два раза ?
Для библиотек - естественное определение события, через конфигурацию - через гланды:
if ai <> _ai then
_ai := ai;
.... //обработка события
else
.... //курим бамбук
end_if
Причем для конфига теоритически (хотя и редко) возможна ситуация пропуска обработки при одинаковых подряд значениях. Значит опять лепить предельный таймер (или через указатель записывать нечто во вход с целью обнаружить приход данных) Но гланды - остаются.

Вопрос был об узких местах.
8АС - мин. время оцифровки (1..8) * 5мс. В зависимости от кол-ва вкл. входов.
Если 1вход - узкое место сеть. За 5мс даже через библиотеку не справится.
Если 8входов - узкое место модуль (исхожу их того - что он один)
Если код ПЛК от 50мс - узкое место программист
Поправьте меня!!!
1. Ставлю фильтр первого порядка 200Гц на модуль, в книжке написано задержка 2,5 мс, откуда 5мс.?
2. Сколько мс модбас заберет на передачу одного канала с модуля (остальные отключаем)? Сколько точно?
3. Писал простенькую прогу ПЛК и считал время выполнения проги и максимум что видел 1-2мс. Мою задачу вижу как простую и соответственного большого количества ветвлений в проге нет и время цикла считаю до 5мс.
3 Может вообще тогда убрать модбас и поставить простейший железный АЦП, типо регулируемый сигналом с датчика давления генератор импульсов и их потом считать по дискретным входам ПЛК.?
Блин получается надо переводить в тему выбор оборудования, а не программирования.
Кто-то строил удачно быстродействующую систему на модбасе, отзовитесь!!!

capzap
09.12.2013, 14:34
Вот Валенок и строит быстродействующие системы на овен с модбасом :)

Валенок
09.12.2013, 15:44
))
Не выжмете опрос быстрее 6-7мс. А для 8АС наверное и 10-12мс.
А нужны ли эти скорости, небось и исполнительный механизм узкое место.

Anton58
09.12.2013, 16:35
))
Не выжмете опрос быстрее 6-7мс. А для 8АС наверное и 10-12мс.
А нужны ли эти скорости, небось и исполнительный механизм узкое место.
Физически можно описать процесс таким образом:
1. Одна трубка стальная вставляется в другую с зазором.
2. Обжим радиальным прессом, те наружнюю трубку надо упереть во внутреннюю (это грубо). Сейчас измеряем диаметр трубок и нониусом на прессе задаем диаметр обжима, те расчитываем изначально. Производство мелкосерийное да и трубки все пляшут по размерам.
3 Скорость обжима 3,5 мм в секунду, надо ловить 0,1-0,2 мм.

Sergey666
10.12.2013, 01:28
При прессовании решающее значение имеет размер и порог + диапазон давления .Вы хотите линейкой с разрешением 0.1 вылавливать 0.1-0.2 мм при этом (" В течении нескольких циклов давление постоянно растет , при этом размер уменьшается"-ваши слова).Вам - бы на бумаге прикинуть что вы хотите и что можете со своим железом , и что и как необходимо делать.