DRAKON.SU

Текущее время: Четверг, 13 Декабрь, 2018 21:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Программируем с и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 16:02 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Добрый день!
Случайно наткнулся на "ДРАКОН". Немного почитал - понравилось! Скачал интегрированную среду, попробовал рисовать алгоритмы - понравилось!!
Всё получается, всё понятно. Немедленно захотел увидеть чудо - генерацию программного шаблона по алгоритму. А вот тут - не получается! Уже сутки читаю форум, уже скачал полный проект для микроконтроллера, и даже из него не могу получить текст программы. Помогите пожалуйста, подскажите, "куда нажимать"?

С уважением, Ефанов Сергей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тестирование и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 20:07 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Сергей
Цитата:
Всё получается, всё понятно.
Замечательно то, что для вас понятно и получается.
Вы уже проделали большой путь в освоении языка Дракон и и.с. Drakon и готовы пройти его полностью.

Цитата:
Уже сутки читаю форум, уже скачал полный проект для микроконтроллера, ... Помогите пожалуйста, подскажите, "куда нажимать"?
На форуме не обсуждалось программирование с использованием среды Drakon и нет проекта для скачивания.

В справке к программе есть раздел "Программирование, синтез ПО", но в нем нет реального примера.

Найдите среду программирования для микроконтроллера, выберите свой совсем маленький пример для программирования, в и.с. Drakon разработайте алгоритм в терминах предметной области, получите шаблон для размещения программного текста на языке программирования.

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

На форуме создайте свою тему, например "Программируем с и.с. Drakon" и кратко рассказывайте о своих успеха, трудностях. На вопросы ответим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тестирование и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 20:17 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Спасибо за быстрый ответ. Продолжу в теме "Программируем с и.с. Drakon".
С уважением, Ефанов Сергей.

Первые три сообщения перемещны из темы viewtopic.php?f=79&t=2689 для "полноты и целостности".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Программируем с и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 20:29 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Создаю "суперсложную" дракон-схему (приложено),
И хочу получить от и.с. Drakon файл предположительно такого вида:

// выключатель

if() // кнопка нажата
{
// включить огонёк
}
else
{
// выключить огонёк
}

Такое - возможно?

С уважением, Ефанов Сергей.


Вложения:
выключатель.drt [523 байт]
Скачиваний: 310
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 21:04 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Вы используете старый выпуск программы, рекомендуется тестовый выпуск от 24.12.2010.

Вложение:
выключатель.png

Вложение:
выключатель.drt


Сформирован шаблон программного текста для языка С.
Получен при двойном клике на 4-м квадрате (черном) схемы.
Многоточия необходимо заменить текстом на языке С в соответствующих программных текстовых приложениях (3-х квадратах).

Код:
    /* D:\исДРАКОН\Копия Drvo\выключатель.drt */
    /* 1. И.с. Drakon. Трансляция маршрутной части. Изменение 06.01.2011 20:20:25 */
......
    /* */
    /* ==================== Шампур */
    /* 2. Заголовок // Выключатель */
    /* 4. Вопрос // Кнопка нажата? */
......
if (Usl==0) goto L9;
    /* 8. Действие // Включить огонёк */
......
L3:
    /* 3. Конец // Конец */
......
    /* */
    /* ==================== Шампур */
L9:
    /* 9. Действие // Выключить огонёк */
......
goto L3;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 21:31 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Спасибо, именно этот ответ мне и нужен был.
Попробую теперь кусочек реального алгоритма...

С уважением, Ефанов Сергей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Четверг, 06 Январь, 2011 23:53 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Попробовал закодировать реальную функцию из реальной программы.
Случилось вот что: нужный алгоритм идеально изображается в виде "силуэта".
"Силуэт" потом компилируется в конечный автомат.
Именно конечный автомат мне и нужен (вся программа - набор конечных автоматов).
Но есть одно "но".
Получившийся в ДРАКОНЕ автомат НЕ использует переменную состояния. (Использует goto).
А вся программа построена на принципах "автоматного программирования": автомат получает управление, делает один шаг, запоминает своё состояние, и отдаёт управление. В совокупности получается подобие многозадачной системы.
Автомат, получившийся из схемы на ДРАКОНЕ не может отдавать управление между шагами.
При попытке реализовать конечный автомат в ДРАКОНЕ на переключателе получается полная ерунда, очевидна искусственность такой попытки, её неправильность.
Пока не соображу, как бы выйти из этой ситуации.
Нужна конструкция, которая бы могла отдавать управление каждый раз при переходе "снизу вверх" в силуете.
Такое вообще возможно?
- Очевидное решение - вставить "паузу р.в" не подходит из за отсутствия RTOS.

С уважением, Ефанов Сергей.


Вложения:
rx_sms.drt [3.34 КБ]
Скачиваний: 298
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 06:38 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Вложение:
rx_sms.png
Вложение:
rx_sms_AA.png

Вложение:
rx_sms_AA.drt

Смотрите в тексте помеченное !!!
Код:
    /* D:\исДРАКОН\Копия Drvo\rx_sms_AA.drt */
    /* 1. И.с. Drakon. Трансляция маршрутной части. Изменение 07.01.2011 05:50:27 */
...... !!! Этот 3-й квадрат находится в заголовке схемы
           В нем должно быть: объявление процедуры, объявление переменных, начало тела процедуры т.е. {. Там же объявляется переменная Usl.
    /* */
    /* ==================== Шампур */
    /* 2. Заголовок // Чтение СМС */
    /* 4. ИмяВетки // Ждём новую СМС */
L12:
    /* 12. Вопрос // флаг приёма СМС? */
Usl = GSM.RxSms;
if (Usl==0) goto L24;
    /* 23. Действие // сбросить флаг СМС */
GSM.Sms = 0;
    /* 5. Адрес // ждём готовность модуля GSM */
goto L26;
    /* */
    /* ==================== Шампур */
L24:
    /* 24. Период // . */
...... !!! Нет RTOS. Задержка будет определяться временем проверки условия и выполнения Goto. В квадрат поставьте комментарий
goto L12;
    /* */
    /* ==================== Шампур */
    /* 19. ИмяВетки // ждём готовность модуля GSM */
L26:
    /* 26. Вопрос // модуль связи свободен? */
Usl = (GSM.Use == 0);
if (Usl==0) goto L48;
    /* 28. Действие // Занять модуль связи выдать команду чтения СМС */
GSM.Use = true;
GSM.Ok = false;
GSM.SmsDel = false;
printf("^^GAT+CGSMRD=%d\r",count);
    /* 20. Адрес // ждем текст читаемой СМС */
goto L35;
    /* */
    /* ==================== Шампур */
L48:
    /* 48. Период // . */
......
goto L26;
    /* */
    /* ==================== Шампур */
    /* 30. ИмяВетки // ждем текст читаемой СМС */
L35:
    /* 35. Вопрос // текст СМС помещён в буфер? */
Usl = GSM.RdOk;
if (Usl==0) goto L43;
    /* 39. Вставка // Анализ */
    /* -27. ПравКомментарий // произвести анализ принятой СМС */
Analiz();
    /* 31. Адрес // стирание СМС */
goto L10;
    /* */
    /* ==================== Шампур */
L43:
    /* 43. Вопрос // Флаг Error? */
Usl = GSM.Error;
if (Usl==0) goto L25;
goto L10;
    /* */
    /* ==================== Шампур */
L25:
    /* 25. Пауза // 5 сек */
......
goto L10;
    /* */
    /* ==================== Шампур */
    /* 49. ИмяВетки // стирание СМС */
L10:
    /* 10. Пауза // 0.5 сек */
...... !!! Нет RTOS. Вызовите процедуру со счетчиком тактов на 0.5 секунды
    /* 62. Действие // сбросить флаг ОК сбросить флаг ERROR выдать команду стирания СМС */
GSM.Ok = 0;
GSM.Error = 0;
printf("^^GAT+CMGD=%d\r",count);
    /* 50. Адрес // Закончить чтение */
goto L11;
    /* */
    /* ==================== Шампур */
    /* 15. ИмяВетки // Закончить чтение */
L11:
    /* 11. Пауза // 1.0 сек */
......
    /* 9. Действие // Освободить модуль GSM */
GSM.Use = false;
    /* 16. Адрес // Ждём новую СМС */
goto L12;
}

Многоточиям соответствуют 3-и квадраты, они должны содержать программный код.
Цитата:
Получившийся в ДРАКОНЕ автомат НЕ использует переменную состояния. (Использует goto).
Как таковая, переменная не требуется. С goto ваш автомат будет работать быстрее.
Цитата:
Автомат, получившийся из схемы на ДРАКОНЕ не может отдавать управление между шагами.
Вызывайте процедуры иконой "Вставка" или выполняйте непосредственно в данной схеме действия в иконе "Действия".
Цитата:
При попытке реализовать конечный автомат в ДРАКОНЕ на переключателе получается полная ерунда,
Речь идет о блоке "Переключатель"? В чем проблема? Что не устраивает, почему ерунда?
Цитата:
Нужна конструкция, которая бы могла отдавать управление каждый раз при переходе "снизу вверх" в силуэте.
Такое вообще возможно?
Кому передавать управление? Вызывайте процедуры.
Внутри ветки схемы "Силуэт" управление "снизу вверх" передается после изменения схемы операцией "Пересадить лиану", при этом образуется цикл.
Цитата:
из за отсутствия RTOS.
Нет RTOS, значить необходимо передавать управление непосредственно вызовом процедур.

Сергей, ответил на ваши вопросы так, как их понял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 10:25 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Цитата:
При попытке реализовать конечный автомат в ДРАКОНЕ на переключателе получается полная ерунда,
Цитата:
Речь идет о блоке "Переключатель"? В чем проблема? Что не устраивает, почему ерунда?


При попытке изобразить автомат с использованием переключателя, на получившемся листе хорошо виден (первым бросается в глаза) имено переключатель. А алгоритм работы, который реализован на этом переключателе, уходит на задний план. В то же время, "силуэт" показывает наглядно именно алгоритм работы, пряча внутри себя способ реализации этого алгоритма. Не знаю, сумел ли я понятно выразить свою мысль...

Цитата:
Нужна конструкция, которая бы могла отдавать управление каждый раз при переходе "снизу вверх" в силуэте.
Такое вообще возможно?
Цитата:
Кому передавать управление? Вызывайте процедуры.


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

Я тут прикрепил файлик на языке Си, иллюстрирующий мой способ написания программ. Заранее прошу снисхождения - я программист "ненастоящий", а, скорее, "программирующий схемотехник". В файле приведен пример некой абстрактной программы, состоящей из трёх автоматов по три состояния каждый (приведена реализация только одного из них, остальные подразумеваются подобными ему). Так вот, суть моих вопросов сводится к следующему: "как алгоритм, реализованный в этой программе, описать на языке ДРАКОН"?

Цитата:
Сергей, ответил на ваши вопросы так, как их понял.


Огромное Вам спасибо за ответы!
Не хотелось бы злоупотреблять Вашим терпением, так что Вы намекните, когда мне следут отстать со своими глупыми вопросами.

С уважением, Ефанов Сергей.

Код:
// В системе есть прерывание по таймеру,
// в нём инкрементируется счётчик "тиков"

#define SEKUNDA 1000L // за секунду происходит 1000 "тиков"

unsigned long int GetTime(void); // эта функция возвращает копию счётчика "тиков"
void init(void);// эта функция настраивает таймерное прерывание

extern volatile bool FlagA; // некое внешнее условие
extern volatile bool FlagB; // некое внешнее условие

// типичный автомат
void Step1(void)
{
    static unsigned long int Time; // "местное время", переменная 32 бита
   static char ss;// переменная состояния автомата

    switch(ss)
    {
    case 0:
        if(FlagA)// что то произошло, на это надо реагировать
        {
            FlagA = false;
            Time = GetTime();// запомнить текущее время
           ss = 1;
        }
        break;

    case 1:
        if((GetTime() - Time) >= SEKUNDA*45)// условие выполнится через 45 секунд.
        {
           ss = 2;
        }
        break;

    case 2:
        if(FlagB)// опять что то произошло...
        {
            FlagB = false;
           ss = 0;
        }
        break;
    }
}

// вся программа реализована на таких автоматах:
void Step2(void); //  построен по тому же принципу, что и Step1
void Step3(void); //  построен по тому же принципу, что и Step1


// в главном цикле все автоматы вызываются "по кругу":
void main(void)
{
    init(); //  настроить прерывание и всё, что нужно.
   for(;;)
   {
      Step1();
      Step2();
      Step3();
   }
}

// функция, реализующая автомат, при каждом вызове возвращает управление очень быстро.
// в состоянии "1" автомата приведён пример отработки задержки. Вычисляется разница
// между  текущим моментом времени, и моментом, когда произошёл переход.
// Это вычисление занимает несколько микросекунд. Переход произойдёт (в данном примере) через 45 секунд.
// В течении этого времени автомат много-много раз ненадолго получает управление, производит вычисление,
// и тут же возвращает управление.
// В итоге, в системе одновременно работают 3 автомата, каждый отрабатывает свои временные
// интервалы, не задерживая работу остальных.

// В реальных программах у меня типично 20-30 автоматов с числом состояний
// от 10 до 100, отрабатывающих выдержки  от миллисекунд до суток. Всё это хорошо работает,
// но "пасти" такое "стадо кошек" нелегко.
// Вся надежда на помощь ДРАКОНа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 11:34 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Здравствуйте, Сергей!

Вообщето Ваша Задача хорошо решается с использованием Кооперативной операционной системы, например ProtoThreads Адама Дункельса:
http://www.sics.se/~adam/pt/
Советую посмотреть, интересно...

А еще посмотрите тему http://forum.oberoncore.ru/viewtopic.php?f=79&t=2718, может быть найдете что-нибудь полезное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 12:43 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Вложение:
Новый_57.drt

Вложение:
Новый_57.png

Модуль с 3 процедурами.
Текст модуля получаем при двойном клике на 4-квадрате иконы
Код:
/* Программный текст заголовка модуля, объявление переменных модуля "Сборка текста модуля"
*/
    /* D:\исДРАКОН\Копия Drvo\Новый_57.drt */
    /* 7. И.с. Drakon. Трансляция маршрутной части. Изменение 07.01.2011 12:13:30 */
......
    /* */
    /* ==================== Шампур */
    /* 8. Заголовок // Main */
L10:
    /* 10. Вставка // Step1 */
......
    /* 11. Вставка // Step2 */
......
    /* 12. Вставка // Step3 */
......
goto L10;
}

    /* D:\исДРАКОН\Копия Drvo\Новый_57.drt */
    /* 9. И.с. Drakon. Трансляция маршрутной части. Изменение 07.01.2011 12:17:57 */
......
    /* */
    /* ==================== Шампур */
    /* 13. Заголовок // Step1 */
    /* 16. Выбор // ss */
......
if (Usl==30) goto L33; /* 0 */
if (Usl==31) goto L32; /* 1 */
if (Usl==35) goto L36; /* 2 */
    /* 30. Вариант // 0 */
L33:
    /* 33. Вопрос // FlagA */
......
if (Usl==1) goto L46;
L15:
    /* 15. Конец // Конец */
......
    /* */
    /* ==================== Шампур */
L46:
    /* 46. Действие // FlagA=False Time = GetTime() ss = 1 */
......
goto L15;
    /* */
    /* ==================== Шампур */
    /* 31. Вариант // 1 */
L32:
    /* 32. Вопрос // (GetTime() - Time) >= SEKUNDA*45 */
......
if (Usl==1) goto L48;
goto L15;
    /* */
    /* ==================== Шампур */
L48:
    /* 48. Действие // ss = 2 */
......
goto L15;
    /* */
    /* ==================== Шампур */
    /* 35. Вариант // 2 */
L36:
    /* 36. Вопрос // FlagB */
......
if (Usl==1) goto L45;
goto L15;
    /* */
    /* ==================== Шампур */
L45:
    /* 45. Действие // FlagB=False ss = 0 */
......
goto L15;
}

    /* D:\исДРАКОН\Копия Drvo\Новый_57.drt */
    /* 17. И.с. Drakon. Трансляция маршрутной части. Изменение 07.01.2011 12:14:02 */
......
    /* */
    /* ==================== Шампур */
    /* 19. Заголовок // Step2 */
    /* 20. Действие // Некоторые действия */
......
    /* 21. Конец // Конец */
......
}

    /* D:\исДРАКОН\Копия Drvo\Новый_57.drt */
    /* 24. И.с. Drakon. Трансляция маршрутной части. Изменение 07.01.2011 12:14:10 */
......
    /* */
    /* ==================== Шампур */
    /* 25. Заголовок // Step3 */
    /* 26. Действие // Некоторые действия */
......
    /* 27. Конец // Конец */
......
}

/* Програмный текст завершение модуля

 */

Цитата:
// Вся надежда на помощь ДРАКОНа.
Вы уж очень быстро хотите освоить и наработать навык. Желаю успехов.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 13:11 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Цитата:
Вообщето Ваша Задача хорошо решается с использованием Кооперативной операционной системы, например ProtoThreads Адама Дункельса:
http://www.sics.se/~adam/pt/
Советую посмотреть, интересно...
Более, чем интересно! Сразу - не понял, в чём туть суть (где библиотеки, где "порты" под целевые процессоры?), попробовал тупо скомпилировать для своего процессора - скомпилировалось. Удивился. Запустил в отладчике - РАБОТАЕТ! Обалдел!
Смотрю теперь на это чудо, вникаю. Просто switch и case с номером строки исходника, и... работает!
Спасибо! Кажется, это именно то, что мне нужно. Одна из причин, по которой не применяю RTOS в своих программах - они все (как выясняется - не все) построены на манипуляциях со стеком, из за чего плохо "дружат" с компиляторами, привязаны к конкретным их версиям, имеют кучу ограничений (типа - оптимизацию - не включать, printf - не использовать, и т.п).
Здесь этого ничего нет. Собственно, ОСи в привычном понимании тоже нет, но она то мне как раз и не нужна, нужен - единственный сервис: возврат управления из произвольной точки. Сейчас попробую вставить это в ДРАКОН схему. Кажется, дело пойдёт!
Цитата:
А еще посмотрите тему http://forum.oberoncore.ru/viewtopic.php?f=79&t=2718, может быть найдете что-нибудь полезное.
Посмотрел, но тут как то немного не для меня.

С уважением, Ефанов Сергей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Пятница, 07 Январь, 2011 18:01 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Цитата:
Поработал над вашей задачей и вижу, что требуются выполнить некоторые доработки.
Не надо ничего дорабатывать! После изучения:
Цитата:
Кооперативной операционной системы, например ProtoThreads Адама Дункельса:
http://www.sics.se/~adam/pt/
написал три простеньких макроса:
Код:
#define rt_begin static unsigned int ss; switch(ss){ default: ss = 0; case 0:
#define rt_end ss = 0;}
#define rt_free ss = __LINE__; break; case __LINE__:
Это всё, что мне было нужно, чтобы подружить ДРАКОН со своими автоматами. Теперь я могу спокойно во все циклы ожидания вставлять иконку "Пауза" с макросом "rt_free", и задача решается! Удивительно простое решение, спасибо за подсказку Петру Приклонскому и шведу Адаму Дункельсу!
Цитата:
Вы уж очень быстро хотите освоить и наработать навык. Желаю успехов.
Не совсем так. Я хотел быстро понять - годится этот инструмент для меня, или нет? Теперь вижу - годится! И уже не торопясь буду "осваивать и нарабатывать навык". Большое спасибо за инструмент, за помощь и добрые пожелания! И (смущённо) - вряд ли я сумею обойтись без дополнительных вопросов...

С уважением, Ефанов Сергей.

PS: микро-псевдо OS, которая получается из этих трёх макросов:
Код:
#define rt_begin static unsigned int ss = 0; switch(ss){ default: ss = 0; case 0:
#define rt_end ss = 0;}
#define rt_free ss = __LINE__; break; case __LINE__:
#include <stdio.h>

void Task1(void)
{
    rt_begin; // шапка свеху
    printf("task_1_0\n");
    rt_free;   // тут мы возвращаем управление, при следующем вызове продолжим со следующей строчки
    printf("task_1_1\n");
    rt_free  // тут мы возвращаем управление, при следующем вызове продолжим со следующей строчки
    printf("task_1_2\n");
    rt_end; // ботинки снизу
}

void Task2(void)
{
    rt_begin;
    printf("task_2_0\n");
    rt_free; 
    printf("task_2_1\n");
    rt_free
    printf("task_2_2\n");
    rt_end;
}

void main(void)
{
    for(;;)
    {
        Task1();
        Task2();
    }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Суббота, 08 Январь, 2011 14:04 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
efanov писал(а):
PS: микро-псевдо OS, которая получается из этих трёх макросов:
Код:
...
Ещё бы это всё полностью визуализировалось (не оставаясь кусочно скрытым в текстах приложений) - чтобы получать подлинно визуальные спецификации решений. А так это с позиций когнитивного качества для формализации "между программистами"... которые будут "усилием специфически натренированной мысли" связывать вершины с приложениями воедино :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Суббота, 08 Январь, 2011 17:15 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
Геннадий Тышов писал(а):
Цитата:
Получившийся в ДРАКОНЕ автомат НЕ использует переменную состояния. (Использует goto).
Как таковая, переменная не требуется. С goto ваш автомат будет работать быстрее.
Кстати. Здесь goto понимается как низкоуровневый механизм - представления прогтекста - как здесь или здесь? Или как "заменитель" для высокоуровневого текста?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Вторник, 11 Январь, 2011 13:53 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Спешу поделится первыми практическими результатами применения ДРАКОНа.
Я взял работающий проект, и заменил в нём часть кода, написанного на Си, кодом, полученным при трансляции из ДРАКОН-схемы (приложена). При первом запуске программа дошла до середины 4-го шампура, и остановилась. Оказалось, я в иконке "ПЕРЕДАТЬ ПАКЕТ" вписал вызов не той процедуры. Исправление не составило труда, и при втором запуске программа отработала ПОЛНОСТЬЮ! Не знаю, каковы успехи в программировании у других, но мне еще ни разу не удавалось так легко заставить работать процедуру с 29 развилками! И почему то я уверен, что ошибок в этом алгоритме у меня нет :D Нет слов, чтобы достойно выразить моё восхищение языком и инструментом этого языка! Огромное спасибо Паронджанову Владимиру Даниеловичу, огромное спасибо Тышову Геннадию Николаевичу! Я пока только чуть-чуть попробовал этот инструмент, и уже вижу огромную пользу, которую он мне принесёт.

С Уважением, Ефанов Сергей.


Вложения:
GPRS_send.drt [11.63 КБ]
Скачиваний: 287
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Вторник, 11 Январь, 2011 20:35 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Ефанов Сергей

Спасибо за высокую оценку языка Дракон и ИС Дракон.
Спасибо за ваш пример использования ИС Дракон в программировании.
Интересна прикладная область вашего примера.
Вы хорошо отобразили проблемную область в тексте икон, не скатились на подмену его программным кодом.
Поздравляю, вы пионер, т.е. первые применили в программировании модель конечного автомата в сочетании с языком Дракон.

Ваша программа:
Вложение:
GPRS_send.drt
Вложение:
GPRS_send.png
Вложение:
GPRS_send.txt


Я не имею опыта программировать в режиме PB.
Сделал некоторые изменения в соответствии с описанием этого режима у В.Д. Паронджанова. Некоторые пояснения в комментариях схемы.
Вложение:
GPRS_send_A.drt
Вложение:
GPRS_send_A.png
Вложение:
GPRS_send_A.txt


Желаю успехов, с уважением Г. Тышов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Вторник, 11 Январь, 2011 21:55 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Цитата:
Вы хорошо отобразили проблемную область в тексте икон, не скатились на подмену его программным кодом.
Поздравляю, вы пионер, т.е. первые применили в программировании модель конечного автомата в сочетании с языком Дракон.
Я прямо покраснел...
Подскажите пожалуйста, каким приёмом Вы перенесли иконки "RT" на горизонтальные линии? У меня это не получается. И ещё, по какой то причине не открываются фалы .drt из Вашего сообщения, при попытке открыть и.с.ДРАКОН сообщает: "... не является файлом и.с. ДРАКОН".
Версия ДРАКОН-редактора у меня от 24.11.2010, хотя скачивал её по ссылке на версию от 24.12.2010.

С уважением, Ефанов Сергей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Вторник, 11 Январь, 2011 22:03 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
efanov писал(а):
Подскажите пожалуйста, каким приёмом Вы перенесли иконки "RT" на горизонтальные линии? У меня это не получается.
На лиане цикла внизу есть точка ввода, туда вставляем икону "Период", она перейдет вверх.
Таким образом блок "Обыкновенный цикл" преобразуется в блок в "Цикл ЖДАТЬ".
При вложенных циклах, вставьте во внутренний, лианы остальных циклов пересадите на лиану внутреннего.
efanov писал(а):
по какой то причине не открываются фалы .drt из Вашего сообщения, при попытке открыть и.с.ДРАКОН сообщает: "... не является файлом и.с. ДРАКОН".
ИС Дракон доработана, сейчас (20 минут) выложу. Не открывается, т.к. сменилось название программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программируем с и.с. Drakon
СообщениеДобавлено: Среда, 12 Январь, 2011 05:56 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
efanov писал(а):
Цитата:
Вы хорошо отобразили проблемную область в тексте икон, не скатились на подмену его программным кодом.
Поздравляю, вы пионер, т.е. первые применили в программировании модель конечного автомата в сочетании с языком Дракон.
Я прямо покраснел... С уважением, Ефанов Сергей.
Да, Геннадий Николаевич хорошо подметил, в чём Вы молодец с т.зр. формализации. И вообще-то это д.б. нормой - от качественного описания "предметки" (задачи) к спецификации и от неё к информодели (в частном случае включающей программу действий устройства и взаимосвязанную инструкцию по обращению с этим устройством, его взаимодействию с окружением вообще) - в соответствии с цепочкой, описанной здесь... и всё в единой языковой среде... Вот только хорошо бы, чтоб каждый уровень детализации представлялся структурно в виде дракон-схем - но для этого при отсутствии средств "раскрытия вершин", вроде описанного здесь хотя бы, нужны специальные приёмы...
Кстати, а как действительно насчёт взаимодействия со средой (в смысле сказанного здесь)? У Вас там есть выдача сообщений на индикатор (в виде серий вспышек) - в алфавите техноязыка этому должны соответствовать операции вывода (если точно представлять суть). И каково ещё взаимодействие данного программного процесса (и исполняющего его код устройства) с окружением этого устройства (в частности, человеком, воспринимающим вспышки)? И нет ли взаимодействия с другими процессами (в смысле сказанного здесь)? Быть может, в перспективе стоит построить дракон-руководство, подобно этому примеру?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2018, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB