Помощь в написании студенческих работ
Антистрессовый сервис

Алгоритмы определения воздушных трасс

Курсовая Купить готовую Узнать стоимостьмоей работы

H> //для работы с файлами//#include «Unit1.h» //—————————————————————————————————————-#pragma package (smart_init)//=============================================================================//… объявления глобальных переменных …//=============================================================================#defineBUFSIZE 255 //ёмкость буфераunsignedcharbufrd, bufwr; //приёмный и передающий… Читать ещё >

Алгоритмы определения воздушных трасс (реферат, курсовая, диплом, контрольная)

Содержание

  • Аннотация
  • Сокращения и термины
  • Введение
  • 1. Анализ предметной области
  • 2. Постановка задачи
  • 3. Описание технологического алгоритма
    • 3. 1. Входные и выходные данные
    • 3. 2. Структуры данных
    • 3. 3. Блок-схема алгоритма
  • Заключение
  • Список литературы
  • Приложение А
  • Приложение Б

h> //для работы с файлами//#include «Unit1.h» //—————————————————————————————————————-#pragma package (smart_init)//=============================================================================//… объявления глобальных переменных …//=============================================================================#defineBUFSIZE 255 //ёмкость буфераunsignedcharbufrd[BUFSIZE], bufwr[BUFSIZE]; //приёмный и передающий буферы//—————————————————————————————————————-HANDLECOMport;//дескриптор порта//структура OVERLAPPED необходима для асинхронных операций, при этом для операции чтения и записи нужно объявить разные структуры//эти структуры необходимо объявить глобально, иначе программа не будет работать правильноOVERLAPPEDoverlapped;//будем использовать для операций чтения (см. поток ReadThread) OVERLAPPEDoverlappedwr; //будем использовать для операций записи (см. поток WriteThread)//—————————————————————————————————————-inthandle; //дескриптор для работы с файлом с помощью библиотеки <io.h>//—————————————————————————————————————-boolfl=0;//флаг, указывающий на успешность операций записи (1 — успешно, 0 — не успешно) unsignedlongcounter;//счётчик принятых байтов, обнуляется при каждом открытии порта//=============================================================================//… объявления функций …//=============================================================================voidCOMOpen (void); //открыть портvoidCOMClose (void); //закрыть порт//=============================================================================//… объявления потоков …//=============================================================================//—————————————————————————————————————-//поток для чтения последовательности байтов из COM-порта в буферclassReadThread: public TThread{private:void __fastcall Printing ();//выводпринятыхбайтовнаэкранивфайлprotected:void __fastcall Execute ();//основнаяфункцияпотокаpublic: __fastcallReadThread (bool CreateSuspended);//конструкторпотока};//—————————————————————————————————————-//поток для записи последовательности байтов из буфера в COM-портclassWriteThread: public TThread{private:protected:void __fastcall Execute (); //основнаяфункцияпотокаpublic: __fastcallWriteThread (bool CreateSuspended);//конструкторпотока};//—————————————————————————————————————-//=============================================================================//… реализацияпотоков …//=============================================================================//——————————————————————————————————————-//… потокReadThead …//——————————————————————————————————————-ReadThread *reader; //объектпотокаReadThread//—————————————————————————————————————-//конструктор потока ReadThread, по умолчанию пустой__fastcallReadThread:ReadThread (bool CreateSuspended): TThread (CreateSuspended){}//—————————————————————————————————————-//главная функция потока, реализует приём байтов из COM-портаvoid __fastcallReadThread:Execute (){COMSTATcomstat;//структура текущего состояния порта, в данной программе используется для определения количества принятых в порт байтовDWORDbtr, temp, mask, signal;//переменная temp используется в качестве заглушкиoverlapped. hEvent = CreateEvent (NULL, true, true, NULL);//создать сигнальный объект-событие для асинхронных операцийSetCommMask (COMport, EV_RXCHAR); //установить маску на срабатывание по событию приёма байта в портwhile (!Terminated)//пока поток не будет прерван, выполняем цикл {WaitCommEvent (COMport, &mask, &overlapped); //ожидать события приёма байта (это и есть перекрываемая операция) signal = WaitForSingleObject (overlapped.hEvent, INFINITE);//приостановить поток до прихода байтаif (signal == WAIT_OBJECT0) //если событие прихода байта произошло {if (GetOverlappedResult (COMport, &overlapped, &temp, true)) //проверяем, успешно ли завершилась перекрываемая операция WaitCommEventif ((mask & EV_RXCHAR)≠0)//если произошло именно событие прихода байта{ClearCommError (COMport, &temp, &comstat);//нужнозаполнитьструктуруCOMSTATbtr = comstat. cbInQue; //и получить из неё количество принятых байтовif (btr) //если действительно есть байты для чтения {ReadFile (COMport, bufrd, btr, &temp, &overlapped); //прочитать байты из порта в буфер программыcounter+=btr; //увеличиваем счётчик байтовSynchronize (Printing); //вызываем функцию для вывода данных на экран и в файл } } } }CloseHandle (overlapped.hEvent);//перед выходом из потока закрыть объект-событие}//—————————————————————————————————————-//—————————————————————————————————————-//=============================================================================//… реализации функций …//=============================================================================//функция открытия и инициализации портаvoidCOMOpen (){Stringportname; //имя порта (например, «COM1″, „COM2″ и т. д.)DCBdcb; //структура для общей инициализации порта DCBCOMMTIMEOUTStimeouts; //структура для установки таймаутовportname = Form1->ComboBox1->Text;//получить имя выбранного порта //открыть порт, для асинхронных операций обязательно нужно указать флаг FILE_FLAG_OVERLAPPEDCOMport = CreateFile (portname.c_str (), GENERIC_READ — GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);//здесь: // - portname. c_str () — имя порта в качестве имени файла, c_str () преобразует строку типа String в строку в виде массива типа char, иначе функция не примет // - GENERIC_READ — GENERIC_WRITE — доступ к порту на чтение/записть // - 0 — порт не может быть общедоступным (shared) // - NULL — дескриптор порта не наследуется, используется дескриптор безопасности по умолчанию // - OPEN_EXISTING — порт должен открываться как уже существующий файл // - FILE_FLAG_OVERLAPPED — этот флаг указывает на использование асинхронных операций // - NULL — указатель на файл шаблона не используется при работе с портамиif (COMport == INVALID_HANDLE_VALUE) //еслиошибкаоткрытияпорта { Form1->SpeedButton1->Down = false; //отжатькнопкуForm1->StatusBar1->Panels->Items[0]->Text = „Не удалось открыть порт“; //вывести сообщение в строке состоянияreturn; } //инициализация портаdcb. DCBlength = sizeof (DCB); //в первое поле структуры DCB необходимо занести её длину, она будет использоваться функциями настройки порта для контроля корректности структуры //считать структуру DCB из портаif (!GetCommState (COMport, &dcb))//если не удалось — закрыть порт и вывести сообщение об ошибке в строке состояния{COMClose (); Form1->StatusBar1->Panels->Items[0]->Text = „НеудалосьсчитатьDCB“ ;return; } //инициализацияструктурыDCBdcb.BaudRate = StrToInt (Form1->ComboBox2->Text); //задаёмскоростьпередачи 115 200 бодdcb. fBinary = TRUE; //включаем двоичный режим обменаdcb. fOutxCtsFlow = FALSE; //выключаем режим слежения за сигналом CTSdcb. fOutxDsrFlow = FALSE; //выключаем режим слежения за сигналом DSRdcb. fDtrControl = DTR_CONTROL_DISABLE; //отключаем использование линии DTRdcb. fDsrSensitivity = FALSE; //отключаем восприимчивость драйвера к состоянию линии DSRdcb. fNull = FALSE; //разрешить приём нулевых байтовdcb. fRtsControl = RTS_CONTROL_DISABLE; //отключаем использование линии RTSdcb. fAbortOnError = FALSE; //отключаем остановку всех операций чтения/записи при ошибкеdcb. ByteSize = 8; //задаём 8 бит в байтеdcb. Parity = 0; //отключаем проверку чётностиdcb. StopBits = 0; //задаём один стоп-бит //загрузить структуру DCB в портif (!SetCommState (COMport, &dcb))//если не удалось — закрыть порт и вывести сообщение об ошибке в строке состояния {COMClose ();cout<< „Не удалось установить DCB“ << endl;return; } //установить таймаутыtimeouts. ReadIntervalTimeout = 0;//таймаут между двумя символамиtimeouts. ReadTotalTimeoutMultiplier = 0;//общий таймаут операции чтенияtimeouts. ReadTotalTimeoutConstant = 0; //константа для общего таймаута операции чтенияtimeouts. WriteTotalTimeoutMultiplier = 0; //общий таймаут операции записиtimeouts. WriteTotalTimeoutConstant = 0; //константа для общего таймаута операции записи //записать структуру таймаутов в портif (!SetCommTimeouts (COMport, &timeouts))//если не удалось — закрыть порт и вывести сообщение об ошибке в строке состояния {COMClose ();cout<< „Не удалось установить тайм-ауты“ << endl;return; } //установить размеры очередей приёма и передачиSetupComm (COMport, 2000,2000); //создать или открыть существующий файл для записи принимаемых данныхhandle = open („test.txt“, O_CREAT — O_APPEND — O_BINARY — O_WRONLY, S_IREAD — S_IWRITE);if (handle==-1)//если произошла ошибка открытия файла {count<<“ Ошибка открытия файла» << endl;//вывести сообщение об этом в командной строке }else{ count<< «Файл открыт успешно» << endl; } //иначе вывести в строке состояния сообщение об успешном открытии файла PurgeComm (COMport, PURGE_RXCLEAR);//очистить принимающий буфер портаreader = newReadThread (false);//создать и запустить поток чтения байтовreader->FreeOnTerminate = true; //установить это свойство потока, чтобы он автоматически уничтожался после завершенияwriter = newWriteThread (true); //создать поток записи данных в портwriter->FreeOnTerminate = true; //установить это свойство, чтобы поток автоматически уничтожался после завершения}//—————————————————————————————————————-//функция закрытия портаvoidCOMClose (){ //если поток записи существует, подать ему команду на завершение и запустить его, чтобы он выполнил завершение;if (writer) //проверка if (writer) обязательна, иначе возникают ошибки; {writer->Terminate ();writer->Resume (); }if (reader)reader->Terminate (); //если поток чтения работает, завершить его; проверка if (reader) обязательна, иначе возникают ошибкиCloseHandle (COMport); //закрыть портCOMport=0;//обнулить переменную для дескриптора портаclose (handle);//закрыть файл для записи принимаемых данныхhandle=0;//обнулить переменную для дескриптора файла}//—————————————————————————————————————;

Показать весь текст

Список литературы

  1. Разработка методов контроля высоты полёта воздушных судов при управлении воздушным движением в условиях сокращённых норм вертикального эшелонирования [текст]: автореферат / Пряхин Б. С. — И.:Москва, 2009, 19 с.
  2. ISO/IEC 14 882:2003. Information Technology — Programming Languages — C++. — 2-nd edition. — ISO/IEC, 2003. — xxvii + 757 pp.
  3. С. Б. Основы программирования на C++: Пер. с англ. — М.: Вильямс, 2002. — 256 с.
  4. С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2001. — 1104 с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ