Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » Пользователи для пользователей » Пользователи для пользователей » Поделитесь идеями, кто как реализует алгоритмы?

   
Автор / Author Тема / Topic: Поделитесь идеями, кто как реализует алгоритмы?
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Проблема заключается в том, что Trace Mode замечательно подходит моделирования жесткой логики, эквивалентной электронным схемам.
Но как на ней по человечески реализовывать сложные ветвящиеся алгоритмы с большим количество входов выходов?
Я выкрутился тем что ввожу счетчик шагов, и по CASE каждый раз при выполнении подпрограммы проверяю условия выполняю действия и новым значение счетчика определяю следующий шаг алгоритма.
Криво, не наглядно, трудоемко, но ничего лучше не придумал. Может я чего нибудь не знаю и кто-то умеет лучше?

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
A40
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вам нужен конечный автомат?
IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ну, я затрудняюсь в применении данного термина.
Скажем так, я привык к тому хорошему чо есть в обычных языках, т.е. вызвали в процедуру и реализуем в ней логику алгоритма, получили одно условие, выставили какие-то переменные и идем на следую проверку-выставление. В Трасе Моде же такое невозможно поскольку что бы обновились значения выходов-входов программа должна закончиться, т.е. каждый следующий шаг подразумевает выход и повторный вход на следующем обсчете. В результате получается та канитель, которую я описал в первом посте.

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вот кусочек кода для примера

CASE Шаг OF

0: Флаг_шнека_непоступление=0; Таймер_непоступления=Пауза_непоступления*1000;
if Рецепт_выполнен_полностью==1 then Рецепт_выполнен_полностью=0; Отдозировано_по_рецепту=0; end_if; Шаг=10;

10: if Условия_начала_дозирования then
if Есть_рецепт then Дозатор_ожидает_рецепт=0;
if Рецепт_выполнен_полностью==1 then Рецепт_выполнен_полностью=0; Отдозировано_по_рецепту=0; end_if;
Шаг=20;
else Дозатор_ожидает_рецепт=1; end_if;
elsif Шнеки_наполнения_включены then Шаг=1000;
end_if;

20: Шаг=25;


25: Таймер=Пауза_доз_эл*1000; Шаг=30;// if Рецепт_выполнен_полностью==1 then Рецепт_выполнен_полностью=0; Отдозировано_по_рецепту=0; end_if;
30: if Таймер<=0 then
Флаг_дозатора_дозирование=1;
Флаг_дозатора_для_фиксации_веса=1;
Кнопка_пауза =4; Кнопка_стоп =4;
Начальный_вес=Показания_весов;
Шаг=40;
if Доза<>0 then Шаг=40; else Флаг_дозатора_для_фиксации_веса=2; Шаг=110; end_if;
end_if;

40: if Нужно_сбросить_начальный_вес then Начальный_вес=Показания_весов; Нужно_сбросить_начальный_вес=0; end_if; Шаг=45;
45: if Режим_дозатора then
if (Доза-Отдозированное_ранее-(Начальный_вес-Показания_весов))<=Досыпка
then Включить_шнек_точно=1; Включить_шнек_грубо=1; Шаг=60;
else Включить_шнек_грубо=1; Шаг=70; end_if;
else Шаг=520;
end_if;

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
A40
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
SFC не подойдет?
IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
2alex_kh1:

Рекомендую попробовать на SFC это делать. Там как раз ветвление логики и шаги с условиями переходов.

Для себя в проектах подобное делаю всегда так:
1) Выполняю декомпозицию алгоритма на отдельные подфункции, которые выполняю в виде отдельных программ на FBD или ST
2) Создаю на ST некий арбитражный алгоритм, который следит за общей работой всех этих подфункций, управляя их статусами в зависимости от неких условий.

Иногда можно и как вы в примере показали делать, вот только потом разбираться в такой "портянке" ой как сложно...

Но вообще именно для этого в стандарте SFC и придумали. [Пдмигивание / Wink]

IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да, когда искал варианты пытался применить SFC, но посчитал это бесполезной игрушкой и больше не возвращался.

Думаете можно его применить для эквивалентной замены того как я сейчас делаю, из расчета строк примерно на 500 в одной программе?

И там можно будет что-то понять, с учетом того что элементы SFC даже нельзя расположить на листе в желаемом порядке?

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Все можно, вопрос только в том - как применять. [Улыбка / Smile] Ведь и микроскопом можно гвоздь забить.
IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Неправильно выразился, понятно что можно, имеет ли преимущества вариант с SFC? Или же все станет еще более запутанным.
Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
На вкус и цвет - все фломастеры разные. [Усмешка / Big Grin]
Мне вот лично SFC не нравится, поэтому я им никогда не пользуюсь. Все - дело вкуса и личных ощущений в процессе эксплуатации.

IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ну а если не SFC и не как я, есть еще варианты?
Кстати глянул SFC сейчас и не вижу возможностей:

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

т.е. не вижу некоей предобработки и постобработки.

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Топик перенесен в раздел "Пользователи для пользователей".
Сообщения / Posts 17316 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Согласен с предложением, которое высказал Romсheg.

Для Ваших запросов будет удобнее организовать несколько программ на Техно ST, одна из которых будет отслеживать признаки перехода между ними (как вариант можно использовать канал HEX16 с использованием отдельных битов в качестве условий переходов).

Такой вариант наиболее приближен к логике дискретного автомата, да и разбираться в такой конструкции достаточно удобно)

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Можно обратить внимание на функциональный блок "Конечный автомат (SSTP)" раздела "Функции выбора" библиотеки FBD.
Для его реализации нужна только комбинаторика формирования входов и декодер на выходе. Достаточно гибкая логика с памяться зашита в нем.

Сообщения / Posts 17316 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Жаль конечно, что примеров нет, смотрю я на описание SSTP и не пойму как это можно использовать в реальных задачах, хотя модуль выглядит полезным, академически если смотреть. Наверно одного курса АСУ мало, нужен факультет АСУ )).
Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
alex_kh1: А тут одной математики мало будет, для того, чтобы такие алгоритмы создавать, тут решения по отладке таких монстров нужны. Я вот как раз сейчас решил две такие задачи в паре реальных проектов - ну прямо один в один ваша задача. Есть очень большое желание статью написать как я это делал и что из этого получилось. Если по времени не критично, то я думаю, что к концу следующей недели смогу вам скинуть ее для ознакомления с моим опытом реализации подобных задач. [Пдмигивание / Wink]
IP / IP: IP адрес / IP address | Report this post to a Moderator
alex_kh1
Forum Member / Участник форума
Участник № / Member № 3981


Icon 1 отправлено / posted      Профиль для / Profile for alex_kh1           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ознакомился бы с удовольствием. Для меня работа с Trace Mode сплошная головоломка, только и придумываю как выкрутится и сделать то что в обычных средах программирования вообще вопросов бы не вызвало )). Хотя других скад не знаю, может они и все такие.
Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
2alex_kh1: Стукните мне в асю (206646106)
IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2