Страница 1 из 4

Глупые вопросы новичка

Добавлено: 11 авг 2016, 13:35
Drahtor
Предлагаю создать тему, в которой можно будет задавать глупые вопросы, подобно этому:
если к обоим входным переменным прибавлять одинаковое число, к примеру, 150.0, то при условии равенства взводится только первый меркер, в нашем случае М30.0. М30.1 даже при выполнении равенства не взводится. Если же к одной переменной прибавлять, допустим, 150.0, а к другой 150.1, то взведутся оба. Почему?
STL_Code.JPG

Re: Вопросы новичка

Добавлено: 11 авг 2016, 14:37
Михайло
Если я правильно понял ситуацию, то проблема заключается в представлении переменной типа REAL. Если складывать слишком большое число и слишком маленькое, то маленькое число может быть "незамечено". Например, число 0.1 намного меньше 100000.

Немного изменил тему, чтобы было понятнее. ;)

Re: Вопросы новичка

Добавлено: 11 авг 2016, 16:32
Drahtor
Михайло писал(а):Если я правильно понял ситуацию, то проблема заключается в представлении переменной типа REAL. Если складывать слишком большое число и слишком маленькое, то маленькое число может быть "незамечено".
.
Нет. Значения переменных изменяются в пределах от 1000 до 3000. Скорость изменения также не большая. Имел ввиду следующее: при DBD26+150 = DBD18 M30.0=1; а при DB30+150 = DBD22, M30.1=0

Re: Глупые вопросы новичка

Добавлено: 11 авг 2016, 18:00
Михайло
Я не очень силен в STL, но проблема может быть в попытке сразу после команды +R грузить в аккумулятор ACCU2 командой L. Вероятно команда L сразу после +R затирает результат операции сложения. Нужно после +R сохранить результат командой T, а затем грузить заново.

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 00:49
mr_Frodo
Drahtor писал(а):Предлагаю создать тему, в которой можно будет задавать глупые вопросы, подобно этому:
если к обоим входным переменным прибавлять одинаковое число, к примеру, 150.0, то при условии равенства взводится только первый меркер, в нашем случае М30.0. М30.1 даже при выполнении равенства не взводится. Если же к одной переменной прибавлять, допустим, 150.0, а к другой 150.1, то взведутся оба. Почему?
STL_Code.JPG
А где это видно?

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 05:08
Михайло
Drahtor писал(а):Если же к одной переменной прибавлять, допустим, 150.0, а к другой 150.1, то взведутся оба. Почему?
Это еще может быть случайным процессом, никак не связанным с тем, что к чему прибавляется. Дело в том, что команда проверки на равенство двух значений типа REAL - это конь в сферическом вакууме. Если эти значения приходят с датчиков, то вероятность практически равна нулю, что когда-то они будут равны. Обычно для вещественных чисел сравнение делают следующим образом: вычисляют модуль разницы и сравнивают с некоторым пороговым значением. Допустим отклонение не должно быть более 0,05 попугаев, тогда величины считаются равными.

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 05:41
Автоматизатор
mr_Frodo писал(а):А где это видно?
Да. Почему картинки "без очков" отладчика?

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 20:22
CHANt
Drahtor писал(а):Почему?
Это просто не внимательность :D
У Вас меркер взводится по команде SET!!!!! Reset где? Т.е один раз взвелся, а потом хоть #головойобстену

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 20:24
Михайло
CHANt писал(а):Reset где?
Да не, нормально все. Просто фиксируем факт равенства... Наверное...

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 20:43
CHANt
:D меняем S на = и все работает

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 20:56
Михайло
А может правда проблема в понимании того, как работает S?

Re: Глупые вопросы новичка

Добавлено: 12 авг 2016, 22:00
mr_Frodo
CHANt писал(а):
Drahtor писал(а):Почему?
Это просто не внимательность :D
У Вас меркер взводится по команде SET!!!!! Reset где? Т.е один раз взвелся, а потом хоть #головойобстену
Так в том то и дело, что топикстартер имеет претезии к неадекватной установке сигнала или даже невозможности, хотя не аргументирует представлением процесса онлайн, а только своими рассуждениями, которые не совсем последовательны и понятны.
Но раз уж тема идет в таком ключе, то необходимо досконально разобраться в ситуации, хотя я думаю, что Ваше объяснение вполне выявляет причину неверного трактования работы алгоритма, представленного автором темы. Ждем его рецензии.-

Re: Глупые вопросы новичка

Добавлено: 15 авг 2016, 13:00
Drahtor
CHANt писал(а): Это просто не внимательность :D
У Вас меркер взводится по команде SET!!!!! Reset где? Т.е один раз взвелся, а потом хоть #головойобстену
Меркеры сбрасываются в следующем нетворке. Проблема в том, что они не взводятся.
Автоматизатор писал(а):
mr_Frodo писал(а):А где это видно?
Да. Почему картинки "без очков" отладчика?
Процесс динамический, поэтому если только видео выложу.
Это подъемник. Соответственно левая и правая сторона. Считываются сигналы с энкодера (100 имп=0.1 мм), на скрине - значения в миллиметрах. Нажимаем кнопку пуск, мне надо, чтобы на высоте 150мм от пола подъемник остановился. Ставлю SET, потому что по инерции счетчик проскакивает заданное значение. Скорость вращения движков 1500 об/мин, энкодер 1024. Энкодер подключен к приводу. Данный в ПЛК идут по Profinet. Неужели ПЛК просто не успевает зафиксировать равенство или это происходит между циклами?
Если да, то наверно придется сравнивать как было предложено выше по модулю. Как это сделать компактно и без объявления дополнительных переменных?

Re: Глупые вопросы новичка

Добавлено: 15 авг 2016, 13:30
mr_Frodo
Равенство в реальных данных?!? :no:
Ставьте сравнение: больше или меньше и равно, вот тогда все будет работать.

Re: Глупые вопросы новичка

Добавлено: 15 авг 2016, 14:37
Михайло
Михайло писал(а):Дело в том, что команда проверки на равенство двух значений типа REAL - это конь в сферическом вакууме. Если эти значения приходят с датчиков, то вероятность практически равна нулю, что когда-то они будут равны. Обычно для вещественных чисел сравнение делают следующим образом: вычисляют модуль разницы и сравнивают с некоторым пороговым значением. Допустим отклонение не должно быть более 0,05 попугаев, тогда величины считаются равными.

Re: Глупые вопросы новичка

Добавлено: 15 авг 2016, 14:45
Михайло
Объясняю совсем просто: допустим на входе ID1000 в динамике были получены значения 0, 12, 28, 62, 122, 167, 201, 225. Чтобы перевести в миллиметры мы (допустим) умножаем на коэффициент 0.15. Тогда реальные значения будут такие: 0, 1.8, 4.2, 9.3, 18.3, 25.05, 30.15, 33.75 мм. Если прямо сравнивать со значением 32.0 мм, то как видно бит не взведется. Причина - дискретность обработки информации с энкодера.

Re: Глупые вопросы новичка

Добавлено: 15 авг 2016, 14:56
CHANt
И это не особенность Симатика, это принципы работы с ПЛК и т.д.

Re: Глупые вопросы новичка

Добавлено: 17 авг 2016, 05:47
Автоматизатор
Drahtor писал(а):Процесс динамический, поэтому если только видео выложу.
Математику можно тестировать отдельно от алгоритма управления механизмами. Самому задавать циферки (минимальные, максимальные, средние, граничные и пр. значения) в отладчике и проверять результат.

Re: Глупые вопросы новичка

Добавлено: 17 авг 2016, 12:43
Drahtor
Очередной глупый вопрос: один и тот же бит в одно и тоже время в редакторе равен "1", в VAT - "0". Предугадывая ответ, что он сбрасывается в другом месте, скажу, что больше он нигде не записывается.
LAD.JPG

Re: Глупые вопросы новичка

Добавлено: 17 авг 2016, 12:57
CHANt
Я бы проверил четыре случая:
- сохранена и загружена в контроллер сама программа;
- сохранен и загружен в контроллер DB41;
- сохранена и загружена в контроллер таблица VAT;
- характеристики ЦПУ на предмет ограничения областей адресации, как для переменных, так для номеров DB, FC, FB и прочее.

Надо исходить из того что где-то Вы неверно задали параметр или не корректно выполнили операции, или это связано с ограничением этого ЦПУ (это же не полноценный контроллер), а не с позиции глюкавости Симатика, он то как раз и избавлен от глюкавости давно.