roboforum.ru

Технический форум по робототехнике.

 

Граф состояний, последовательность на Си

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Граф состояний, последовательность на Си

Сообщение executer » 24 мар 2009, 02:52

Вот, в связи с кризисом, писал код для охранной сигнализации, кусок привожу тут, как заготовку.
Работа МК по графу состояний (текстовое описания графа состояний на Си с условиями перехода и задержками):
Код: Выделить всёРазвернуть
int             Step=0;                         // Current step of sequence
int             Next=0;                         // Next step of sequence
long            Delay=0;                        // Delay before next sequence step 
long            DelayPrev=0;                    // Previous delay
long            Time_s;                         // Счетчик равных промежутков времени (на таймере)
unsigned char   Temp;                           // Temporary variable


...
...
        switch(Step)    // переход и обработка только текущего состояния графа
        {

// ******* Step 0 ******* Restart delay
        case 0:
            Next = 1;   // узел с безусловным переходом в узел №1 с задержкой 10 ед.
            Delay = 10;
        break;

// ******* Step 1 ******* Sensor sygnal wait
        case 1:
            ......      ; // действия пока находимся в этом узле

            if(Condition) // условие перехода в узел 2 с задержкой 2 ед.
            {
                Next = 2;
                Delay = 2;       
                ...       // действия будут выполнятся во время задержки перехода
            }
            if(Condition2) // условие перехода в узел N с задержкой T ед.
            {
                Next = N;
                Delay = T;       
                ...       // действия будут выполнятся во время задержки перехода
            }
        break;

// ******* Step X *******    // для каждого узла(состояния) ставим в соответствие уникальный номер, и расписываем
                             // условия выхода из этого узла
        case X:
            {
                Next = Y;
                Delay = Delay; 
            }
        break;             
        };                             
     
// ******* Sequence processing *******     
        if(DelayPrev != Delay)
        {
            DelayPrev=Delay;
            OffDelay(Delay, &DelaySeq, 1);
        }
        Temp = OffDelay(Delay, &DelaySeq, 0);
        Temp = FN(&FrontStore, Temp);
        if(Temp)
        {
            DelayPrev=0;
            Delay=0;
            Step=Next;

            printf("Step number = %u ; Time = %u;\n\r",Step,Time_s); // ну это для отладки
        }

// Вспомогательные функции
unsigned char OffDelay(long Delay, long *Storage, unsigned char Go)  // OffDelay таймер.
{
    if(Go) *Storage = Time_s;
    return ( (Delay + *Storage) >= Time_s );
}

unsigned char FN(unsigned char *Store, unsigned char Value) // определение заднего фронта (спада) аргумента Value
{
    bit tmp;
       
    tmp = *Store && !Value;
    *Store = Value;
    return (unsigned char)tmp;
}
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Граф состояний, последовательность на Си

Сообщение =DeaD= » 24 мар 2009, 09:36

- На что жалуетесь?
- Я не жалуюсь, я хвастаюсь!
(с) известный анекдот

:D

(Это в смысле как пример приведено или какой-то вопрос есть? :))
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Re: Граф состояний, последовательность на Си

Сообщение executer » 24 мар 2009, 09:51

нет, все работает :good: . Поэтому и выложил в роботехнике для начинающих, как пример. Не думал что для всех этот код очевиден :pardon:
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Граф состояний, последовательность на Си

Сообщение =DeaD= » 24 мар 2009, 10:09

Ну граф состояний если понять, что такое, то вроде код самоочевиден, а вот для новичков ли это и какое отношение имеет к основам роботостроения? :) но разово думаю лишним не будет, хотя массово так лучше не делать :).
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Re: Граф состояний, последовательность на Си

Сообщение Myp » 24 мар 2009, 10:39

эммм
а зачем он нужен?
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15948
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Граф состояний, последовательность на Си

Сообщение executer » 24 мар 2009, 12:03

ну, например, такую последовательность действий как "танец" легко описать, но это линейная последовательность. Интереснее чтонибудь с ветвлениями, например суточный цикл робота - если стемнело он заспает, если днем ехал-ехал и разрядился - начинает поиск зарядки и т.д..
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Граф состояний, последовательность на Си

Сообщение =DeaD= » 24 мар 2009, 12:37

Граф состояний это зашибительская штука :)

С её помощью можно регулярные выражения отрабатывать!

А еще она очень глюкоустойчивая, в том смысле что наглядная, в ней особо много глюков не сделаешь.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Re: Граф состояний, последовательность на Си

Сообщение Vooon » 24 мар 2009, 20:31

Dead это не глюкоустойчивая, а дуракоустойчивая штука.
Myp я тебе писал разбор команд как раз таким образом. :)
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3326
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Граф состояний, последовательность на Си

Сообщение Виталий » 25 мар 2009, 00:33

И глюкоустойчивая в том числе.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Mail.ru counter