Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: И снова про SFC: раздумья о правильном подходе.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Question И снова про SFC: раздумья о правильном подходе.

    Уважаемые коллеги.
    Вопрос из области лучших практик, философско-технического плана.
    На ST, FBD , С и тд давно программирую. SFC начал использовать сравнительно недавно.
    Пока на SFC реализуется простой автомат, я бы даже сказал - с (почти) любым уровнем сложности, вопросов много не возникает.
    Но тут попала мне задача, вроде бы простая на первый взгляд, однако требующая достаточно большого "интерактива" с оператором, HMI "в полный рост".

    Не суть важно, на чем ее реализовать необходимо, я , исключительно для целей отладки "в натуре" взял имеющийся под рукой PLC73, суть в следующем:
    - SFC, прекрасно подходит для решения задачи, в том числе с подзадачами и "вспомогательными" процессами,
    если алгоритм предусматривает достаточно много шагов, и каждый шаг может генерировать несколько сообщений, а некоторые ветки задачи требуют ввода,
    КАК логичнее/красивее реализовать ЦЕНТРАЛИЗОВАННЫЙ вывод на экран ?

    Поясняю: когда использую state machine, например в С, или даже ST, то перед вызовом SM я один раз считываю входы и проверяю ошибки, в каждом состоянии я решаю некие логические задачи, в соответствии с алгоритмом устанавливаю выходы (как правило - переменные, выходы - централизованно в конце) , И ПОСЛЕ ОТРАБОТКИ СОСТОЯНИЯ один раз обновляю дисплей. То есть в некоемом (любом) состоянии при появлении сообщения для
    оператора я складываю его в буфер и вывожу все (ошибки, сообщения и тд) в одном месте в конце. Очень удобно: форматируется все в одном месте, в зависимости от типа - ошибка, инфо и тд - выводится префикс и тд...

    И вот тут-то я и задумался: в "конце цепочки" SFC нельзя реализовать - алгоритм может крутиться, например, на шаге автонастройки, или цепочки задания рецепта (а там много ввода и проверок), и, с точки зрения SFC все это -
    ОДИН шаг.
    Вызывать В КАЖДОМ шаге "последним оператором" (действием) нечто вроде UpdateDisplay (MSG_TYPE, MSG_TEXT......) - можно, но, почему-то в душе я пока не привык к этой идее.
    Подумал, добавить выходное действие к шагу, но, учитывая, что может быть SFC внутри SFC (сам пока не делал, но на форуме такая тема есть и мне она понятна!!!) этот вариант ТОЖЕ НЕ очень подходит, ибо пока алгоритм работает внутри одного шага - он также может генерировать сообщения и обрабатывать ввод, а выходное действие выполнится только после перехода к следующему шагу.....

    С благодарностью послушаю мнения экспертов и бывалых!

    Михаил
    Последний раз редактировалось dorofeevms; 09.10.2024 в 15:32.

  2. #2

    По умолчанию

    Цитата Сообщение от dorofeevms Посмотреть сообщение
    Уважаемые коллеги.
    Вопрос из области лучших практик, философско-технического плана.
    На ST, FBD , С и тд давно программирую. SFC начал использовать сравнительно недавно.
    Пока на SFC реализуется простой автомат, я бы даже сказал - с (почти) любым уровнем сложности, вопросов много не возникает.
    Но тут попала мне задача, вроде бы простая на первый взгляд, однако требующая достаточно большого "интерактива" с оператором, HMI "в полный рост".

    Не суть важно, на чем ее реализовать необходимо, я , исключительно для целей отладки "в натуре" взял имеющийся под рукой PLC73, суть в следующем:
    - SFC, прекрасно подходит для решения задачи, в том числе с подзадачами и "вспомогательными" процессами,
    если алгоритм предусматривает достаточно много шагов, и каждый шаг может генерировать несколько сообщений, а некоторые ветки задачи требуют ввода,
    КАК логичнее/красивее реализовать ЦЕНТРАЛИЗОВАННЫЙ вывод на экран ?

    Поясняю: когда использую state machine, например в С, или даже ST, то перед вызовом SM я один раз считываю входы и проверяю ошибки, в каждом состоянии я решаю некие логические задачи, в соответствии с алгоритмом устанавливаю выходы (как правило - переменные, выходы - централизованно в конце) , И ПОСЛЕ ОТРАБОТКИ СОСТОЯНИЯ один раз обновляю дисплей. То есть в некоемом (любом) состоянии при появлении сообщения для
    оператора я складываю его в буфер и вывожу все (ошибки, сообщения и тд) в одном месте в конце. Очень удобно: форматируется все в одном месте, в зависимости от типа - ошибка, инфо и тд - выводится префикс и тд...

    И вот тут-то я и задумался: в "конце цепочки" SFC нельзя реализовать - алгоритм может крутиться, например, на шаге автонастройки, или цепочки задания рецепта (а там много ввода и проверок), и, с точки зрения SFC все это -
    ОДИН шаг.
    Вызывать В КАЖДОМ шаге "последним оператором" (действием) нечто вроде UpdateDisplay (MSG_TYPE, MSG_TEXT......) - можно, но, почему-то в душе я пока не привык к этой идее.
    Подумал, добавить выходное действие к шагу, но, учитывая, что может быть SFC внутри SFC (сам пока не делал, но на форуме такая тема есть и мне она понятна!!!) этот вариант ТОЖЕ НЕ очень подходит, ибо пока алгоритм работает внутри одного шага - он также может генерировать сообщения и обрабатывать ввод, а выходное действие выполнится только после перехода к следующему шагу.....

    С благодарностью послушаю мнения экспертов и бывалых!

    Михаил
    Оформите автомат в виде отдельного ФБ и делайте в программе на любом языке предварительные действия, потом вызывайте ФБ на SFC, а после него - операторы с выводом, обработкой экраном и т.д.

  3. #3

    По умолчанию

    На ST всё реализуется по шагам, через CASE, сколько надо шагов и подшагов, с любыми действиями, без заморочек c SFC.
    Последний раз редактировалось kondor3000; 09.10.2024 в 16:23.

  4. #4

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На ST всё реализуется по шагам, через CASE, сколько надо шагов и подшагов, с любыми действиями, без заморочек c SFC.
    Отлаживать алгоритм на SFC намного проще, чем тот-же СASE на ST

  5. #5

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Отлаживать алгоритм на SFC намного проще, чем тот-же СASE на ST
    Вот именно. Поэтому я и стараюсь активно использовать SFC.
    Я ж с чего вопрос начал: с того, что с CASE знаком (и бесконечные труды определенных людей под умными названиями, но малосодержательным контентом "Применение SWITCH технологий...." перечитал пачками).Как сделать все это с помощью CASE я хорошо представляю.
    Но SFC отнюдь не зря придумали! Это ОЧЕНЬ выразительный инструмент абстракции и реализации.

    Не совсем поднял идею "Оформите автомат в виде отдельного ФБ и делайте в программе на любом языке предварительные действия, потом вызывайте ФБ на SFC, а после него - операторы с выводом, обработкой экраном и т.д."
    У меня именно "основной алгоритм-автомат" на SFC как раз и является самым "диалоговым" компонентом. Если я его оформлю в FB то в нем и придется вернуться к вопросу взаимодействия с дисплеем/кнопками.
    Может неправильно понял Вашу мысль ? Или не донес свою

  6. #6

    По умолчанию

    Цитата Сообщение от dorofeevms Посмотреть сообщение
    Вот именно. Поэтому я и стараюсь активно использовать SFC.
    Я ж с чего вопрос начал: с того, что с CASE знаком (и бесконечные труды определенных людей под умными названиями, но малосодержательным контентом "Применение SWITCH технологий...." перечитал пачками).Как сделать все это с помощью CASE я хорошо представляю.
    Но SFC отнюдь не зря придумали! Это ОЧЕНЬ выразительный инструмент абстракции и реализации.

    Не совсем поднял идею "Оформите автомат в виде отдельного ФБ и делайте в программе на любом языке предварительные действия, потом вызывайте ФБ на SFC, а после него - операторы с выводом, обработкой экраном и т.д."
    У меня именно "основной алгоритм-автомат" на SFC как раз и является самым "диалоговым" компонентом. Если я его оформлю в FB то в нем и придется вернуться к вопросу взаимодействия с дисплеем/кнопками.
    Может неправильно понял Вашу мысль ? Или не донес свою
    Наверное я не совсем понял задачу

  7. #7

    По умолчанию

    Ответственность на мне, я плохо объяснил.
    Если интересно продолжить - я сейчас "очищу" все шаги в копии проекта, уберу несколько, чтобы на экрах входило, и пришлю, с комментариями.

  8. #8

    По умолчанию

    Добавляю, ибо уже в дороге.
    Начиная с шага CheckHadware, все шаги - waitrepair , step7-step12, подразумевают активный диалоговый режим. Некоторые шаги из череды step7-step12 имеют вложенные sfc алгоритмы.
    Итак, выводить инф и получать данные с клавиатуры необходимо на многих разных шагах.
    Если бы это был case(switch) вариант, то я после обработки состояния вызвал бы некий Updatedisplay (msg), где и оформил бы весь вывод.
    Ну и теперь уже сам прихожу к выводу, что тут так не прокатит… придется в Каждом шаге, где необходим вывод, вызывать FB ,который будет отвечать за обновление интерфейса.
    Есть, правда , еще один вариант, я им пользуюсь в С.
    Можно запустить ПАРАЛЛЕЛЬНЫЙ всем веткам ПРОЦЕСС, от checkhardware до самого конца, котрый будет делать Единственную функцию -обновлять вывод на экран. Но будет делать он это ПРИ УСТАНОВЛЕННОМ ФЛАГЕ, скажем, needUpdate=true (придется делать глобальную переменную, либо, что лучше, вызывать «глобальную» функцию типа update(msg, true), которая и флаг установит и месседж запишет).
    А вот флаг устанавливать в шагах основного алгоритма.
    После обновления интерфейса параллельный процесс , разумеется, сразу сбрасывает флаг.


    Вот и хотел обсудить подходы)
    Последний раз редактировалось dorofeevms; 12.10.2024 в 14:52.

  9. #9

    По умолчанию

    Если под выводом на экран подразумевается именно формирование экрана, имеющего для каждого из шагов SFC индивидуальный вид - я лично не вижу ничего плохого в том, чтобы делать это непосредственно внутри этого шага (или там вызывать ФБ экрана).
    А как параллельный процесс будет получать информацию о том, какой именно экран (или что именно) нужно выводить сейчас?

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,053

    По умолчанию

    Цитата Сообщение от dorofeevms Посмотреть сообщение
    ..выводить инф и получать данные с клавиатуры необходимо на многих разных шагах...
    ...Если бы это был case(switch) вариант, то я после обработки состояния вызвал бы некий Updatedisplay (msg), где и оформил бы весь вывод.
    ...Можно запустить ПАРАЛЛЕЛЬНЫЙ всем веткам ПРОЦЕСС, от checkhardware до самого конца, котрый ... -обновлять вывод на экран. Но будет делать он это ПРИ УСТАНОВЛЕННОМ ФЛАГЕ, скажем, needUpdate=true (придется делать глобальную переменную, либо, что лучше, вызывать «глобальную» функцию типа update(msg, true), которая и флаг установит и месседж запишет).
    .. флаг устанавливать в шагах основного алгоритма. ...После обновления интерфейса параллельный процесс , разумеется, сразу сбрасывает флаг.
    Updatedisplay, checkhardwar, needUpdate, глобальные переменные, вызвать, сбросы, набросы ... 8(


    Цитата Сообщение от dorofeevms Посмотреть сообщение
    ... SFC начал использовать сравнительно недавно.
    Цитата Сообщение от dorofeevms Посмотреть сообщение
    ...Ну и теперь уже сам прихожу к выводу, что тут так не прокатит…
    Чо?
    Цитата Сообщение от dorofeevms Посмотреть сообщение
    ..Вот и хотел обсудить подходы)
    Начни со справки в самой КДС


    ---
    Но сам юзаю ST))
    Вложения Вложения

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Вопрос о правильном соединении плат шлейфами в ТРМ-32.
    от Odissey в разделе Контроллеры для систем отопления и ГВС
    Ответов: 0
    Последнее сообщение: 29.11.2018, 02:09
  2. И снова ПИД...
    от werg в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 31.05.2016, 16:55
  3. и снова ПКП...
    от panfilov в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 07.05.2015, 14:10
  4. и снова 212
    от мастер в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 18.11.2009, 07:22
  5. и снова о си-8
    от Владимир А. в разделе Эксплуатация
    Ответов: 16
    Последнее сообщение: 06.02.2009, 14:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •