Уважаемые коллеги.
Вопрос из области лучших практик, философско-технического плана.
На ST, FBD , С и тд давно программирую. SFC начал использовать сравнительно недавно.
Пока на SFC реализуется простой автомат, я бы даже сказал - с (почти) любым уровнем сложности, вопросов много не возникает.
Но тут попала мне задача, вроде бы простая на первый взгляд, однако требующая достаточно большого "интерактива" с оператором, HMI "в полный рост".
Не суть важно, на чем ее реализовать необходимо, я , исключительно для целей отладки "в натуре" взял имеющийся под рукой PLC73, суть в следующем:
- SFC, прекрасно подходит для решения задачи, в том числе с подзадачами и "вспомогательными" процессами,
если алгоритм предусматривает достаточно много шагов, и каждый шаг может генерировать несколько сообщений, а некоторые ветки задачи требуют ввода,
КАК логичнее/красивее реализовать ЦЕНТРАЛИЗОВАННЫЙ вывод на экран ?
Поясняю: когда использую state machine, например в С, или даже ST, то перед вызовом SM я один раз считываю входы и проверяю ошибки, в каждом состоянии я решаю некие логические задачи, в соответствии с алгоритмом устанавливаю выходы (как правило - переменные, выходы - централизованно в конце) , И ПОСЛЕ ОТРАБОТКИ СОСТОЯНИЯ один раз обновляю дисплей. То есть в некоемом (любом) состоянии при появлении сообщения для
оператора я складываю его в буфер и вывожу все (ошибки, сообщения и тд) в одном месте в конце. Очень удобно: форматируется все в одном месте, в зависимости от типа - ошибка, инфо и тд - выводится префикс и тд...
И вот тут-то я и задумался: в "конце цепочки" SFC нельзя реализовать - алгоритм может крутиться, например, на шаге автонастройки, или цепочки задания рецепта (а там много ввода и проверок), и, с точки зрения SFC все это -
ОДИН шаг.
Вызывать В КАЖДОМ шаге "последним оператором" (действием) нечто вроде UpdateDisplay (MSG_TYPE, MSG_TEXT......) - можно, но, почему-то в душе я пока не привык к этой идее.
Подумал, добавить выходное действие к шагу, но, учитывая, что может быть SFC внутри SFC (сам пока не делал, но на форуме такая тема есть и мне она понятна!!!) этот вариант ТОЖЕ НЕ очень подходит, ибо пока алгоритм работает внутри одного шага - он также может генерировать сообщения и обрабатывать ввод, а выходное действие выполнится только после перехода к следующему шагу.....
С благодарностью послушаю мнения экспертов и бывалых!
Михаил