Russian Qt Forum

Программирование => Общий => Тема начата: lit-uriy от Октябрь 29, 2015, 07:13



Название: Инициализация конечного автомата после сбоя
Отправлено: lit-uriy от Октябрь 29, 2015, 07:13
оговорка: использую Qt и её QStateMachine, но интересует и абстрактная система.

Дано:
- Имеется оборудование с насосами,
- имеется средство двусторонней связи оборудования с компьютером и
- ПО управляющее этим оборудованием.
Программно реализован конечный автомат управления насосами.

Бывают ситуации, когда нужно инициализировать конечный автомат в зависимости от фактического текущего состояния оборудования, например, после аварийного завершения ПО.
Т.е. ПО стартует и должно определить в каком состоянии должен находится автомат, на основе сигналов с оборудования.

Для простоты предположим, что комбинация сигналов однозначно определяет текущее состояние автомата.

В практике программирования автоматов обычно из одного состояния в другое можно перейти только по событию, в частности в QStateMachine реализовано так же.


Проблема:
Т.к. физическая система находится в неком стабильном состоянии, то и событий в ней не происходит.
Как заставить автомат перейти в некое состояние минуя, возможно, многие другие?

Есть ли у кого-нибудь опыт/идеи как это сделать?

Сообщение отредактировал Litkevich Yuriy - 27.10.2015, 14:47


Название: Re: Инициализация конечного автомата после сбоя
Отправлено: Fat-Zer от Октябрь 31, 2015, 19:15
Первое что приходит в голову — добавить сурогатное начальное состояние, и переход из него по внутреннему событию в любое нужное состояние по анализу информации на датчиках.
Или изначально определить и передать в QStateMachine нужное начальное состояние.


Название: Re: Инициализация конечного автомата после сбоя
Отправлено: lit-uriy от Ноябрь 01, 2015, 19:18
>>Или изначально определить и передать в QStateMachine нужное начальное состояние.
Такой вариант мне в голову пока не приходил.
Вот что значит зациклился.

Спасибо, поработаю над этим вариантом.