/*----------------- Тест Контроль программы -------------------------------*/
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 км необходимо по ТУ выдавать в выходном слове признак нет вычисленных данных.
Вход: приборная скорость.
Выход: расстановка признаков нет вычисленных данных.
Программа начинает выполнение при подачи питания на контроллер, независимо от других контроллеров. Программа сначало сбрасывает сторожевой таймер предназначенный от зацикливаниии программы, который необходимо сбрасывать в конце программы. После чего очищает все переменные и подготавливает слова с указанием в них о том, что нет вычисленных данных, т.к. процедура вывода слов работает независимо от основной программы по прерыванию от таймера. Далее программы заполняет ячейки скорости. для последующего использавании и проверки на выход из строя сведодиодов или фотодиодов. После чего выполняет ввод с масок данных, перевод их, проверку на отказ маскок предельной и максимальной скорости, проверка на наличии тест контроля, маштабирования л\для вывода на ЦАП, выполняем тест контроль программного обеспечения с занесением результатов в служебное слово и копирование полученных данных в слова.
Технология инсталляции программы
Данный программный продукт поставляется на предприятие-заказчик для конечного использования в борт компьютерах вертолетах или самолетах с максимальной скоростью не более 250км.
При использовании данной версии программы, программа записывается во внутреннью память процессора, т.к. процессор имеет встроенную постоянную память.
Данная программа разрабатывалсь на ПЭВМ класса PENTIUM c процессором фирмы INTEL с тактовой частотой 100 МГц и с использование внутрисхемного эмулятора фирмы PhytonPICE-51. На этой же машине, но с эксперементальным образцом контроллера проводились испытания. Операционная система Windows'98.
Качество настоящего проекта будем оценивать по следующим критериям:- полезность (исходная и общая);- удобство эксплуатации;- эффективность;- модифицируемость;- машинонезависимость;
-завершенность;
- согласованность;
- рациональность;
- доступность;
- коммуникативность;
- информативность;
- расширяемость.
Попробуем проанализировать каждый из вышеперечисленных критериев, и дать по нему оценку контроллера. Полезность:
Продукт проектирования обладает свойством ПОЛЕЗНОСТИ, если он отвечает поставленным целям. Это свойство имеет две стороны:
1) исходная полезность - насколько просто, надежно, эффективно можно использовать основной результат обработки;