Страница 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

    По умолчанию

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

  9. #9

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Да, давайте посмотрим
    Дико извиняюсь. Перед отпуском подвалило работы.
    Сильно "кастрировал" алгоритм, убрал и часть ветвей и часть шагов. Но суть осталась.
    Сейчас напишу , позже дополню вопросами, собираюсь в дорогу...выжимка из алгоритма.jpg

  10. #10

    По умолчанию

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


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

Страница 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

Ваши права

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