Разработка системы управления механической системы в режиме мягкого реального времени

Рассмотрение основных принципов и методов проектирования систем реального времени. Описание конструктивных и функциональных особенностей объекта управления, построение диаграммы задач. Выбор аппаратной архитектуры, модели процессов-потоков, интерфейса.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.01.2015
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

putoutbuf( temp | phases_signals_x[ phase -1]);

if ((indexstep_x==Vm_step_x)&&((abs(dx)-1)>indexstep_x)) {sost=CONST_Sx;}

if ((abs(dx)-1)<=indexstep_x) {sost=DEACCEL_Sx;}

if ((indexstep_x<Vm_step_x)&&((abs(dx)-1)>indexstep_x)) {sost=ACCEL_Sx;}

NEXTSTATE=WAIT_Sx;

}

break;

case WAIT_Sx:

// секция входа

if (RUNENTRY) {

TendStep=ClockCycles()+dt;

}

if (ClockCycles() >=TendStep ) {

NEXTSTATE =sost;

if (dx>0) {Xt=Xt+1; Vt_x=mainmass_x[indexstep_x].V;}

else {Xt=Xt-1; Vt_x=-mainmass_x[indexstep_x].V;}

// if (Yt==300) { task_x=1;}

//printf("Vt_y\n%f\n",Vt_y);

//printf("x\n%d\n",Yt);

}

break;

case DEACCEL_Sx:

// секция входа

if (RUNENTRY) {

//printf("DEACCEL\n%d\n");

};

dx=(Xc-Xt);

if ((((dx>0)&&(Vt_x>0)) || ((dx<0)&&(Vt_x<0)))&& (abs(dx)>indexstep_x)) {

if (indexstep_x<Vm_step_x) {NEXTSTATE=ACCEL_Sx; } else {NEXTSTATE=CONST_Sx;} }

else {

indexstep_x=indexstep_x-1;

dt=mainmass_x[indexstep_x].dt; //v taktah

if ( dx>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dx<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_x;

putoutbuf( temp | phases_signals_x[ phase -1]);

if (indexstep_x==0) {sost=BRAKE_Sx;} else {sost=DEACCEL_Sx;}

NEXTSTATE=WAIT_Sx;

//printf("dt_ms\n%d\n",mainmass_y[indexstep_y].dt_ms);

}

break;

case CONST_Sx:

// секция входа

if (RUNENTRY) {

//printf("CONST\n%d\n");

};

dx=(Xc-Xt);

if ((((dx>0)&&(Vt_x<0)) || ((dx<0)&&(Vt_x>0)))|| (abs(dx)<=indexstep_x)) {NEXTSTATE=DEACCEL_Sx; }

else {

if ((abs(dx)-1)<=indexstep_x) {sost=DEACCEL_Sx;} else {sost=CONST_Sx;}

if ( dx>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dx<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_x;

putoutbuf( temp | phases_signals_x[ phase -1]);

NEXTSTATE=WAIT_Sx;

}

break;

case STEP_Sx:

// секция входа

if (RUNENTRY) {

//printf("CONST\n%d\n");

};

//dx=(Xc-Xt);

// if ((((dx>0)&&(Vt_x<0)) || ((dx<0)&&(Vt_x>0)))|| (abs(dx)<=indexstep_x)) {NEXTSTATE=DEACCEL_Sx; }

// else {

// if ((abs(dx)-1)<=indexstep_x) {sost=DEACCEL_Sx;} else {sost=CONST_Sx;}

indexstep_x=1;

dt=mainmass_x[indexstep_x].dt; //v taktah

if ( dx>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dx<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_x;

putoutbuf( temp | phases_signals_x[ phase -1]);

sost=BRAKE_Sx;

NEXTSTATE=WAIT_Sx;

//}

break;

default: work =0;

} // end swith

};

//

intsled_x_init(void)

{

Ttormoz = SYSPAGE_ENTRY(qtime)->cycles_per_sec / 1000 * Ttormoz_ms;

//printf("sled_x_init\n");

return 0;

};

А.3 Листинг кода задачи Sled_Y

int sled_y (void)

{

unsigned short int temp;

// переменные состояний

static int STATE = INITSTATE; // текущее состояние задачи

static int NEXTSTATE = STOP_S;// следующее состояние задачи (если задача не изменила своё состояние, то =-1 Если на данном просмотре она не меняет своего состояния, то NextStatee=-1*/;

static int RUNENTRY;// признак выполнения секции входа для данного состояния

static int phase=1;

//интервалы

static uint64_t dt;// временной интервал между шагами в тактах

// Переменные

static uint64_t TendStep;// время окончания шага в тактах

static uint64_t TendT;// время окончания срабатывания тормоза в тактах

static int sost; //

static int BSM_x;

static int64_t dy;

if (NEXTSTATE != -1) // задача изменила своё состояние

{

logE (TASKID,STATE,NEXTSTATE);// зарегистрируем это событие

STATE = NEXTSTATE;

NEXTSTATE = -1;

RUNENTRY = 1;

}

else RUNENTRY = 0;

switch (STATE)

{

case STOP_S:

// секция входа

if (RUNENTRY) {

//printf("STOP_y\n%d\n");

//printf("STOP_yt\n%d\n",Yt);

};

if ((vihod_0X==1) && (vihod_0Y==1)) {

// //printf("xt\n%d\n",Xt);

// //printf("xc\n%d\n",Xc);

dy=Yc-Yt;

if (dy!=0) {

Vt_y=0;

NEXTSTATE = BRAKE_S;

sost=STOP_S;

}

}

break;

case BRAKE_S:

// секция входа

if (RUNENTRY) {

//printf("BRAKE\n%d\n");

if (sost==STOP_S) {

setpin(num_Ty);

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | phases_signals_y[0]);

} else {

clrpin(num_Ty);

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | 0);

indexstep_y=0;

}

TendT=ClockCycles()+Ttormoz;

//printf("x\n%d\n",Yt);

}

if (ClockCycles() >=TendT) {

//printf("x\n%d\n",Yt);

if (sost==STOP_S) {

if (dy==1) {NEXTSTATE=STEP_S;} else {NEXTSTATE =ACCEL_S;}

} else {NEXTSTATE =STOP_S;}

}

break;

case ACCEL_S:

// секция входа

if (RUNENTRY) {

//printf("ACCEL\n%d\n");

};

// //printf("Vt_x\n%f\n",Vt_x);

// //printf("dx\n%f\n",dx);

// //printf("st\n%f\n",St);

// //printf("xt\n%llu\n",Xt);

// //printf("xc\n%llu\n",Xc);

dy=(Yc-Yt);

if (((dy>0) && (Vt_y<0)) || ((dy<0) && (Vt_y>0))) {NEXTSTATE=DEACCEL_S; }

if (abs(dy)<=indexstep_y) {NEXTSTATE=DEACCEL_S; }

else {

indexstep_y=indexstep_y+1;

dt=mainmass_y[indexstep_y].dt; //v taktah

if ( dy>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dy<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | phases_signals_y[ phase -1]);

if ((indexstep_y==Vm_step_y)&&((abs(dy)-1)>indexstep_y)) {sost=CONST_S;}

if ((abs(dy)-1)<=indexstep_y) {sost=DEACCEL_S;}

if ((indexstep_y<Vm_step_y)&&((abs(dy)-1)>indexstep_y)) {sost=ACCEL_S;}

NEXTSTATE=WAIT_S;

//printf("dt\n%d\n",dt);

//printf("dt_ms\n%d\n",mainmass_y[indexstep_y].dt_ms);

}

break;

case WAIT_S:

// секция входа

if (RUNENTRY) {

//printf("WAIT\n%d\n");

//printf("dt\n%d\n",dt);

TendStep=ClockCycles()+dt;

// //printf("clock\n%d\n",ClockCycles());

// //printf("TendStep\n%d\n",TendStep);

}

if (ClockCycles() >=TendStep ) {

NEXTSTATE =sost;

if (dy>0) {Yt=Yt+1; Vt_y=mainmass_y[indexstep_y].V;}

else {Yt=Yt-1; Vt_y=-mainmass_y[indexstep_y].V;}

// if (Yt==300) { task_x=1;}

//printf("Vt_y\n%f\n",Vt_y);

//printf("x\n%d\n",Yt);

}

break;

case DEACCEL_S:

// секция входа

if (RUNENTRY) {

//printf("DEACCEL\n%d\n");

};

dy=(Yc-Yt);

if ((((dy>0)&&(Vt_y>0)) || ((dy<0)&&(Vt_y<0)))&& (abs(dy)>indexstep_y)) {

if (indexstep_y<Vm_step_y) {NEXTSTATE=ACCEL_S; } else {NEXTSTATE=CONST_S;} }

else {

indexstep_y=indexstep_y-1;

dt=mainmass_y[indexstep_y].dt; //v taktah

if ( dy>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dy<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | phases_signals_y[ phase -1]);

if (indexstep_y==0) {sost=BRAKE_S;} else {sost=DEACCEL_S;}

NEXTSTATE=WAIT_S;

//printf("dt_ms\n%d\n",mainmass_y[indexstep_y].dt_ms);

}

break;

case CONST_S:

// секция входа

if (RUNENTRY) {

//printf("CONST\n%d\n");

};

dy=(Yc-Yt);

if ((((dy>0)&&(Vt_y<0)) || ((dy<0)&&(Vt_y>0)))|| (abs(dy)<=indexstep_y)) {NEXTSTATE=DEACCEL_S; }

else {

if ((abs(dy)-1)<=indexstep_y) {sost=DEACCEL_S;} else {sost=CONST_S;}

if ( dy>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dy<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | phases_signals_y[ phase -1]);

NEXTSTATE=WAIT_S;

}

break;

case STEP_S:

// секция входа

if (RUNENTRY) {

//printf("CONST\n%d\n");

};

//dx=(Xc-Xt);

// if ((((dx>0)&&(Vt_x<0)) || ((dx<0)&&(Vt_x>0)))|| (abs(dx)<=indexstep_x)) {NEXTSTATE=DEACCEL_Sx; }

// else {

// if ((abs(dx)-1)<=indexstep_x) {sost=DEACCEL_Sx;} else {sost=CONST_Sx;}

indexstep_y=1;

dt=mainmass_y[indexstep_y].dt; //v taktah

if ( dy>0 ) { if ( ++phase > 4) { phase = 1; }; };

if ( dy<0 ) { if ( --phase < 1 ) { phase = 4; }; };

temp = getoutbuf() & phases_mask_y;

putoutbuf( temp | phases_signals_y[ phase -1]);

sost=BRAKE_S;

NEXTSTATE=WAIT_S;

//}

break;

default: work =0;

} // end swith

};

//

intsled_y_init(void)

{

Ttormoz = SYSPAGE_ENTRY(qtime)->cycles_per_sec / 1000 * Ttormoz_ms;

//printf("sled_y_init\n");

return 0;

};

Размещено на Allbest.ru


Подобные документы

  • Обзор требований проблемной области. Особенности управления задачами. Исполнительные системы реального времени. Программирование на уровне микропроцессоров. Модели и методы предметной области. Реализация прототипа системы реального времени.

    курсовая работа [263,1 K], добавлен 15.02.2005

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

    реферат [391,5 K], добавлен 28.12.2007

  • Основные характеристики систем реального времени, типы архитектур. Система приоритетов процессов (задач) и алгоритмы диспетчеризации. Понятие отказоустойчивости, причины сбоев. Отказоустойчивость в существующих системах реального времени (QNX Neutrino).

    контрольная работа [428,8 K], добавлен 09.03.2013

  • Характеристики, основы применения, архитектура жестких и операционных систем реального времени. Последовательное программирование задач реального времени. Структура и языки параллельного программирования, мультипрограммирования и многозадачности.

    курсовая работа [195,9 K], добавлен 17.12.2015

  • Разработка моделей данных информационной системы Сall-центра с применением CASE-технологии. Персонал и его функции. Регистрирование заявок в режиме реального времени. Построение диаграммы потоков данных DFD. Список документов и инфологическая модель.

    курсовая работа [1,1 M], добавлен 28.08.2012

  • Планирование задач в операционной системе реального времени. Основные виды планирования применительно к задачам реального времени. Выбор приемлемого алгоритма планирования при проектировании RTS. Статическое прогнозирование с использованием таблиц.

    контрольная работа [40,7 K], добавлен 28.05.2014

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

    реферат [55,0 K], добавлен 11.12.2011

  • Выбор беспроводной технологии передачи данных. Механизмы управления качеством передачи потоков. Программное обеспечение приемной и передающей станции. Эксперименты, направленные на изучение неравномерности передаваемого потока данных при доступе к среде.

    дипломная работа [1,1 M], добавлен 18.05.2012

  • Архитектура предприятия как инструмент управления изменениями. Проектирование архитектуры данных по TOGAF. Описание потоков и источников данных. Синхронизация данных по времени. Описание этапов и рекомендации по использованию инструментов проектирования.

    дипломная работа [2,8 M], добавлен 09.09.2017

  • Рассмотрение способов просмотра состояния процессов через диспетер задач в операционной системе Windows: определение взаимосвязи процессов и потоков, времени работы системы в пользовательском режиме. Ознакомление со сведениями о файлах драйверов.

    лабораторная работа [3,1 M], добавлен 07.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.