ідбудеться помилка формату даних. Рішення - введення в процедуру зчитування даних з клавіатури перевірку на помилку формату, і в разі виконання цієї умови ініціалізація повторення цієї процедури.
5) При розрахунку даних можуть відбутися невідомі помилки, внаслідок яких значення істинного і ортодроміческое курсу можуть прийняти значення - 2147483648 градусів і - 2147483648 хвилин. Рішення для ортодроміческое курсу - при його обчисленні замінити перехідні в нуль знаменники на 10-9. При розрахунку поправки також додано виняток для тангенса, якщо значення кута, від якого він береться, одно 90 градусам (значення тангенса 900 при розрахунку замінюється на значення тангенса 890).
) Безпосередньо перед виведенням додана перевірка на перевищення значення в 360 градусів для вихідних даних.
6.4 Лістинг програми
Щоб проаналізувати роботу розроблюваної системи, вона була змодельована на платі National Instruments. Розробка програмного забезпечення здійснювалася на мові С #.
using System;
using System.Collections.Generic;
using System.Linq; System.Text; NationalInstruments.DAQmx;
ConsoleApplication
{Program
{
//модуль ініціалізацііAnalogMultiChannelReader init ()//ініціалізація 0 і 1 каналів
{Reader; DS=DaqSystem.Local; [] PhChNames; AICh; T=new Task ( Вимірювання напруги ); i;=DS.GetPhysicalChannels (PhysicalChannelTypes.AI, PhysicalChannelAccess.External) ; (i=0; i lt; 4; i ++)=T.AIChannels.CreateVoltageChannel (PhChNames [i], Voltage mesure + i, AITerminalConfiguration.Nrse, - 10, 10, AIVoltageUnits.Volts);=new AnalogMultiChannelReader (T.Stream); Reader;
}
//модуль вводу даннихdouble SetAng (string s)//введення кутових вихідних даних
{gr, min, res;:
{. WriteLine ( Введіть + s) ;. Write ( Введіть градуси: t );
gr=Convert.ToDouble (Console.ReadLine ()) ;. Write ( Введіть хвилини: t t );=Convert.ToDouble (Console.ReadLine ()) * (1/60.0);=gr + Math.Sign (gr) * min;// З урахуванням знакаres;
} (FormatException)
{. Write ( Помилка введення ); thisplace;
}
}
//модуль ізмереніяvoid GetData (AnalogMultiChannelReader Reader, out double i, out double KU)
{// Зчитування даних з датчіковint amount=100;
const int Ki=2; int Kku=36; [] data, S; k, j;=new double [4];=new double [4]; (k=0; k lt ; amount; k ++)
{= Reader.ReadSingleSample (); (j=1; j lt; 4; j ++) [j] +=data [j];
}=(S [1]/amount) * Ki; =(S [2]/amount) * Kku;
}
//модуль виведення результату
static void PrintAng (double ang)//Висновок кутових величин
{gr, min;=(int) ang;=(int) Math.Round ((ang - gr) * 60); (min == 60)
{++;=0;
}. WriteLine ( {0: d3} градусів і {1: d2} хвилин raquo ;, gr, min);
}
void PrintData (double i, double KU)//Виведення даних отриманих з датчиків
{. SetCursorPosition (1, 1) ;. SetCursorPosition (1, 3) ;. Write ( Крен пеленгатора (канал 1): t t ); (i) ;. SetCursorPosition (1, 4) ;. Write ( Курсовий кут (канал 2): t t ); (KU);
}
double GetA (double fi, double l, double d, double t)//Розрахунок азимута
{fir, lr, dr, res; B1, C, A1, A;=(fi/180) * Math.PI;=(l/180) * Math.PI;=(d/180) * Math.PI;=Math.Sin (t) * Math.Cos (dr);=Math.Cos (fir) * Math.Sin (dr) - Math.Sin (fir) * Math.Cos (dr ) * Math.Cos (t); (B1 == 0) B1=0.000000001;=Math.Atan (C/B1); ((B1 gt; 0) amp; (Math.Sin (t) gt; 0)) res=2 * Math.PI - A1; ((B1 lt; 0) amp; (Math.Sin (t) lt; 0)) res=Math.PI - A1; ((B1 lt; 0) amp; (Math.Sin (t) gt; 0)) res=Math.PI - A1; ((B1 gt; 0) amp; (Math.Sin (t) lt; 0)) res=-A1; res=1;=( res * 180)/Math.PI; res;
} double GetB (double Fi, double F_or, double L_or, double l)//Розрахунок колійного кута
{res, F_orr, Fir, L_orr, lr; _orr=(F_or/180) * Math.PI;=(Fi/180) * Math.PI; _orr=(L_or/180) * Math.PI;=(l/180) * Math.PI; ((Math.Sin (L_orr - lr) == 0) || (Math.Tan (L_orr - lr) == 0))
{= Math.Atan (Math.Cos (Fir) * Math.Tan (F_orr) * (1/0.000000001) - Math.Sin (Fir) * (1/0.000000001));
}
{= Math.Atan (Math.Cos (Fir) * Math.Tan...