1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Отладка функционального блока STEP7

Ответить

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

Здравствуйте,
Учимся дистанционно, изучаем самостоятельно))... Люди знающие помоги пожалуйста доделать задание, а именно произвести отладку созданного FB

Задание:
Разработка функционального блока FB динамического звена по заданному дифференциальному уравнению
Дифференциальное уравнение имеет вид
T∙dy(t)/dt+y(t)=k∙x(t) (1)
- апериодическое звено с параметрами:
Т=300мс; k = 1; цикл работы - Δt = 20 мс
Решение :
[+]
Для получения уравнения в конечных разностях, выполним следующие замены:
x(t)→x[n]; y(t)→y[n]; dy(t)/dt→(y[n]-y[n-1])/∆t (2)
Тогда заданное дифференциальное уравнение можно переписать в виде
T∙((y[n]-y[n-1])/∆t)+y[n]=k∙x[n] (3)
Запишем данное выражение относительно y[n]:
y[n]=T/(T+∆t)∙y[n-1]+(k∙∆t)/(T+∆t)∙x[n] (4)
Подставив в данное уравнение значения T=0.3 c; ∆t=0.02 c;k=1, получим
y[n]=0.3/0.32∙y[n-1]+(0.02∙1)/0.32∙x[n] (5)
Или окончательно
y[n]=0.938∙y[n-1]+0.063∙x[n] (6)
Получили разностное уравнение звена, связывающее выход звена y[n] в данном цикле [n] с входным сигналом и со значением выхода звена в предыдущем цикле [n-1]. Для выполнения этого алгоритма в контроллере потребуются ячейки памяти с переменными x[n], y[n-1], y[n], а также T,k и ∆t.
После выполнения в данном цикле контроллера расчетов по уравнению (6) необходимо подготовить данные для следующего цикла, а именно: переписать значение y[n] в ячейку памяти, где хранится величина y[n-1] для использования в уравнении (6)
y[n-1]≔y[n]
Таким образом, получили следующие уравнения для реализации алгоритма
y[n]=0.938∙y[n-1]+0.063∙x[n]
y[n-1]≔y[n]
Вот что получилось:
Hardware:
[+]
Конфигурация.jpg
Далее параметры звена: Т=300мс; k = 1; цикл работы - Δt = 20 мс - правильно ли введено?
y[n]=0.938∙y[n-1]+0.063∙x[n] - не понял куда вводить эти данные, подскажите
[+]
5.jpg
6.jpg
7.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

Блок FB
[+]
91.jpg
92.jpg
93.jpg
Блок OB + Var
[+]
10.jpg
8.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4711
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 192 раза
Поблагодарили: 336 раз

Отладка функционального блока STEP7

Сообщение VADR »

По поводу назначения переменных в различных областях в FB:
Облаcть IN - для входных данных.
OUT - для выходных.
IN_OUT - для тех, что и вводятся, и выводятся
TEMP - для тех, которые существуют только в период выполнения FB в данном вызове и не сохраняются к следующему вызову.
STAT - статические, для них создаётся instance DB, в котором данные сохраняются от одного вызова к следующему.
Ваши параметры в FB лучше разместить так:
x[n] - в IN
y[n] - в OUT (вам ведь не надо его снова вводить? IN_OUT - ни к чему)
y[n-1] - в STAT (его надо сохранить к следующему вызову функции, а больше он нигде не используется)
всякие разные временные переменные, которые нужны только в течение выполнения данного прохода цикла - в TEMP
для параметров вашей матмодели также желательно задать переменные в области IN, а числовые значения 0,938 и 0,063 подставить уже при вызове FB
Далее. Что там с аппаратной частью? Какой конкретно контроллер, будет ли он предназначен только для этой задачи или это одна из многих? Циклический вызов раз во сколько-то миллисекунд удобнее сделать в прерывании из диапазона OB30-OB38. С ними есть нюансы:
1. Не во всех контроллерах есть весь этот набор прерываний, в 300-х симатиках такое прерывание только одно, в других моделях - смотреть надо.
2. Периодичность вызова прерывания можно настроить в свойствах контроллера. Есть значения по умолчанию, которые обычно никто не меняет, но при необходиости можно поменять. Опять же - в 300-х симатиках есть вызов и каждые 10, и каждые 20 мс, но использовать их надо осторожно: во-первых, надо быть уверенным в том, что это прерывание больше ни для каких задач не используется, либо всех устраивает такая периодичность вызова; во-вторых - если напихать много математики (у вас немного совсем) длительность выполнения OB может превысить периодичность вызова - и там уже я не помню, какой эффект: то ли циклы вызова пропускаются, то ли контроллер в ошибку уходит.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

stesl
эксперт
эксперт
Сообщения: 1001
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Отладка функционального блока STEP7

Сообщение stesl »

VADR писал(а): 23 апр 2021, 01:26 y[n] - в OUT (вам ведь не надо его снова вводить? IN_OUT - ни к чему)
Нет времени вникать в сообщение топикстартера, но хочу чтобы у моего "однокашника" было верное представление )
Если в блоке Вы только формируете переменную, то да - в OUT. Например y[n] = 12 + x и т.д., но если Вам позже эта переменная понадобится для какого то анализа (не для ввода), допустим if y[n] > 0 then, то она уже обязана быть в IN_OUT
Если понимание такого есть, то я спокоен )

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Отладка функционального блока STEP7

Сообщение SMax »

Joffa писал(а): 21 апр 2021, 17:58 y[n]=0.938∙y[n-1]+0.063∙x[n] - не понял куда вводить эти данные, подскажите
0001.png
0002.png
0003.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

Спасибо всем кто откликнулся !
Контроллер 300-й, будет использоваться только для решения этой задачи В свойствах выставил 20 мс Операционный блок - ОВ35.
1.jpg
y[n-1] - в STAT
y[n] пришлось определить в IN-OUT тк в блоке MOVE она выступает в роли входящей
Числовые значения 0,938 и 0,063 (убрал их из параметров переменных) были получены путём подстановки параметров звена в исходное уравнение T∙dy(t)/dt+y(t)=k∙x(t), поэтому предполагаю что функциональный блок может выглядеть более упрощённо, как предложил SMax
111.jpg
333.jpg
Считает несколько секунд и останавливается, в STOP переходит где-то через полчаса
Что скажите?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3558
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Отладка функционального блока STEP7

Сообщение Михайло »

Посмотреть буфер ошибок, Ctrl+D вроде.

Деление на нуль не происходит? Проверяйте на условие dt=0.

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

Вот
4.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4711
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 192 раза
Поблагодарили: 336 раз

Отладка функционального блока STEP7

Сообщение VADR »

Здесь, судя по состоянию диагностческого буфера, контроллер в состоянии RUN. Сделайте то же самое, когда контроллер уйдёт в STOP, не перезапуская его. В верхней части окна выбираете сообщение - в нижней будет его более подробное описание. Наверняка там будет какое-то сообщение о том, что произошла какая-то ошибка, контроллер пытался выполнить диагностическое прерывание (блок OB с каким-то номером - их может быть несколько), и не найдя соответствующего OB, ушёл в стоп. Тогда можно будет создать нужный OB и в нём прописать чтение информации о причине вызова прерывания.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

stesl
эксперт
эксперт
Сообщения: 1001
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Отладка функционального блока STEP7

Сообщение stesl »

Михайло писал(а): 07 май 2021, 19:31 Деление на нуль не происходит? Проверяйте на условие dt=0.
Недавно где то тут обсуждали... Деление на ноль не вызывает ОВ ) И ПЛК не стопарит. Речь о Симатик

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Отладка функционального блока STEP7

Сообщение SMax »

Все дело в том, что числа REAL ограничены минимальным диапазоном значений ± 1.175495e-38, т.е. при задании на вход x нуля, значение на выходе y, с каждым циклом, будет приближаться к нулю, пока не достигнет минимального предела. С дальнейшим уменьшением число REAL перестанет восприниматься контроллером как число с плавающей точкой и не будет обрабатываться математическими операциями.
Нужно проверять значение, в данном случае y(n-1), и если оно меньше например -10 степени, то приравнивать его нулю. Проверка должна делаться как для положительных, так и для отрицательных чисел.
Тоже самое будет и с очень большими числами больше ± 3.402823e+38.

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

Так и есть, при задании на вход х какого-либо значения, вычисления заканчиваются через 1-10 сек Причём не зависает - зелёные флажки мониторинга в движении и в STOP не переходит - оставлял на всю ночь ...
SMax писал(а): 12 май 2021, 05:13 Нужно проверять значение, в данном случае y(n-1), и если оно меньше например -10 степени, то приравнивать его нулю. Проверка должна делаться как для положительных, так и для отрицательных чисел.
Тоже самое будет и с очень большими числами больше ± 3.402823e+38
SMax, подскажите как это реализовать ? Создать доп нетворк с IF THEN ?

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3558
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Отладка функционального блока STEP7

Сообщение Михайло »

Что значит "вычисления заканчиваются"? Установившийся режим?

Автор темы
Joffa
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 20 апр 2021, 23:16
Имя: Михаил
Страна: Россия
город/регион: СПб

Отладка функционального блока STEP7

Сообщение Joffa »

[+]
https://radikal.ru/video/jVMn6Y3u4Ez
Спасибо SMax за видео Вот как-то так , просчитывает введённую переменную и останавливается
Joffa писал(а): 12 май 2021, 22:48 Причём не зависает - зелёные флажки мониторинга в движении и в STOP не переходит - оставлял на всю ночь ...
а должно ведь "по кругу гонять" или я ошибаюсь?
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4711
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 192 раза
Поблагодарили: 336 раз

Отладка функционального блока STEP7

Сообщение VADR »

Так тут всё нормально получается. Вот тот же рассчёт, сделанный в экселе. Как видно, где-то в районе 250-й итерации расчёт приходит к тому же значению.
test.xlsx
Просто далее изменение становится исчезающе малым, расчёт действительно гоняется по кругу, но Y не меняется. Беспокоиться на этот счёт не надо. У вас же, я так понимаю, матмодель какого-то процесса, т.е. расчёт поведения процесса в ответ на изменение входного параметра. Вот вы задали изменение X с 0 до 5 - получили такую реакцию. Привяжете в программе ваши ячейки для X и Y к каким-то другим функциям (я так думаю, регулятору, генератору шумов и источнику возмущений) - и получите модель живого процесса.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Отладка функционального блока STEP7

Сообщение SMax »

Joffa писал(а): 12 май 2021, 22:48 SMax, подскажите как это реализовать ? Создать доп нетворк с IF THEN ?
0001.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «Вопросы от студентов»