Вход:  Пароль:  
FreeSource: Etersoft/UniSet/ЗапускПроцесса ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

О запуске процесса

При своём запуске процесс должен инициализировать начальное состояние. В эту задачу входит:


Для решения этого вопроса сейчас используется следующий подход:
При своём старте процесс (после получения System Message?::Start Up?) заказывает все необходимые ему датчики.
При заказе (если не указано обратное) процессу сразу приходит сообщение Sensor Message? и тем самым происходит начальная инициализация.
К плюсам такого подхода можно отнести то, что не надо писать специальную функцию инициализации, потомучто используется таже функция обработки, что и в работе.
Я бы сказал, что написать отдельно инициализацию может быть даже полезно. В конце концов инициализация – это не реакция на события /Vitaly Lipatov/

Как раз, по моему, не должна отличатся обработка события «изменения состояния входа» во время работы от «начальная инициализация состояния» во время старта.

К минусам относится то, что когда запускаются процессы на узле (например при запуске) происходит активный обмен сообщениями между процессами управления и процессами ввода/вывода, отвечающими за датчики. Хотя с другой стороны это нормально, и подобную нагрузку система должна выдерживать.


Если отказаться от функции askValue, то необходимо чётко выработать механизм начальной инициализации. При этом всё равно встаёт вопрос об использовании функции getValue, от которой хотели уйти.
Использовать askValue для заказа категорически нельзя в самой систем. getValue тоже не нужна, поскольку состояния приходят сами. Остаётся обеспечить, чтобы после запуске процесса ему были присланы состояния всех датчиков, и сам он знал, присланы они или нет.

В том-то вопрос и состоит. Чтобы процессу пришли сообщения об «актуальных» состояниях датчиков он должен как-то сообщить о своём старте ПРОЦЕССАМ ввода/вывода. При этом мы стремимся к тому, что процесс управления когда хочет узнать состояние датчика в общем случае не знает к какому процессу в/в принадлежит тот или иной датчик. Сейчас как раз используется самый удобный и простой механизм. Процесс запускается и при помощи askValue сообщает процессу в/в, что он запустился и необходимо прислать ему сообщение о текущем состоянии указанного входа. При этом не требуется никаких специальных сообщений. Каждый процесс запускается и получает текущее состояние необходимых ему для работы входов, а далее начинает его получать только при изменении состояния.

Принятые на данный момент решения:


Возможно придётся усложнить информацию о датчике – значение, ID и ещё актуализирован он или нет. /Vitaly Lipatov/
Сейчас в сообщении (Sensor Message?) содержится время последнего изменения состояния. Я так понимаю это и есть необходимая информация.


Страницы, ссылающиеся на данную: Etersoft/UniSet
Etersoft/UniSet/ПредлагаемыеИзмененияВОбъектах


 
Файлы [Скрыть файлы/форму]
Комментариев нет. [Показать комментарии/форму]