- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Отладка функционального блока STEP7
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
Здравствуйте,
Учимся дистанционно, изучаем самостоятельно))... Люди знающие помоги пожалуйста доделать задание, а именно произвести отладку созданного FB
Задание:
Разработка функционального блока FB динамического звена по заданному дифференциальному уравнению
Дифференциальное уравнение имеет вид
T∙dy(t)/dt+y(t)=k∙x(t) (1)
- апериодическое звено с параметрами:
Т=300мс; k = 1; цикл работы - Δt = 20 мс
Решение : Вот что получилось:
Hardware: Далее параметры звена: Т=300мс; k = 1; цикл работы - Δt = 20 мс - правильно ли введено?
y[n]=0.938∙y[n-1]+0.063∙x[n] - не понял куда вводить эти данные, подскажите
Учимся дистанционно, изучаем самостоятельно))... Люди знающие помоги пожалуйста доделать задание, а именно произвести отладку созданного FB
Задание:
Разработка функционального блока FB динамического звена по заданному дифференциальному уравнению
Дифференциальное уравнение имеет вид
T∙dy(t)/dt+y(t)=k∙x(t) (1)
- апериодическое звено с параметрами:
Т=300мс; k = 1; цикл работы - Δt = 20 мс
Решение : Вот что получилось:
Hardware: Далее параметры звена: Т=300мс; k = 1; цикл работы - Δt = 20 мс - правильно ли введено?
y[n]=0.938∙y[n-1]+0.063∙x[n] - не понял куда вводить эти данные, подскажите
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- администратор
- Сообщения: 4909
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 236 раз
- Поблагодарили: 425 раз
Отладка функционального блока STEP7
По поводу назначения переменных в различных областях в 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 может превысить периодичность вызова - и там уже я не помню, какой эффект: то ли циклы вызова пропускаются, то ли контроллер в ошибку уходит.
Обла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 может превысить периодичность вызова - и там уже я не помню, какой эффект: то ли циклы вызова пропускаются, то ли контроллер в ошибку уходит.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Отладка функционального блока STEP7
Нет времени вникать в сообщение топикстартера, но хочу чтобы у моего "однокашника" было верное представление )
Если в блоке Вы только формируете переменную, то да - в OUT. Например y[n] = 12 + x и т.д., но если Вам позже эта переменная понадобится для какого то анализа (не для ввода), допустим if y[n] > 0 then, то она уже обязана быть в IN_OUT
Если понимание такого есть, то я спокоен )
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Отладка функционального блока STEP7
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
Спасибо всем кто откликнулся !
Контроллер 300-й, будет использоваться только для решения этой задачи В свойствах выставил 20 мс Операционный блок - ОВ35. y[n-1] - в STAT
y[n] пришлось определить в IN-OUT тк в блоке MOVE она выступает в роли входящей
Числовые значения 0,938 и 0,063 (убрал их из параметров переменных) были получены путём подстановки параметров звена в исходное уравнение T∙dy(t)/dt+y(t)=k∙x(t), поэтому предполагаю что функциональный блок может выглядеть более упрощённо, как предложил SMax Считает несколько секунд и останавливается, в STOP переходит где-то через полчаса
Что скажите?
Контроллер 300-й, будет использоваться только для решения этой задачи В свойствах выставил 20 мс Операционный блок - ОВ35. y[n-1] - в STAT
y[n] пришлось определить в IN-OUT тк в блоке MOVE она выступает в роли входящей
Числовые значения 0,938 и 0,063 (убрал их из параметров переменных) были получены путём подстановки параметров звена в исходное уравнение T∙dy(t)/dt+y(t)=k∙x(t), поэтому предполагаю что функциональный блок может выглядеть более упрощённо, как предложил SMax Считает несколько секунд и останавливается, в STOP переходит где-то через полчаса
Что скажите?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Отладка функционального блока STEP7
Посмотреть буфер ошибок, Ctrl+D вроде.
Деление на нуль не происходит? Проверяйте на условие dt=0.
Деление на нуль не происходит? Проверяйте на условие dt=0.
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
Вот
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- администратор
- Сообщения: 4909
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 236 раз
- Поблагодарили: 425 раз
Отладка функционального блока STEP7
Здесь, судя по состоянию диагностческого буфера, контроллер в состоянии RUN. Сделайте то же самое, когда контроллер уйдёт в STOP, не перезапуская его. В верхней части окна выбираете сообщение - в нижней будет его более подробное описание. Наверняка там будет какое-то сообщение о том, что произошла какая-то ошибка, контроллер пытался выполнить диагностическое прерывание (блок OB с каким-то номером - их может быть несколько), и не найдя соответствующего OB, ушёл в стоп. Тогда можно будет создать нужный OB и в нём прописать чтение информации о причине вызова прерывания.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Отладка функционального блока STEP7
Недавно где то тут обсуждали... Деление на ноль не вызывает ОВ ) И ПЛК не стопарит. Речь о Симатик
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Отладка функционального блока STEP7
Все дело в том, что числа REAL ограничены минимальным диапазоном значений ± 1.175495e-38, т.е. при задании на вход x нуля, значение на выходе y, с каждым циклом, будет приближаться к нулю, пока не достигнет минимального предела. С дальнейшим уменьшением число REAL перестанет восприниматься контроллером как число с плавающей точкой и не будет обрабатываться математическими операциями.
Нужно проверять значение, в данном случае y(n-1), и если оно меньше например -10 степени, то приравнивать его нулю. Проверка должна делаться как для положительных, так и для отрицательных чисел.
Тоже самое будет и с очень большими числами больше ± 3.402823e+38.
Нужно проверять значение, в данном случае y(n-1), и если оно меньше например -10 степени, то приравнивать его нулю. Проверка должна делаться как для положительных, так и для отрицательных чисел.
Тоже самое будет и с очень большими числами больше ± 3.402823e+38.
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
Так и есть, при задании на вход х какого-либо значения, вычисления заканчиваются через 1-10 сек Причём не зависает - зелёные флажки мониторинга в движении и в STOP не переходит - оставлял на всю ночь ...
SMax, подскажите как это реализовать ? Создать доп нетворк с IF THEN ?
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 апр 2021, 23:16
- Имя: Михаил
- Страна: Россия
- город/регион: СПб
Отладка функционального блока STEP7
Спасибо SMax за видео Вот как-то так , просчитывает введённую переменную и останавливается
а должно ведь "по кругу гонять" или я ошибаюсь?
-
- администратор
- Сообщения: 4909
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 236 раз
- Поблагодарили: 425 раз
Отладка функционального блока STEP7
Так тут всё нормально получается. Вот тот же рассчёт, сделанный в экселе. Как видно, где-то в районе 250-й итерации расчёт приходит к тому же значению.
Просто далее изменение становится исчезающе малым, расчёт действительно гоняется по кругу, но Y не меняется. Беспокоиться на этот счёт не надо. У вас же, я так понимаю, матмодель какого-то процесса, т.е. расчёт поведения процесса в ответ на изменение входного параметра. Вот вы задали изменение X с 0 до 5 - получили такую реакцию. Привяжете в программе ваши ячейки для X и Y к каким-то другим функциям (я так думаю, регулятору, генератору шумов и источнику возмущений) - и получите модель живого процесса.У вас нет необходимых прав для просмотра вложений в этом сообщении.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Отладка функционального блока STEP7
У вас нет необходимых прав для просмотра вложений в этом сообщении.