Смекни!
smekni.com

Контроллеры (стр. 8 из 12)

/*----------------- Тест Контроль программы -------------------------------*/

TestControlPO();

/*-------- Формирование дискретного 271 слова ----------------------------*/

SlRab=0;

Adress=0x9d;/* адрес слова 271 */

Priznak_Test();/* растановка признаков тестирования в слове */

Priznak_Usvic();/* признак от УСВИЦ-250 */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------ Формирование 206 слова в соответствии с РТМ, изм,3 для Vpr ------*/

SlRab=0;

FormPTM(StecVprd);

Adress=0x61;/* адрес слова 206 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vprd);/* проверка на < 50км */

if ((Vpr_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

/*------------- Копирование параметров в область вывода -------------------*/

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----- Формирование 207 слова в соответствии с РТМ, изм,3 для Vmd -------*/

SlRab=0;

FormPTM(StecVmdd);

Adress=0xe1;/* адрес слова 207 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vmdd); /* проверка на < 50км */

if ((Vmd_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

SlRab=0;

/*-------- Сброс сторожевого таймера --------------------------------------*/

TXD=0;

TXD=1;

}

Назначение: Пилотом на земле включает тумблер тест контроля состояния прибора. Максимальная скорость индексом устанавливается на максимальную скорость (250) и к приборной скорости прибавляем тестовое значение скорости. При не совпадении скоростей выводим на индикацию световую и звуковую, сигнализируя о неисправности прибора. После чего проходит весь цикл программы функционирования прибора.

Вход: тестовое значение.

Выход: индикация.

Процедура подсчета и записи бита четности 32х-разрядного рабочего слова.

void CalcChetSl(void){

SlRab_bit31=1;

SlRab_bit31=SlRab_bit31ÅSlRab_bit0ÅSlRab_bit1ÅSlRab_bit2;

SlRab_bit31=SlRab_bit31ÅSlRab_bit3ÅSlRab_bit4ÅSlRab_bit5;

SlRab_bit31=SlRab_bit31ÅSlRab_bit6ÅSlRab_bit7ÅSlRab_bit8;

SlRab_bit31=SlRab_bit31ÅSlRab_bit9ÅSlRab_bit10ÅSlRab_bit11;

SlRab_bit31=SlRab_bit31ÅSlRab_bit12ÅSlRab_bit13ÅSlRab_bit14;

SlRab_bit31=SlRab_bit31ÅSlRab_bit15ÅSlRab_bit16ÅSlRab_bit17;

SlRab_bit31=SlRab_bit31ÅSlRab_bit18ÅSlRab_bit19ÅSlRab_bit20;

SlRab_bit31=SlRab_bit31ÅSlRab_bit21ÅSlRab_bit22ÅSlRab_bit23;

SlRab_bit31=SlRab_bit31ÅSlRab_bit24ÅSlRab_bit25ÅSlRab_bit26;

SlRab_bit31=SlRab_bit31ÅSlRab_bit27ÅSlRab_bit28ÅSlRab_bit29;

SlRab_bit31=SlRab_bit31ÅSlRab_bit30;

}

Назначение: подсчет четности слова и выставления знака четности в 31 разряде подсчет четности производиться по модулю 2.

Вход: нет.

Выход: SlRab_bit31- знак четности.

Процедура перевода из кодов грея в двоичный код максимально допустимую скорость.

void Perevod_Md(void){

Vmdd=0;

Vmdd_bit9=Vmdg_bit9;

Vmdd_bit8=Vmdg_bit8ÅVmdd_bit9;

Vmdd_bit7=Vmdg_bit7ÅVmdd_bit8;

Vmdd_bit6=Vmdg_bit6ÅVmdd_bit7;

Vmdd_bit5=Vmdg_bit5ÅVmdd_bit6;

Vmdd_bit4=Vmdg_bit4ÅVmdd_bit5;

Vmdd_bit3=Vmdg_bit3ÅVmdd_bit4;

Vmdd_bit2=Vmdg_bit2ÅVmdd_bit3;

Vmdd_bit1=Vmdg_bit1ÅVmdd_bit2;

Vmdd_bit0=Vmdg_bit0ÅVmdd_bit1;

}

Назначение: перевод кодов грея в двоичный код.

Вход: Коды грея.

Выход: двоичный код.

Процедура перевода из кодов грея в двоичный код приборную скорость.

void Perevod_Pr(void){

Vprd=0;

Vprd_bit9=Vprg_bit9;

Vprd_bit8=Vprg_bit8ÅVprd_bit9;

Vprd_bit7=Vprg_bit7ÅVprd_bit8;

Vprd_bit6=Vprg_bit6ÅVprd_bit7;

Vprd_bit5=Vprg_bit5ÅVprd_bit6;

Vprd_bit4=Vprg_bit4ÅVprd_bit5;

Vprd_bit3=Vprg_bit3ÅVprd_bit4;

Vprd_bit2=Vprg_bit2ÅVprd_bit3;

Vprd_bit1=Vprg_bit1ÅVprd_bit2;

Vprd_bit0=Vprg_bit0ÅVprd_bit1;

}

Назначение: перевод кодов грея в двоичный код.

Вход: Коды грея.

Выход: двоичный код.

Процедура проверки на отказ маски максимальной скорости.

void Cikl_Otkaz_Vmd(void){

int c=3,St;

Vmd_Ok=0;

T1=0;

do

{

vvodvmd();

Perevod_Md();/* перевод из грея в двоичную */

St=StecVmdd;

if ((St+test_speed>Vmdd)&&(St-test_speed<Vmdd))

{

StecVmdd=Vmdd;

break;

}

if (c==0)

{

Vmd_Ok=1;

T1=1;

break;

}

c--;

}

while(c>(-1));

}

Назначение: проверка маски максимальной скорости путем проверки предыдущих значений с полученными значениями и допуск не должен превышать тестовой единицы. Если превышение возникло, то проверка проходит еще 3 раза, но если после этого превышение не исчезло. Выдается световая сигнализация на борт панель пилоту и записывается в ячейку служебного слова (271).

Вход: нет.

Выход: нет.

Процедура проверки на отказ маски приборной скорости.

void Cikl_Otkaz_Vpr(void){

int b=3,St;

Vpr_Ok=0;

RXD=0;

do

{

vvodvpr();

Perevod_Pr();/* перевод из грея в двоичную */

St=StecVprd;

if ((St+test_speed>Vprd)&&(St-test_speed<Vprd))

{

StecVprd=Vprd;

break;

}

if (b==0)

{

Vpr_Ok=1;

RXD=1;

break;

}

b--;

}

while(b>(-1));

}

Назначение: проверка маски приборной скорости путем проверки предыдущих значений с полученными значениями и допуск не должен превышать тестовой единицы. Если превышение возникло, то проверка проходит еще 3 раза, но если после этого превышение не исчезло. Выдается световая сигнализация на борт панель пилоту и записывается в ячейку служебного слова (271).

Вход: нет.

Выход: нет.

Процедура масштабирование для вывода на ЦАП.

void Machtab(unsigned int V1){

double rab1;

rab1=(double)V1;

rab1*=0.63;

CapSlowo=0;

CapSlowo=(unsigned int)rab1;

CapSlowo0<<=6;

}

Назначение: масштабирование необходимо потому, что по ТУ выдача аналогового сигнала должна соответветствовать всем единицам на входе ЦАП, на аналоговом выходе 0.63 В.

Вход: приборная скорость.

Выход: нет.

Процедура формирование 32х-разрядного слова с соответствием с РТМ

void FormPTM(unsigned int V1){

double rab2;

SlRab=0;

rab2=(double)V1;

rab2/=0.11575;

SlRab=(unsigned long)rab2;

rab2-=(double)SlRab;

SlRab<<=12;

}

Назначение: для формирование 32х-разрядного слова с соответствием с РТМ необходима данные поместить с 11 по 27 разряд с ценой младшего разряда.

Вход: приборная скорость.

Выход: данные помещены в слове на свое место.

Процедура тест контроля программного обеспечения

void TestControlPO(void){

int Vprd1=0,Vmdd1=0,Vprg1=0,Vmdg1=0;

PO_Ok=Vmd_Ok=Vpr_Ok=0;

Vprg1=Vprg;

Vmdg1=Vmdg;

Vprd1=Vprd;

Vmdd1=Vmdd;

Vmdg=Vprg=speed;

Perevod_Md();

Perevod_Pr();

if (Vmdd!=200) { PO_Ok=1; Vmd_Ok=1; }

if (Vprd!=200) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 206 --------------------------------------*/

SlRab=0;

FormPTM(Vprd);

Adress=0x61;

Priznak_Usvic();

Priznak_Work(1,0);

CalcChetSl();

if(SlRab!=0) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 207 --------------------------------------*/

SlRab=0;

FormPTM(Vmdd);

Adress=0xe1;

Priznak_Usvic();

Priznak_Work(1,0);

CalcChetSl();

if(SlRab!=0) { PO_Ok=1; Vmd_Ok=1; }

SlRab=0;

Vprg=Vprg1;

Vmdg=Vmdg1;

Vprd=Vprd1;

Vmdd=Vmdd1;

}

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

Вход: тестовое значение кодов грея.

Выход: нет.

Процедура проверки скорости, на меньше 50км.

void If_Speed(unsigned int V){

if(V<200) Priznak_Work(0,1);

}

Назначение: при полеченной скорости меньше чем 50 км необходимо по ТУ выдавать в выходном слове признак нет вычисленных данных.

Вход: приборная скорость.

Выход: расстановка признаков нет вычисленных данных.

Описание аппаратных функций

Основные функции системы

Программа начинает выполнение при подачи питания на контроллер, независимо от других контроллеров. Программа сначало сбрасывает сторожевой таймер предназначенный от зацикливаниии программы, который необходимо сбрасывать в конце программы. После чего очищает все переменные и подготавливает слова с указанием в них о том, что нет вычисленных данных, т.к. процедура вывода слов работает независимо от основной программы по прерыванию от таймера. Далее программы заполняет ячейки скорости. для последующего использавании и проверки на выход из строя сведодиодов или фотодиодов. После чего выполняет ввод с масок данных, перевод их, проверку на отказ маскок предельной и максимальной скорости, проверка на наличии тест контроля, маштабирования л&bsol;для вывода на ЦАП, выполняем тест контроль программного обеспечения с занесением результатов в служебное слово и копирование полученных данных в слова.

Технология инсталляции программы

Данный программный продукт поставляется на предприятие-заказчик для конечного использования в борт компьютерах вертолетах или самолетах с максимальной скоростью не более 250км.

При использовании данной версии программы, программа записывается во внутреннью память процессора, т.к. процессор имеет встроенную постоянную память.

Инструкция пользователю

Данная программа разрабатывалсь на ПЭВМ класса PENTIUM c процессором фирмы INTEL с тактовой частотой 100 МГц и с использование внутрисхемного эмулятора фирмы PhytonPICE-51. На этой же машине, но с эксперементальным образцом контроллера проводились испытания. Операционная система Windows'98.

Оценка качества проекта

Качество настоящего проекта будем оценивать по следующим критериям:- полезность (исходная и общая);- удобство эксплуатации;- эффективность;- модифицируемость;- машинонезависимость;

-завершенность;

- согласованность;

- рациональность;

- доступность;

- коммуникативность;

- информативность;

- расширяемость.

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

Продукт проектирования обладает свойством ПОЛЕЗНОСТИ, если он отвечает поставленным целям. Это свойство имеет две стороны:

1) исходная полезность - насколько просто, надежно, эффективно можно использовать основной результат обработки;