Математика в контроллере

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы

Математика в контроллере

Сообщение Автоматизатор » 01 авг 2013, 06:14

В текущей задаче присутствуют математические вычисления. Привод перемещения каретки на станке: асинхронный электродвигатель с частотным управлением. На плату частотника поступает сигнал от энкодера, установленного на валу двигателя. Дублирующий сигнал с платы идет на скоростные входа контроллера S7-1200. Требуется вычислить и отобразить на панели оператора:
- текущую скорость перемещения (в мм/мин),
- текущее положение (в мм).

Известно:
- разрешение энкодера (для квадратурного счетчика 4096),
- передаточное отношение редуктора (14:1),
- шаг ШВП (5 мм/оборот),
- максимальное перемещение (1200 мм).

Вроде математика не сложная. Но у меня всегда есть сомнение:
- будет переполнение в процессе вычислений?
- не потеряется ли точность?
- не будет ли деления на 0?

Отсюда вопросы:
- в каком формате производите вычисления DINT или REAL ?
- контролируете ли ошибки при выполнении математических операций (каким образом, какая реакция на ошибку)?
- контролируете ли входные данные при вычислении ?
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Михайло » 01 авг 2013, 07:56

Если вычисления производятся с реальными значениями (нет деления на ноль и т.д.), то с типом REAL ничего не потеряется. Все благодаря тому, что число с плавающей запятой рассматривается как совокупность мантиссы и показателя степени.
В твоем случае происходит умножение/деление на константы - здесь точно никаких проблем. Главное сразу перейти от DINT к REAL.

S7-1200 прекрасно работает с REAL, так что лучше делать вычисления именно в REAL.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Математика в контроллере

Сообщение Автоматизатор » 02 авг 2013, 04:43

Михайло писал(а):лучше делать вычисления именно в REAL

Как все просто! Спасибо, попробую.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Автоматизатор » 02 авг 2013, 12:36

Решил обкатать различные варианты расчетов на эмуляторе. У меня программа расчета написана в Step7 v11. Попробовал перегнать в Step7 v12. Оказалось, что программирование контроллеров S7-1200, S7-300, S7-1500 отличается:
- S7-1200 допускает конструкции:
S7-1200.jpg

- S7-300 не допускает: требует, чтобы в одном Network было одно вхождение (т.е. так, как было в Step7 v5.4)

Блоки S7-1200 и S7-300 несовместимы, программу можно переписать кусочкам, но это трудоемко.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Михайло » 02 авг 2013, 15:10

Автоматизатор писал(а):S7-1200 допускает конструкции

Хорош он, правда? :)
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Математика в контроллере

Сообщение Автоматизатор » 03 авг 2013, 09:54

Михайло писал(а):Хорош он, правда?


Да, мне понравились улучшения. Допускать такое - это хорошо. Не надо вставлять совершенно идиотские "AlwaysOn".

Однако, напрягает разный подход к программированию контроллеров S7-300 и S7-1500 в одной среде: 300-е программируются также как и в версии 5.

Хорошо еще, что программные блоки S7-1200 и S7-1500 совместимы.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Михайло » 03 авг 2013, 18:18

Я не пробовал версию Professional и CPU15xx. Будем верить тебе.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Математика в контроллере

Сообщение Автоматизатор » 03 авг 2013, 18:49

Автоматизатор писал(а):
Михайло писал(а):лучше делать вычисления именно в REAL

Как все просто! Спасибо, попробую.


Попробовал. Действительно, применительно к описанной задачи, в REAL считать удобнее. Однако, как то несколько лет назад тоже пробовал, и пришел к выводу, что в DINT точнее получается. Попробую найти старую задачу.

Как то использовал модуль позиционирования Siemens FM-351. С модулем шел СD с программным обеспечением: мастер настройки и функции управления осями. Так там все параметры были DINT. С какой целью сделали? Быстродействие улучшить? Точность?

Михайло, считаешь, что не стоит контролировать результаты выполнения математических операций?
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Михайло » 03 авг 2013, 19:42

Автоматизатор писал(а):Быстродействие улучшить?

Похоже, что именно это.

Автоматизатор писал(а):Михайло, считаешь, что не стоит контролировать результаты выполнения математических операций?

Можно этот самый контроль разделить на две части: на design-time и на real-time. Design-time - это то есть "подумать на этапе разработки". Real-time - это когда контроль переполнений полностью осуществляется средствами системы управления в реальном времени.
Я стараюсь на этапе разработки продумать все возможные варианты значений переменных, участвующих в расчете, и уже решаю, где ставить контроль, а где нет. Ну все просто: например, если целое число из диапазона 0...4096 нужно разделить на 10000 и умножить на 128. Простой анализ показывает, что 4096 делить на 10000 в самом начале не стОит, лучше с начала умножить на 128, а результат умножения хранить в DINT и т.д. Я думаю, тебе понятно, что при условии, что число 0...4096, умножаемое на 128, нормально сохраняется в DINT, а этот же результат, деленный на 10000, можно успешно хранить в BYTE. Главное, чтобы процессор позволял такие преобразования. Так или иначе на этапе разработки все просчитывается.
Труднее, когда используются не банальные умножения и деления.
Но весьма пригождается REAL, при этом типе данных переполнения практически невозможны.

Возможно раньше были проблемы с панелями оператора, которые не хотели как следует отображать числа с плавающей точкой...
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: Математика в контроллере

Сообщение Автоматизатор » 04 авг 2013, 13:58

Интересная статья: IEEE 754 - стандарт двоичной арифметики с плавающей точкой

Вот пример на VB:

Private Sub Command1_Click()
Dim a As Single
Dim b As Double
Dim c As Double

a = 123456789.123457
b = 123456789.123457
c = a - b
Text1.Text = c

End Sub
Результат: 2,87654320895672 (должен быть 0)
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 880
Зарегистрирован: 09 окт 2012, 05:18

Re: Математика в контроллере

Сообщение Михайло » 04 авг 2013, 14:53

Надо заметить, что тип REAL соответствует типу single (32 бита). Тип double (64 бита) в S7-1200 отсутствует. Следовательно, ошибка 9.1 невозможна.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16


Вернуться в АВТОМАТИЗАЦИЯ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2