You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2648 lines
121 KiB

using System;
/// <summary>
/// Ноавя версия ПИВ 1.22
/// </summary>
namespace PIV
{
public static class CONST
{
public static Byte START = 0x3A;
public const Byte STARTTOBON = 0x3C;
public const Byte STARTTOBON0322 = 0x3F;
public const Byte STARTTOBON0323 = 0x3E;
public enum ADDR : UInt16
{
addrBVM = 0x0001,
addrOES = 0x0002,
addrBON = 0x0004,
addrPU = 0x0008,
addrPR = 0x0020
};
public enum CODE : Byte
{
msgNOTHING_TO_SEND = 0x01,
msgRECEIVE_DATA = 0x03,
msgSEND_DATA = 0x05,
msgCONDITION_EQUIPMENT = 0x06,
msgIN_ORDER = 0x07,
msgOUT_ORDER = 0x08
};
public static Byte[] auchCRCHi = new Byte[]
{
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40
};
public static Byte[] auchCRCLo = new Byte[]
{
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
};
public static UInt16 CRC16(ref Byte[] d, UInt16 len)
{
Byte crc_hi = 0xFF;
Byte crc_lo = 0xFF;
Byte j = 0;
do
{
Byte i = (Byte)(crc_hi ^ d[j++]);
crc_hi = (Byte)(crc_lo ^ (Byte)auchCRCHi[i]);
crc_lo = (Byte)(auchCRCLo[i]);
} while (--len != 0);
return (UInt16)((crc_hi << 8) | crc_lo);
}
}
public static class TOBON
{
private static Byte _infoword = 0;
private static Byte _i_vstr_kontr = 0;
private static Byte _i_neispr_bon = 0;
private static Byte _i_vystavka = 0;
private static Byte _i_gotovnost = 0;
private static Byte _i_ots_massiv_NV = 0;
private static Byte _i_rejim_nav = 0;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_kren = 0;
private static UInt16 _d_tangaj = 0;
private static UInt16 _d_kurs = 0;
private static UInt16 _d_usX = 0;
private static UInt16 _d_usY = 0;
private static UInt16 _d_usZ = 0;
private static UInt16 _d_uskX = 0;
private static UInt16 _d_uskY = 0;
private static UInt16 _d_uskZ = 0;
private static Byte _rejim_SNS = 0;
private static Byte _rejim_2D = 0;
private static Byte _rejim_3dfix = 0;
private static Byte _rejim_RTK = 0;
private static UInt16 _kod_oshibki = 0;
private static UInt16 _ko_nedop_dvij = 0;
private static UInt16 _ko_sboy = 0;
private static UInt16 _ko_ots_dannyh_sns = 0;
private static UInt16 _ko_ots_dannyh_bch = 0;
private static UInt16 _ko_prev_dop_gyro = 0;
private static UInt16 _ko_prev_dop = 0;
public static Byte Start = CONST.STARTTOBON;
public static Byte InfoWord
{
get
{
_infoword = (Byte)(_i_vstr_kontr);
_infoword |= (Byte)(_i_neispr_bon << 1);
_infoword |= (Byte)(_i_vystavka << 2);
_infoword |= (Byte)(_i_gotovnost << 3);
_infoword |= (Byte)(_i_ots_massiv_NV << 4);
_infoword |= (Byte)(_i_rejim_nav << 5);
return _infoword;
}
set
{
_infoword = value;
_i_vstr_kontr = (Byte)(value & 0x01);
_i_neispr_bon = (Byte)((value & 0x02) >> 1);
_i_vystavka = (Byte)((value & 0x04) >> 2);
_i_gotovnost = (Byte)((value & 0x08) >> 3);
_i_ots_massiv_NV = (Byte)((value & 0x10) >> 4);
_i_rejim_nav = (Byte)((value & 0x20) >> 5);
}
}
public static Byte vstr_kontr { get => _i_vstr_kontr; set => _i_vstr_kontr = value; }
public static Byte neispr_bon { get => _i_neispr_bon; set => _i_neispr_bon = value; }
public static Byte vystavka { get => _i_vystavka; set => _i_vystavka = value; }
public static Byte gotovnost { get => _i_gotovnost; set => _i_gotovnost = value; }
public static Byte ots_massiv_NV { get => _i_ots_massiv_NV; set => _i_ots_massiv_NV = value; }
public static Byte rejim_nav { get => _i_rejim_nav; set => _i_rejim_nav = value; }
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_kren);
_dostovernost |= (UInt16)(_d_tangaj << 1);
_dostovernost |= (UInt16)(_d_kurs << 2);
_dostovernost |= (UInt16)(_d_usX << 3);
_dostovernost |= (UInt16)(_d_usY << 4);
_dostovernost |= (UInt16)(_d_usZ << 5);
_dostovernost |= (UInt16)(_d_uskX << 6);
_dostovernost |= (UInt16)(_d_uskY << 7);
_dostovernost |= (UInt16)(_d_uskZ << 8);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_kren = (UInt16)(value & 0x01);
_d_tangaj = (UInt16)((value & 0x0002) >> 1);
_d_kurs = (UInt16)((value & 0x0004) >> 2);
_d_usX = (UInt16)((value & 0x0008) >> 3);
_d_usY = (UInt16)((value & 0x0010) >> 4);
_d_usZ = (UInt16)((value & 0x0020) >> 5);
_d_uskX = (UInt16)((value & 0x0040) >> 6);
_d_uskY = (UInt16)((value & 0x0080) >> 7);
_d_uskZ = (UInt16)((value & 0x0100) >> 8);
}
}
public static UInt16 d_kren { get => _d_kren; set => _d_kren = value; }
public static UInt16 d_tangaj { get => _d_tangaj; set => _d_tangaj = value; }
public static UInt16 d_kurs { get => _d_kurs; set => _d_kurs = value; }
public static UInt16 d_usX { get => _d_usX; set => _d_usX = value; }
public static UInt16 d_usY { get => _d_usY; set => _d_usY = value; }
public static UInt16 d_usZ { get => _d_usZ; set => _d_usZ = value; }
public static UInt16 d_uskX { get => _d_uskX; set => _d_uskX = value; }
public static UInt16 d_uskY { get => _d_uskY; set => _d_uskY = value; }
public static UInt16 d_uskZ { get => _d_uskZ; set => _d_uskZ = value; }
public static Int16 Kren;
public static Int16 Tangaj;
public static Int16 Kurs;
public static Int16 Vost_sk;
public static Int16 Sev_sk;
public static Int16 Vert_sk;
public static UInt16 Modul_sk;
public static Int32 Shirota;
public static Int32 Dolgota;
public static Int32 Vysota;
public static Int16 UsX;
public static Int16 UsY;
public static Int16 UsZ;
public static Int16 UskX;
public static Int16 UskY;
public static Int16 UskZ;
public static UInt32 Time_GPS;
public static Int32 Shirota_GPS;
public static Int32 Dolgota_GPS;
public static Int32 Vysota_GPS;
public static UInt16 Put_ugol_GPS;
public static Byte Sputnik_GPS;
public static Byte Rejim_SNS
{
get
{
_rejim_SNS = _rejim_2D;
_rejim_SNS |= (Byte)(_rejim_3dfix << 1);
_rejim_SNS |= (Byte)(_rejim_RTK << 2);
return _rejim_SNS;
}
set
{
_rejim_SNS = value;
_rejim_2D = (Byte)(value & 0x01);
_rejim_3dfix = (Byte)((value & 0x02) >> 1);
_rejim_RTK = (Byte)((value & 0x04) >> 2);
}
}
public static Byte rejim_2D { get => _rejim_2D; set => _rejim_2D = value; }
public static Byte rejim_3dfix { get => _rejim_3dfix; set => _rejim_3dfix = value; }
public static Byte rejim_RTK { get => _rejim_RTK; set => _rejim_RTK = value; }
public static UInt16 Kod_Oshibki
{
get
{
_kod_oshibki = (UInt16)(_ko_nedop_dvij << 2);
_kod_oshibki |= (UInt16)(_ko_sboy << 3);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_sns << 4);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_bch << 5);
_kod_oshibki |= (UInt16)(_ko_prev_dop_gyro << 6);
_kod_oshibki |= (UInt16)(_ko_prev_dop << 7);
return _kod_oshibki;
}
set
{
_kod_oshibki = value;
_ko_nedop_dvij = (UInt16)((value & 0x0004) >> 2);
_ko_sboy = (UInt16)((value & 0x0008) >> 3);
_ko_ots_dannyh_sns = (UInt16)((value & 0x0010) >> 4);
_ko_ots_dannyh_bch = (UInt16)((value & 0x0020) >> 5);
_ko_prev_dop_gyro = (UInt16)((value & 0x0040) >> 6);
_ko_prev_dop = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 ko_nedop_dvij { get => _ko_nedop_dvij; set => _ko_nedop_dvij = value; }
public static UInt16 ko_sboy { get => _ko_sboy; set => _ko_sboy = value; }
public static UInt16 ko_ots_dannyh_sns { get => _ko_ots_dannyh_sns; set => _ko_ots_dannyh_sns = value; }
public static UInt16 ko_ots_dannyh_bch { get => _ko_ots_dannyh_bch; set => _ko_ots_dannyh_bch = value; }
public static UInt16 ko_prev_dop_gyro { get => _ko_prev_dop_gyro; set => _ko_prev_dop_gyro = value; }
public static UInt16 ko_prev_dop { get => _ko_prev_dop; set => _ko_prev_dop = value; }
public static Byte[] Data = new Byte[64];
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(InfoWord), 0, Data, 1, 1);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 2, 2);
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 8, 2);
Array.Copy(BitConverter.GetBytes(Vost_sk), 0, Data, 10, 2);
Array.Copy(BitConverter.GetBytes(Sev_sk), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(Vert_sk), 0, Data, 14, 2);
Array.Copy(BitConverter.GetBytes(Modul_sk), 0, Data, 16, 2);
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 22, 4);
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 26, 4);
Array.Copy(BitConverter.GetBytes(UsX), 0, Data, 30, 2);
Array.Copy(BitConverter.GetBytes(UsY), 0, Data, 32, 2);
Array.Copy(BitConverter.GetBytes(UsZ), 0, Data, 34, 2);
Array.Copy(BitConverter.GetBytes(UskX), 0, Data, 36, 2);
Array.Copy(BitConverter.GetBytes(UskY), 0, Data, 38, 2);
Array.Copy(BitConverter.GetBytes(UskZ), 0, Data, 40, 2);
Array.Copy(BitConverter.GetBytes(Time_GPS), 0, Data, 42, 4);
Array.Copy(BitConverter.GetBytes(Shirota_GPS), 0, Data, 46, 4);
Array.Copy(BitConverter.GetBytes(Dolgota_GPS), 0, Data, 50, 4);
Array.Copy(BitConverter.GetBytes(Vysota_GPS), 0, Data, 54, 4);
Array.Copy(BitConverter.GetBytes(Put_ugol_GPS), 0, Data, 58, 2);
Array.Copy(BitConverter.GetBytes(Sputnik_GPS), 0, Data, 60, 1);
Array.Copy(BitConverter.GetBytes(Rejim_SNS), 0, Data, 61, 1);
Array.Copy(BitConverter.GetBytes(Kod_Oshibki), 0, Data, 62, 2);
}
public static void GetData()
{
/* Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
InfoWord = Data[12];
Time_Sys = BitConverter.ToUInt32(Data, 13);
Time_Nav = BitConverter.ToUInt32(Data, 27);
Dostovernost = BitConverter.ToUInt16(Data, 21);
Kren = BitConverter.ToInt16(Data, 23);
Tangaj = BitConverter.ToInt16(Data, 25);
Kurs = BitConverter.ToInt16(Data, 27);
Vost_sk = BitConverter.ToInt16(Data, 29);
Sev_sk = BitConverter.ToInt16(Data, 31);
Vert_sk = BitConverter.ToInt16(Data, 33);
Modul_sk = BitConverter.ToUInt16(Data, 35);
Shirota = BitConverter.ToInt32(Data, 37);
Dolgota = BitConverter.ToInt32(Data, 41);
Vysota = BitConverter.ToInt32(Data, 45);
UsX = BitConverter.ToInt16(Data, 49);
UsY = BitConverter.ToInt16(Data, 51);
UsZ = BitConverter.ToInt16(Data, 53);
UskX = BitConverter.ToInt16(Data, 55);
UskY = BitConverter.ToInt16(Data, 57);
UskZ = BitConverter.ToInt16(Data, 59);
Time_GPS = BitConverter.ToUInt32(Data, 61);
Shirota_GPS = BitConverter.ToInt32(Data, 65);
Dolgota_GPS = BitConverter.ToInt32(Data, 69);
Vysota_GPS = BitConverter.ToInt32(Data, 73);
Put_ugol_GPS = BitConverter.ToUInt16(Data, 77);
Sputnik_GPS = Data[79];
Rejim_SNS = Data[80];
Kod_Oshibki = BitConverter.ToUInt16(Data, 81);
CRC16 = BitConverter.ToUInt16(Data, 83);
*/ }
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Новый класс пакет 0322 в БОН
/// </summary>
public static class TOBON0322
{
private const UInt16 _len_pack = 74;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static UInt16 _num_pack = 2;
private static UInt16 _dir_pack = 2;
private static UInt16 _addr_pack = 3;
private static UInt16 _id_pack = 0x0322;
private static UInt32 _schetchik;
private static UInt16 _infoword = 0;
private static UInt16 _i_vstr_kontr = 0;
private static UInt16 _i_neispr_bon = 0;
private static UInt16 _i_vystavka = 0;
private static UInt16 _i_gotovnost = 0;
private static UInt16 _i_ots_massiv_NV = 0;
private static UInt16 _i_rejim_nav = 0;
private static UInt16 _i_korr_nosit = 0;
private static UInt16 _i_korr_sns = 0;
private static UInt32 _time_sys;
private static UInt32 _time_nav;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_kren_tangaj = 0;
private static UInt16 _d_kurs = 0;
private static UInt16 _d_ugl_sk = 0;
private static UInt16 _d_lin_usk = 0;
private static UInt16 _d_in_coord = 0;
private static UInt16 _d_baro = 0;
private static UInt16 _d_inerc_sk = 0;
private static UInt16 _d_vrem_rabot = 0;
private static Int16 _kren;
private static Int16 _tangaj;
private static Int16 _kurs;
private static Int16 _vost_sk;
private static Int16 _sev_sk;
private static Int16 _vert_sk;
private static UInt16 _modul_sk;
private static Int32 _shirota;
private static Int32 _dolgota;
private static Int32 _vysota;
private static Int32 _vysota_baro;
private static Int16 _usx;
private static Int16 _usy;
private static Int16 _usz;
private static Int16 _uskx;
private static Int16 _usky;
private static Int16 _uskz;
private static UInt16 _kod_oshibki;
private static UInt16 _ko_nedop_dvij;
private static UInt16 _ko_sboy;
private static UInt16 _ko_ots_dannyh_sns;
private static UInt16 _ko_ots_dannyh_bch;
private static UInt16 _ko_prev_dop_gyro;
private static UInt16 _ko_prev_dop_axel;
private static Int32 _vremya_ustar;
private static UInt16 _CRC16;
public static Byte Start = CONST.STARTTOBON0322;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrOES | (UInt16)CONST.ADDR.addrPR | (UInt16)CONST.ADDR.addrPU;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght { get => _len_data; set => _len_data = value; }
/// <summary>
/// Идентификатор пакета
/// </summary>
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static UInt16 num_pack { get => _num_pack; set => _num_pack = value; }
public static UInt16 dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static UInt16 addr_pack { get => _addr_pack; set => _addr_pack = value; }
/// <summary>
/// Счетчик
/// </summary>
public static UInt32 Schetchik { get => _schetchik; set => _schetchik = value; }
/// <summary>
/// Слово информационное
/// </summary>
public static UInt16 InfoWord
{
get
{
_infoword = (UInt16)(_i_vstr_kontr << 0);
_infoword |= (UInt16)(_i_neispr_bon << 1);
_infoword |= (UInt16)(_i_vystavka << 2);
_infoword |= (UInt16)(_i_gotovnost << 3);
_infoword |= (UInt16)(_i_ots_massiv_NV << 4);
_infoword |= (UInt16)(_i_rejim_nav << 5);
_infoword |= (UInt16)(_i_korr_nosit << 6);
_infoword |= (UInt16)(_i_korr_sns << 7);
return _infoword;
}
set
{
_infoword = value;
_i_vstr_kontr = (UInt16)(value & 0x01 >> 0);
_i_neispr_bon = (UInt16)((value & 0x02) >> 1);
_i_vystavka = (UInt16)((value & 0x04) >> 2);
_i_gotovnost = (UInt16)((value & 0x08) >> 3);
_i_ots_massiv_NV = (UInt16)((value & 0x10) >> 4);
_i_rejim_nav = (UInt16)((value & 0x20) >> 5);
_i_korr_nosit = (UInt16)((value & 0x40) >> 6);
_i_korr_sns = (UInt16)((value & 0x80) >> 7);
}
}
public static UInt16 I_vstr_kontr { get => _i_vstr_kontr; set => _i_vstr_kontr = value; }
public static UInt16 I_neispr_bon { get => _i_neispr_bon; set => _i_neispr_bon = value; }
public static UInt16 I_vystavka { get => _i_vystavka; set => _i_vystavka = value; }
public static UInt16 I_gotovnost { get => _i_gotovnost; set => _i_gotovnost = value; }
public static UInt16 I_ots_massiv_NV { get => _i_ots_massiv_NV; set => _i_ots_massiv_NV = value; }
public static UInt16 I_rejim_nav { get => _i_rejim_nav; set => _i_rejim_nav = value; }
public static UInt16 I_korr_nosit { get => _i_korr_nosit; set => _i_korr_nosit = value; }
public static UInt16 I_korr_sns { get => _i_korr_sns; set => _i_korr_sns = value; }
/// <summary>
/// Время с подачи питания
/// </summary>
public static UInt32 Time_Sys { get => _time_sys; set => _time_sys = value; }
/// <summary>
/// Время в режме навигация
/// </summary>
public static UInt32 Time_Nav { get => _time_nav; set => _time_nav = value; }
/// <summary>
/// Достоверность данных
/// </summary>
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_kren_tangaj);
_dostovernost |= (UInt16)(_d_kurs << 1);
_dostovernost |= (UInt16)(_d_ugl_sk << 2);
_dostovernost |= (UInt16)(_d_lin_usk << 3);
_dostovernost |= (UInt16)(_d_in_coord << 4);
_dostovernost |= (UInt16)(_d_baro << 5);
_dostovernost |= (UInt16)(_d_inerc_sk << 6);
_dostovernost |= (UInt16)(_d_vrem_rabot << 7);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_kren_tangaj = (UInt16)((value & 0x0001) >> 0);
_d_kurs = (UInt16)((value & 0x0002) >> 1);
_d_ugl_sk = (UInt16)((value & 0x0004) >> 2);
_d_lin_usk = (UInt16)((value & 0x0008) >> 3);
_d_in_coord = (UInt16)((value & 0x0010) >> 4);
_d_baro = (UInt16)((value & 0x0020) >> 5);
_d_inerc_sk = (UInt16)((value & 0x0040) >> 6);
_d_vrem_rabot = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 D_kren_tangaj { get => _d_kren_tangaj; set => _d_kren_tangaj = value; }
public static UInt16 D_kurs { get => _d_kurs; set => _d_kurs = value; }
public static UInt16 D_ugl_sk { get => _d_ugl_sk; set => _d_ugl_sk = value; }
public static UInt16 D_lin_usk { get => _d_lin_usk; set => _d_lin_usk = value; }
public static UInt16 D_in_coord { get => _d_in_coord; set => _d_in_coord = value; }
public static UInt16 D_baro { get => _d_baro; set => _d_baro = value; }
public static UInt16 D_inerc_sk { get => _d_inerc_sk; set => _d_inerc_sk = value; }
public static UInt16 D_vrem_rabot { get => _d_vrem_rabot; set => _d_vrem_rabot = value; }
public static Int16 Kren { get => _kren; set => _kren = value; }
public static Int16 Tangaj { get => _tangaj; set => _tangaj = value; }
public static Int16 Kurs { get => _kurs; set => _kurs = value; }
public static Int16 Vost_sk { get => _vost_sk; set => _vost_sk = value; }
public static Int16 Sev_sk { get => _sev_sk; set => _sev_sk = value; }
public static Int16 Vert_sk { get => _vert_sk; set => _vert_sk = value; }
public static UInt16 Modul_sk { get => _modul_sk; set => _modul_sk = value; }
public static Int32 Shirota { get => _shirota; set => _shirota = value; }
public static Int32 Dolgota { get => _dolgota; set => _dolgota = value; }
public static Int32 Vysota { get => _vysota; set => _vysota = value; }
public static Int32 Vysota_baro { get => _vysota_baro; set => _vysota_baro = value; }
public static Int16 UsX { get => _usx; set => _usx = value; }
public static Int16 UsY { get => _usy; set => _usy = value; }
public static Int16 UsZ { get => _usz; set => _usz = value; }
public static Int16 UskX { get => _uskx; set => _uskx = value; }
public static Int16 UskY { get => _usky; set => _usky = value; }
public static Int16 UskZ { get => _uskz; set => _uskz = value; }
/// <summary>
/// Код ошибки БИНС
/// </summary>
public static UInt16 Kod_Oshibki
{
get
{
_kod_oshibki = (UInt16)(_ko_nedop_dvij << 2);
_kod_oshibki |= (UInt16)(_ko_sboy << 3);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_sns << 4);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_bch << 5);
_kod_oshibki |= (UInt16)(_ko_prev_dop_gyro << 6);
_kod_oshibki |= (UInt16)(_ko_prev_dop_axel << 7);
return _kod_oshibki;
}
set
{
_kod_oshibki = value;
_ko_nedop_dvij = (UInt16)((value & 0x0004) >> 2);
_ko_sboy = (UInt16)((value & 0x0008) >> 3);
_ko_ots_dannyh_sns = (UInt16)((value & 0x0010) >> 4);
_ko_ots_dannyh_bch = (UInt16)((value & 0x0020) >> 5);
_ko_prev_dop_gyro = (UInt16)((value & 0x0040) >> 6);
_ko_prev_dop_axel = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 Ko_nedop_dvij { get => _ko_nedop_dvij; set => _ko_nedop_dvij = value; }
public static UInt16 Ko_sboy { get => _ko_sboy; set => _ko_sboy = value; }
public static UInt16 Ko_ots_dannyh_sns { get => _ko_ots_dannyh_sns; set => _ko_ots_dannyh_sns = value; }
public static UInt16 Ko_ots_dannyh_bch { get => _ko_ots_dannyh_bch; set => _ko_ots_dannyh_bch = value; }
public static UInt16 Ko_prev_dop_gyro { get => _ko_prev_dop_gyro; set => _ko_prev_dop_gyro = value; }
public static UInt16 Ko_prev_dop_axel { get => _ko_prev_dop_axel; set => _ko_prev_dop_axel = value; }
/// <summary>
/// Время устаревания информации от комплекса
/// </summary>
public static Int32 Vremya_ustar { get => _vremya_ustar; set => _vremya_ustar = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[_len_pack];
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(InfoWord), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(Time_Sys), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(Time_Nav), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 22, 2);
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 24, 2);
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 26, 2);
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 28, 2);
Array.Copy(BitConverter.GetBytes(Vost_sk), 0, Data, 30, 2);
Array.Copy(BitConverter.GetBytes(Sev_sk), 0, Data, 32, 2);
Array.Copy(BitConverter.GetBytes(Vert_sk), 0, Data, 34, 2);
Array.Copy(BitConverter.GetBytes(Modul_sk), 0, Data, 36, 2);
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 38, 4);
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 42, 4);
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 46, 4);
Array.Copy(BitConverter.GetBytes(Vysota_baro), 0, Data, 50, 4);
Array.Copy(BitConverter.GetBytes(UsX), 0, Data, 54, 2);
Array.Copy(BitConverter.GetBytes(UsY), 0, Data, 56, 2);
Array.Copy(BitConverter.GetBytes(UsZ), 0, Data, 58, 2);
Array.Copy(BitConverter.GetBytes(UskX), 0, Data, 60, 2);
Array.Copy(BitConverter.GetBytes(UskY), 0, Data, 62, 2);
Array.Copy(BitConverter.GetBytes(UskZ), 0, Data, 64, 2);
Array.Copy(BitConverter.GetBytes(Kod_Oshibki), 0, Data, 66, 2);
Array.Copy(BitConverter.GetBytes(Vremya_ustar), 0, Data, 68, 4);
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Новый класс пакет 0323 в БОН
/// </summary>
public static class TOBON0323
{
private const UInt16 _len_pack = 50;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static Byte _num_pack = 3;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 3;
private static UInt16 _id_pack = 0x0323;
private static UInt32 _schetchik;
private static UInt16 _rejim_SNS = 0;
private static UInt16 _rejim_2D = 0;
private static UInt16 _rejim_3dfix = 0;
private static UInt16 _rejim_RTK = 0;
private static UInt32 _time_sys;
private static UInt32 _time_nav;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_coord = 0;
private static UInt16 _d_vysota = 0;
private static UInt16 _d_skorost = 0;
private static UInt16 _d_vremya = 0;
private static UInt16 _d_gf_sputnik = 0;
private static UInt32 _time_sns;
private static Int32 _shirota_sns;
private static Int32 _dolgota_sns;
private static Int32 _vysota_sns;
private static UInt16 _put_ugol_sns;
private static UInt16 _sputnik_sns;
private static Int32 _vremya_ustar;
private static UInt16 _CRC16;
public static Byte Start = CONST.STARTTOBON0323;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrOES | (UInt16)CONST.ADDR.addrPR | (UInt16)CONST.ADDR.addrPU;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght { get => _len_data; set => _len_data = value; }
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; set => _num_pack = value; }
public static Byte dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static Byte addr_pack { get => _addr_pack; set => _addr_pack = value; }
public static UInt32 Schetchik { get => _schetchik; set => _schetchik = value; }
public static UInt16 Rejim_SNS
{
get
{
_rejim_SNS = (UInt16)_rejim_2D;
_rejim_SNS |= (UInt16)(_rejim_3dfix << 1);
_rejim_SNS |= (UInt16)(_rejim_RTK << 2);
return _rejim_SNS;
}
set
{
_rejim_SNS = (UInt16)(value);
_rejim_2D = (UInt16)(value & 0x01);
_rejim_3dfix = (UInt16)((value & 0x02) >> 1);
_rejim_RTK = (UInt16)((value & 0x04) >> 2);
}
}
public static UInt16 rejim_2D { get => _rejim_2D; set => _rejim_2D = value; }
public static UInt16 rejim_3dfix { get => _rejim_3dfix; set => _rejim_3dfix = value; }
public static UInt16 rejim_RTK { get => _rejim_RTK; set => _rejim_RTK = value; }
/// <summary>
/// Время с подачи питания
/// </summary>
public static UInt32 Time_Sys { get => _time_sys; set => _time_sys = value; }
/// <summary>
/// Время в режме навигация
/// </summary>
public static UInt32 Time_Nav { get => _time_nav; set => _time_nav = value; }
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_coord);
_dostovernost |= (UInt16)(_d_vysota << 1);
_dostovernost |= (UInt16)(_d_skorost << 2);
_dostovernost |= (UInt16)(_d_vremya << 3);
_dostovernost |= (UInt16)(_d_gf_sputnik << 4);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_coord = (UInt16)(value & 0x0001);
_d_vysota = (UInt16)((value & 0x0002) >> 1);
_d_skorost = (UInt16)((value & 0x0004) >> 2);
_d_vremya = (UInt16)((value & 0x0008) >> 3);
_d_gf_sputnik = (UInt16)((value & 0x0010) >> 4);
}
}
public static UInt16 D_coord { get => _d_coord; set => _d_coord = value; }
public static UInt16 D_vysota { get => _d_vysota; set => _d_vysota = value; }
public static UInt16 D_skorost { get => _d_skorost; set => _d_skorost = value; }
public static UInt16 D_vremya { get => _d_vremya; set => _d_vremya = value; }
public static UInt16 D_gf_sputnik { get => _d_gf_sputnik; set => _d_gf_sputnik = value; }
public static UInt32 Time_sns { get => _time_sns; set => _time_sns = value; }
public static Int32 Shirota_sns { get => _shirota_sns; set => _shirota_sns = value; }
public static Int32 Dolgota_sns { get => _dolgota_sns; set => _dolgota_sns = value; }
public static Int32 Vysota_sns { get => _vysota_sns; set => _vysota_sns = value; }
public static UInt16 Put_ugol_sns { get => _put_ugol_sns; set => _put_ugol_sns = value; }
public static UInt16 Sputnik_sns { get => _sputnik_sns; set => _sputnik_sns = value; }
public static Int32 Vremya_ustar { get => _vremya_ustar; set => _vremya_ustar = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[_len_pack];
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(Rejim_SNS), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(Time_Sys), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(Time_Nav), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 22, 2);
Array.Copy(BitConverter.GetBytes(Time_sns), 0, Data, 24, 4);
Array.Copy(BitConverter.GetBytes(Shirota_sns), 0, Data, 28, 4);
Array.Copy(BitConverter.GetBytes(Dolgota_sns), 0, Data, 32, 4);
Array.Copy(BitConverter.GetBytes(Vysota_sns), 0, Data, 36, 4);
Array.Copy(BitConverter.GetBytes(Put_ugol_sns), 0, Data, 40, 2);
Array.Copy(BitConverter.GetBytes(Sputnik_sns), 0, Data, 42, 2);
Array.Copy(BitConverter.GetBytes(Vremya_ustar), 0, Data, 44, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
Rejim_SNS = BitConverter.ToUInt16(Data, 12);
Time_Sys = BitConverter.ToUInt32(Data, 14);
Time_Nav = BitConverter.ToUInt32(Data, 18);
Dostovernost = BitConverter.ToUInt16(Data, 22);
Time_sns = BitConverter.ToUInt32(Data, 24);
Shirota_sns = BitConverter.ToInt32(Data, 28);
Dolgota_sns = BitConverter.ToInt32(Data, 32);
Vysota_sns = BitConverter.ToInt32(Data, 36);
Put_ugol_sns = BitConverter.ToUInt16(Data, 40);
Sputnik_sns = BitConverter.ToUInt16(Data, 42);
Vremya_ustar = BitConverter.ToInt32(Data, 44);
CRC16 = BitConverter.ToUInt16(Data, 48);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
public static class OES2BVM
{
private static Byte _num_pack = 1;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 2;
private static UInt16 _id_pack = 0x0221;
private static UInt16 _rejim = 0;
private static UInt16 _r_ioes = 0;
private static UInt16 _r_zahvat = 0;
private static UInt16 _r_rejimoes = 0;
private static UInt16 _r_sostoes = 0;
private static UInt16 _r_vsktk = 0;
private static UInt16 _r_rks = 0;
private static UInt16 _r_eizo_recv = 0;
private static UInt16 _r_eizo = 0;
public static Byte Start = CONST.START;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrPU | (UInt16)CONST.ADDR.addrPR;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght = 24;
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; set => _num_pack = value; }
public static Byte dir_pack { get => _dir_pack; set => _dir_pack = value; }
public static Byte addr_pack { get => _addr_pack; set => _addr_pack = value; }
public static UInt32 Schetchik;
public static UInt16 Rejim
{
get
{
_rejim = (UInt16)(_r_ioes << 0);
_rejim |= (UInt16)(_r_zahvat << 1);
_rejim |= (UInt16)(_r_rejimoes << 2);
_rejim |= (UInt16)(_r_sostoes << 4);
_rejim |= (UInt16)(_r_vsktk << 6);
_rejim |= (UInt16)(_r_rks << 7);
_rejim |= (UInt16)(_r_eizo_recv << 8);
_rejim |= (UInt16)(_r_eizo << 9);
return _rejim;
}
set
{
_rejim = value;
_r_ioes = (UInt16)((value & 0x0001) >> 0);
_r_zahvat = (UInt16)((value & 0x0002) >> 1);
_r_rejimoes = (UInt16)((value & 0x000C) >> 2);
_r_sostoes = (UInt16)((value & 0x0030) >> 4);
_r_vsktk = (UInt16)((value & 0x0040) >> 6);
_r_rks = (UInt16)((value & 0x0080) >> 7);
_r_eizo_recv = (UInt16)((value & 0x0100) >> 8);
_r_eizo = (UInt16)((value & 0x0200) >> 9);
}
}
public static UInt16 r_ioes { get => _r_ioes; set => _r_ioes = value; }
public static UInt16 r_zahvat { get => _r_zahvat; set => _r_zahvat = value; }
public static UInt16 r_rejimoes { get => _r_rejimoes; set => _r_rejimoes = value; }
public static UInt16 r_sostoes { get => _r_sostoes; set => _r_sostoes = value; }
public static UInt16 r_vsktk { get => _r_vsktk; set => _r_vsktk = value; }
public static UInt16 r_rks { get => _r_rks; set => _r_rks = value; }
public static UInt16 r_eizo_recv { get => _r_eizo_recv; set => _r_eizo_recv = value; }
public static UInt16 r_eizo { get => _r_eizo; set => _r_eizo = value; }
public static String RejimOES
{
get
{
switch (_r_rejimoes)
{
case 0:
return "Ожидание";
case 1:
return "Обзор";
case 2:
return " АС ";
default:
return "Ожидание";
}
}
}
public static String SostOES
{
get
{
switch (_r_sostoes)
{
case 0:
return "Подготовка";
case 1:
return "Работа";
case 2:
return "Технология";
case 3:
return "Отказ";
default:
return "Подготовка";
}
}
}
public static float AZ;
public static float UM;
public static float usAZ;
public static float usUM;
public static UInt16 CRC16;
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, 30);
}
public static Byte[] Data = new Byte[32];
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(Rejim), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(AZ), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(UM), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(usAZ), 0, Data, 22, 4);
Array.Copy(BitConverter.GetBytes(usUM), 0, Data, 26, 4);
UInt16 _crc16 = CONST.CRC16(ref Data, 30);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, 30, 2);
}
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
Rejim = BitConverter.ToUInt16(Data, 12);
AZ = BitConverter.ToSingle(Data, 14);
UM = BitConverter.ToSingle(Data, 18);
usAZ = BitConverter.ToSingle(Data, 22);
usUM = BitConverter.ToSingle(Data, 26);
CRC16 = BitConverter.ToUInt16(Data, 30);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
public static class BVM2OES
{
private const UInt16 _len_pack = 42;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static Byte _num_pack = 1;
private static Byte _dir_pack = 1;
private static Byte _addr_pack = 2;
private static UInt16 _id_pack = 0x0211;
private static UInt16 _rejim = 0;
private static UInt16 _r_crc = 0;
private static UInt16 _r_rejimoes = 0;
private static UInt16 _r_tk = 0;
private static UInt16 _r_rks = 0;
private static UInt16 _r_eizo = 0;
public static Byte Start = CONST.START;
public static UInt16 Address = (UInt16)CONST.ADDR.addrOES;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght = 34;
public static UInt16 Id_Pack
{
get
{
if (_id_pack != 0)
{
return _id_pack;
}
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack
{
get => _num_pack;
set
{
_num_pack = value;
}
}
public static Byte dir_pack
{
get => _dir_pack;
set
{
_dir_pack = value;
}
}
public static Byte addr_pack
{
get => _addr_pack;
set
{
_addr_pack = value;
}
}
public static UInt32 Schetchik;
public static UInt16 Rejim
{
get
{
_rejim = 0;
_rejim |= (UInt16)(_r_crc << 0);
_rejim |= (UInt16)(_r_rejimoes << 1);
_rejim |= (UInt16)(_r_tk << 3);
_rejim |= (UInt16)(_r_rks << 4);
_rejim |= (UInt16)(_r_eizo << 5);
return _rejim;
}
set
{
_rejim = value;
_r_crc = (UInt16)((value & 0x0001) >> 0);
_r_rejimoes = (UInt16)((value & 0x0006) >> 1);
_r_tk = (UInt16)((value & 0x0008) >> 3);
_r_rks = (UInt16)((value & 0x0010) >> 4);
_r_eizo = (UInt16)((value & 0x0020) >> 5);
}
}
public static UInt16 r_crc { get => _r_crc; set => _r_crc = value; }
public static UInt16 r_rejimoes { get => _r_rejimoes; set => _r_rejimoes = value; }
public static UInt16 r_tk { get => _r_tk; set => _r_tk = value; }
public static UInt16 r_rks { get => _r_rks; set => _r_rks = value; }
public static UInt16 r_eizo { get => _r_eizo; set => _r_eizo = value; }
public static String RejimOES
{
get
{
switch (_r_rejimoes)
{
case 0:
return "Ожидание";
case 1:
return "Обзор";
case 2:
return "АС";
default:
return "Ожидание";
}
}
}
public static float ustAZ;
public static float ustUM;
public static UInt16 X;
public static UInt16 Y;
public static Byte lx;
public static Byte ly;
public static float AZ;
public static float UM;
public static Int16 Xrks;
public static Int16 Yrks;
public static UInt16 CRC16;
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, _len_crc);
}
public static Byte[] Data = new Byte[_len_pack];
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(Rejim), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(ustAZ), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(ustUM), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(X), 0, Data, 22, 2);
Array.Copy(BitConverter.GetBytes(Y), 0, Data, 24, 2);
Array.Copy(BitConverter.GetBytes(lx), 0, Data, 26, 1);
Array.Copy(BitConverter.GetBytes(ly), 0, Data, 27, 1);
Array.Copy(BitConverter.GetBytes(AZ), 0, Data, 28, 4);
Array.Copy(BitConverter.GetBytes(UM), 0, Data, 32, 4);
Array.Copy(BitConverter.GetBytes(Xrks), 0, Data, 36, 2);
Array.Copy(BitConverter.GetBytes(Yrks), 0, Data, 38, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, 40);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, 40, 2);
}
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
Rejim = BitConverter.ToUInt16(Data, 12);
ustAZ = BitConverter.ToSingle(Data, 14);
ustUM = BitConverter.ToSingle(Data, 18);
X = BitConverter.ToUInt16(Data, 22);
Y = BitConverter.ToUInt16(Data, 24);
lx = Data[26];
ly = Data[27];
AZ = BitConverter.ToSingle(Data, 28);
UM = BitConverter.ToSingle(Data, 32);
Xrks = BitConverter.ToInt16(Data, 36);
Yrks = BitConverter.ToInt16(Data, 38);
CRC16 = BitConverter.ToUInt16(Data, 40);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
public static class BON2BVM
{
private static Byte _num_pack = 1;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 3;
private static UInt16 _id_pack = 0x0321;
private static Byte _infoword = 0;
private static Byte _i_vstr_kontr = 0;
private static Byte _i_neispr_bon = 0;
private static Byte _i_vystavka = 0;
private static Byte _i_gotovnost = 0;
private static Byte _i_ots_massiv_NV = 0;
private static Byte _i_rejim_nav = 0;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_kren = 0;
private static UInt16 _d_tangaj = 0;
private static UInt16 _d_kurs = 0;
private static UInt16 _d_usX = 0;
private static UInt16 _d_usY = 0;
private static UInt16 _d_usZ = 0;
private static UInt16 _d_uskX = 0;
private static UInt16 _d_uskY = 0;
private static UInt16 _d_uskZ = 0;
private static Byte _rejim_SNS = 0;
private static Byte _rejim_2D = 0;
private static Byte _rejim_3dfix = 0;
private static Byte _rejim_RTK = 0;
private static UInt16 _kod_oshibki;
private static UInt16 _ko_nedop_dvij;
private static UInt16 _ko_sboy;
private static UInt16 _ko_ots_dannyh_sns;
private static UInt16 _ko_ots_dannyh_bch;
private static UInt16 _ko_prev_dop_gyro;
private static UInt16 _ko_prev_dop;
public static Byte Start = CONST.START;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrOES;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght = 77;
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; set => _num_pack = value; }
public static Byte dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static Byte addr_pack { get => _addr_pack; set => _addr_pack = value; }
public static UInt32 Schetchik;
public static Byte InfoWord
{
get
{
_infoword = (Byte)(_i_vstr_kontr);
_infoword |= (Byte)(_i_neispr_bon << 1);
_infoword |= (Byte)(_i_vystavka << 2);
_infoword |= (Byte)(_i_gotovnost << 3);
_infoword |= (Byte)(_i_ots_massiv_NV << 4);
_infoword |= (Byte)(_i_rejim_nav << 5);
return _infoword;
}
set
{
_infoword = value;
_i_vstr_kontr = (Byte)(value & 0x01);
_i_neispr_bon = (Byte)((value & 0x02) >> 1);
_i_vystavka = (Byte)((value & 0x04) >> 2);
_i_gotovnost = (Byte)((value & 0x08) >> 3);
_i_ots_massiv_NV = (Byte)((value & 0x10) >> 4);
_i_rejim_nav = (Byte)((value & 0x20) >> 5);
}
}
public static Byte vstr_kontr { get => _i_vstr_kontr; set => _i_vstr_kontr = value; }
public static Byte neispr_bon { get => _i_neispr_bon; set => _i_neispr_bon = value; }
public static Byte vystavka { get => _i_vystavka; set => _i_vystavka = value; }
public static Byte gotovnost { get => _i_gotovnost; set => _i_gotovnost = value; }
public static Byte ots_massiv_NV { get => _i_ots_massiv_NV; set => _i_ots_massiv_NV = value; }
public static Byte rejim_nav { get => _i_rejim_nav; set => _i_rejim_nav = value; }
public static UInt32 Time_Sys;
public static UInt32 Time_Nav;
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_kren);
_dostovernost |= (UInt16)(_d_tangaj << 1);
_dostovernost |= (UInt16)(_d_kurs << 2);
_dostovernost |= (UInt16)(_d_usX << 3);
_dostovernost |= (UInt16)(_d_usY << 4);
_dostovernost |= (UInt16)(_d_usZ << 5);
_dostovernost |= (UInt16)(_d_uskX << 6);
_dostovernost |= (UInt16)(_d_uskY << 7);
_dostovernost |= (UInt16)(_d_uskZ << 8);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_kren = (UInt16)(value & 0x01);
_d_tangaj = (UInt16)((value & 0x0002) >> 1);
_d_kurs = (UInt16)((value & 0x0004) >> 2);
_d_usX = (UInt16)((value & 0x0008) >> 3);
_d_usY = (UInt16)((value & 0x0010) >> 4);
_d_usZ = (UInt16)((value & 0x0020) >> 5);
_d_uskX = (UInt16)((value & 0x0040) >> 6);
_d_uskY = (UInt16)((value & 0x0080) >> 7);
_d_uskZ = (UInt16)((value & 0x0100) >> 8);
}
}
public static UInt16 d_kren { get => _d_kren; set => _d_kren = value; }
public static UInt16 d_tangaj { get => _d_tangaj; set => _d_tangaj = value; }
public static UInt16 d_kurs { get => _d_kurs; set => _d_kurs = value; }
public static UInt16 d_usX { get => _d_usX; set => _d_usX = value; }
public static UInt16 d_usY { get => _d_usY; set => _d_usY = value; }
public static UInt16 d_usZ { get => _d_usZ; set => _d_usZ = value; }
public static UInt16 d_uskX { get => _d_uskX; set => _d_uskX = value; }
public static UInt16 d_uskY { get => _d_uskY; set => _d_uskY = value; }
public static UInt16 d_uskZ { get => _d_uskZ; set => _d_uskZ = value; }
public static Int16 Kren;
public static Int16 Tangaj;
public static Int16 Kurs;
public static Int16 Vost_sk;
public static Int16 Sev_sk;
public static Int16 Vert_sk;
public static UInt16 Modul_sk;
public static Int32 Shirota;
public static Int32 Dolgota;
public static Int32 Vysota;
public static Int16 UsX;
public static Int16 UsY;
public static Int16 UsZ;
public static Int16 UskX;
public static Int16 UskY;
public static Int16 UskZ;
public static UInt32 Time_GPS;
public static Int32 Shirota_GPS;
public static Int32 Dolgota_GPS;
public static Int32 Vysota_GPS;
public static UInt16 Put_ugol_GPS;
public static Byte Sputnik_GPS;
public static Byte Rejim_SNS
{
get
{
_rejim_SNS = _rejim_2D;
_rejim_SNS |= (Byte)(_rejim_3dfix << 1);
_rejim_SNS |= (Byte)(_rejim_RTK << 2);
return _rejim_SNS;
}
set
{
_rejim_SNS = value;
_rejim_2D = (Byte)(value & 0x01);
_rejim_3dfix = (Byte)((value & 0x02) >> 1);
_rejim_RTK = (Byte)((value & 0x04) >> 2);
}
}
public static Byte rejim_2D { get => _rejim_2D; set => _rejim_2D = value; }
public static Byte rejim_3dfix { get => _rejim_3dfix; set => _rejim_3dfix = value; }
public static Byte rejim_RTK { get => _rejim_RTK; set => _rejim_RTK = value; }
public static UInt16 Kod_Oshibki
{
get
{
_kod_oshibki = (UInt16)(_ko_nedop_dvij << 2);
_kod_oshibki |= (UInt16)(_ko_sboy << 3);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_sns << 4);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_bch << 5);
_kod_oshibki |= (UInt16)(_ko_prev_dop_gyro << 6);
_kod_oshibki |= (UInt16)(_ko_prev_dop << 7);
return _kod_oshibki;
}
set
{
_kod_oshibki = value;
_ko_nedop_dvij = (UInt16)((value & 0x0004) >> 2);
_ko_sboy = (UInt16)((value & 0x0008) >> 3);
_ko_ots_dannyh_sns = (UInt16)((value & 0x0010) >> 4);
_ko_ots_dannyh_bch = (UInt16)((value & 0x0020) >> 5);
_ko_prev_dop_gyro = (UInt16)((value & 0x0040) >> 6);
_ko_prev_dop = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 ko_nedop_dvij { get => _ko_nedop_dvij; set => _ko_nedop_dvij = value; }
public static UInt16 ko_sboy { get => _ko_sboy; set => _ko_sboy = value; }
public static UInt16 ko_ots_dannyh_sns { get => _ko_ots_dannyh_sns; set => _ko_ots_dannyh_sns = value; }
public static UInt16 ko_ots_dannyh_bch { get => _ko_ots_dannyh_bch; set => _ko_ots_dannyh_bch = value; }
public static UInt16 ko_prev_dop_gyro { get => _ko_prev_dop_gyro; set => _ko_prev_dop_gyro = value; }
public static UInt16 ko_prev_dop { get => _ko_prev_dop; set => _ko_prev_dop = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[85];
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(InfoWord), 0, Data, 12, 1);
Array.Copy(BitConverter.GetBytes(Time_Sys), 0, Data, 13, 4);
Array.Copy(BitConverter.GetBytes(Time_Nav), 0, Data, 17, 4);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 21, 2);
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 23, 2);
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 25, 2);
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 27, 2);
Array.Copy(BitConverter.GetBytes(Vost_sk), 0, Data, 29, 2);
Array.Copy(BitConverter.GetBytes(Sev_sk), 0, Data, 31, 2);
Array.Copy(BitConverter.GetBytes(Vert_sk), 0, Data, 33, 2);
Array.Copy(BitConverter.GetBytes(Modul_sk), 0, Data, 35, 2);
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 37, 4);
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 41, 4);
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 45, 4);
Array.Copy(BitConverter.GetBytes(UsX), 0, Data, 49, 2);
Array.Copy(BitConverter.GetBytes(UsY), 0, Data, 51, 2);
Array.Copy(BitConverter.GetBytes(UsZ), 0, Data, 53, 2);
Array.Copy(BitConverter.GetBytes(UskX), 0, Data, 55, 2);
Array.Copy(BitConverter.GetBytes(UskY), 0, Data, 57, 2);
Array.Copy(BitConverter.GetBytes(UskZ), 0, Data, 59, 2);
Array.Copy(BitConverter.GetBytes(Time_GPS), 0, Data, 61, 4);
Array.Copy(BitConverter.GetBytes(Shirota_GPS), 0, Data, 65, 4);
Array.Copy(BitConverter.GetBytes(Dolgota_GPS), 0, Data, 69, 4);
Array.Copy(BitConverter.GetBytes(Vysota_GPS), 0, Data, 73, 4);
Array.Copy(BitConverter.GetBytes(Put_ugol_GPS), 0, Data, 77, 2);
Array.Copy(BitConverter.GetBytes(Sputnik_GPS), 0, Data, 79, 1);
Array.Copy(BitConverter.GetBytes(Rejim_SNS), 0, Data, 80, 1);
Array.Copy(BitConverter.GetBytes(Kod_Oshibki), 0, Data, 81, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, 83);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, 83, 2);
}
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
InfoWord = Data[12];
Time_Sys = BitConverter.ToUInt32(Data, 13);
Time_Nav = BitConverter.ToUInt32(Data, 17);
Dostovernost = BitConverter.ToUInt16(Data, 21);
Kren = BitConverter.ToInt16(Data, 23);
Tangaj = BitConverter.ToInt16(Data, 25);
Kurs = BitConverter.ToInt16(Data, 27);
Vost_sk = BitConverter.ToInt16(Data, 29);
Sev_sk = BitConverter.ToInt16(Data, 31);
Vert_sk = BitConverter.ToInt16(Data, 33);
Modul_sk = BitConverter.ToUInt16(Data, 35);
Shirota = BitConverter.ToInt32(Data, 37);
Dolgota = BitConverter.ToInt32(Data, 41);
Vysota = BitConverter.ToInt32(Data, 45);
UsX = BitConverter.ToInt16(Data, 49);
UsY = BitConverter.ToInt16(Data, 51);
UsZ = BitConverter.ToInt16(Data, 53);
UskX = BitConverter.ToInt16(Data, 55);
UskY = BitConverter.ToInt16(Data, 57);
UskZ = BitConverter.ToInt16(Data, 59);
Time_GPS = BitConverter.ToUInt32(Data, 61);
Shirota_GPS = BitConverter.ToInt32(Data, 65);
Dolgota_GPS = BitConverter.ToInt32(Data, 69);
Vysota_GPS = BitConverter.ToInt32(Data, 73);
Put_ugol_GPS = BitConverter.ToUInt16(Data, 77);
Sputnik_GPS = Data[79];
Rejim_SNS = Data[80];
Kod_Oshibki = BitConverter.ToUInt16(Data, 81);
CRC16 = BitConverter.ToUInt16(Data, 83);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Новый класс пакет обмена данных ИНС от БОН
/// </summary>
public static class BONINS2BVM
{
private const UInt16 _len_pack = 74;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static Byte _num_pack = 2;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 3;
private static UInt16 _id_pack = 0x0322;
private static UInt32 _schetchik;
private static UInt16 _infoword = 0;
private static UInt16 _i_vstr_kontr = 0;
private static UInt16 _i_neispr_bon = 0;
private static UInt16 _i_vystavka = 0;
private static UInt16 _i_gotovnost = 0;
private static UInt16 _i_ots_massiv_NV = 0;
private static UInt16 _i_rejim_nav = 0;
private static UInt16 _i_korr_nosit = 0;
private static UInt16 _i_korr_sns = 0;
private static UInt32 _time_sys;
private static UInt32 _time_nav;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_kren_tangaj = 0;
private static UInt16 _d_kurs = 0;
private static UInt16 _d_ugl_sk = 0;
private static UInt16 _d_lin_usk = 0;
private static UInt16 _d_in_coord = 0;
private static UInt16 _d_baro = 0;
private static UInt16 _d_inerc_sk = 0;
private static UInt16 _d_vrem_rabot = 0;
private static Int16 _kren;
private static Int16 _tangaj;
private static Int16 _kurs;
private static Int16 _vost_sk;
private static Int16 _sev_sk;
private static Int16 _vert_sk;
private static UInt16 _modul_sk;
private static Int32 _shirota;
private static Int32 _dolgota;
private static Int32 _vysota;
private static Int32 _vysota_baro;
private static Int16 _usx;
private static Int16 _usy;
private static Int16 _usz;
private static Int16 _uskx;
private static Int16 _usky;
private static Int16 _uskz;
private static UInt16 _kod_oshibki;
private static UInt16 _ko_nedop_dvij;
private static UInt16 _ko_sboy;
private static UInt16 _ko_ots_dannyh_sns;
private static UInt16 _ko_ots_dannyh_bch;
private static UInt16 _ko_prev_dop_gyro;
private static UInt16 _ko_prev_dop;
private static Int32 _vremya_ustar;
private static UInt16 _CRC16;
public static Byte Start = CONST.START;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrOES | (UInt16)CONST.ADDR.addrPR | (UInt16)CONST.ADDR.addrPU;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght { get => _len_data; set => _len_data = value; }
/// <summary>
/// Идентификатор пакета
/// </summary>
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; set => _num_pack = value; }
public static Byte dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static Byte addr_pack { get => _addr_pack; set => _addr_pack = value; }
/// <summary>
/// Счетчик
/// </summary>
public static UInt32 Schetchik { get => _schetchik; set => _schetchik = value; }
/// <summary>
/// Слово информационное
/// </summary>
public static UInt16 InfoWord
{
get
{
_infoword = (UInt16)(_i_vstr_kontr << 0);
_infoword |= (UInt16)(_i_neispr_bon << 1);
_infoword |= (UInt16)(_i_vystavka << 2);
_infoword |= (UInt16)(_i_gotovnost << 3);
_infoword |= (UInt16)(_i_ots_massiv_NV << 4);
_infoword |= (UInt16)(_i_rejim_nav << 5);
_infoword |= (UInt16)(_i_korr_nosit << 6);
_infoword |= (UInt16)(_i_korr_sns << 7);
return _infoword;
}
set
{
_infoword = value;
_i_vstr_kontr = (UInt16)(value & 0x01 >> 0);
_i_neispr_bon = (UInt16)((value & 0x02) >> 1);
_i_vystavka = (UInt16)((value & 0x04) >> 2);
_i_gotovnost = (UInt16)((value & 0x08) >> 3);
_i_ots_massiv_NV = (UInt16)((value & 0x10) >> 4);
_i_rejim_nav = (UInt16)((value & 0x20) >> 5);
_i_korr_nosit = (UInt16)((value & 0x40) >> 6);
_i_korr_sns = (UInt16)((value & 0x80) >> 7);
}
}
public static UInt16 I_vstr_kontr { get => _i_vstr_kontr; set => _i_vstr_kontr = value; }
public static UInt16 I_neispr_bon { get => _i_neispr_bon; set => _i_neispr_bon = value; }
public static UInt16 I_vystavka { get => _i_vystavka; set => _i_vystavka = value; }
public static UInt16 I_gotovnost { get => _i_gotovnost; set => _i_gotovnost = value; }
public static UInt16 I_ots_massiv_NV { get => _i_ots_massiv_NV; set => _i_ots_massiv_NV = value; }
public static UInt16 I_rejim_nav { get => _i_rejim_nav; set => _i_rejim_nav = value; }
public static UInt16 I_korr_nosit { get => _i_korr_nosit; set => _i_korr_nosit = value; }
public static UInt16 I_korr_sns { get => _i_korr_sns; set => _i_korr_sns = value; }
/// <summary>
/// Время с подачи питания
/// </summary>
public static UInt32 Time_Sys { get => _time_sys; set => _time_sys = value; }
/// <summary>
/// Время в режме навигация
/// </summary>
public static UInt32 Time_Nav { get => _time_nav; set => _time_nav = value; }
/// <summary>
/// Достоверность данных
/// </summary>
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_kren_tangaj);
_dostovernost |= (UInt16)(_d_kurs << 1);
_dostovernost |= (UInt16)(_d_ugl_sk << 2);
_dostovernost |= (UInt16)(_d_lin_usk << 3);
_dostovernost |= (UInt16)(_d_in_coord << 4);
_dostovernost |= (UInt16)(_d_baro << 5);
_dostovernost |= (UInt16)(_d_inerc_sk << 6);
_dostovernost |= (UInt16)(_d_vrem_rabot << 7);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_kren_tangaj = (UInt16)((value & 0x0001) >> 0);
_d_kurs = (UInt16)((value & 0x0002) >> 1);
_d_ugl_sk = (UInt16)((value & 0x0004) >> 2);
_d_lin_usk = (UInt16)((value & 0x0008) >> 3);
_d_in_coord = (UInt16)((value & 0x0010) >> 4);
_d_baro = (UInt16)((value & 0x0020) >> 5);
_d_inerc_sk = (UInt16)((value & 0x0040) >> 6);
_d_vrem_rabot = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 D_kren_tangaj { get => _d_kren_tangaj; set => _d_kren_tangaj = value; }
public static UInt16 D_kurs { get => _d_kurs; set => _d_kurs = value; }
public static UInt16 D_ugl_sk { get => _d_ugl_sk; set => _d_ugl_sk = value; }
public static UInt16 D_lin_usk { get => _d_lin_usk; set => _d_lin_usk = value; }
public static UInt16 D_in_coord { get => _d_in_coord; set => _d_in_coord = value; }
public static UInt16 D_baro { get => _d_baro; set => _d_baro = value; }
public static UInt16 D_inerc_sk { get => _d_inerc_sk; set => _d_inerc_sk = value; }
public static UInt16 D_vrem_rabot { get => _d_vrem_rabot; set => _d_vrem_rabot = value; }
public static Int16 Kren { get => _kren; set => _kren = value; }
public static Int16 Tangaj { get => _tangaj; set => _tangaj = value; }
public static Int16 Kurs { get => _kurs; set => _kurs = value; }
public static Int16 Vost_sk { get => _vost_sk; set => _vost_sk = value; }
public static Int16 Sev_sk { get => _sev_sk; set => _sev_sk = value; }
public static Int16 Vert_sk { get => _vert_sk; set => _vert_sk = value; }
public static UInt16 Modul_sk { get => _modul_sk; set => _modul_sk = value; }
public static Int32 Shirota { get => _shirota; set => _shirota = value; }
public static Int32 Dolgota { get => _dolgota; set => _dolgota = value; }
public static Int32 Vysota { get => _vysota; set => _vysota = value; }
public static Int32 Vysota_baro { get => _vysota_baro; set => _vysota_baro = value; }
public static Int16 UsX { get => _usx; set => _usx = value; }
public static Int16 UsY { get => _usy; set => _usy = value; }
public static Int16 UsZ { get => _usz; set => _usz = value; }
public static Int16 UskX { get => _uskx; set => _uskx = value; }
public static Int16 UskY { get => _usky; set => _usky = value; }
public static Int16 UskZ { get => _uskz; set => _uskz = value; }
/// <summary>
/// Код ошибки БИНС
/// </summary>
public static UInt16 Kod_Oshibki
{
get
{
_kod_oshibki = (UInt16)(_ko_nedop_dvij << 2);
_kod_oshibki |= (UInt16)(_ko_sboy << 3);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_sns << 4);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_bch << 5);
_kod_oshibki |= (UInt16)(_ko_prev_dop_gyro << 6);
_kod_oshibki |= (UInt16)(_ko_prev_dop << 7);
return _kod_oshibki;
}
set
{
_kod_oshibki = value;
_ko_nedop_dvij = (UInt16)((value & 0x0004) >> 2);
_ko_sboy = (UInt16)((value & 0x0008) >> 3);
_ko_ots_dannyh_sns = (UInt16)((value & 0x0010) >> 4);
_ko_ots_dannyh_bch = (UInt16)((value & 0x0020) >> 5);
_ko_prev_dop_gyro = (UInt16)((value & 0x0040) >> 6);
_ko_prev_dop = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 Ko_nedop_dvij { get => _ko_nedop_dvij; set => _ko_nedop_dvij = value; }
public static UInt16 Ko_sboy { get => _ko_sboy; set => _ko_sboy = value; }
public static UInt16 Ko_ots_dannyh_sns { get => _ko_ots_dannyh_sns; set => _ko_ots_dannyh_sns = value; }
public static UInt16 Ko_ots_dannyh_bch { get => _ko_ots_dannyh_bch; set => _ko_ots_dannyh_bch = value; }
public static UInt16 Ko_prev_dop_gyro { get => _ko_prev_dop_gyro; set => _ko_prev_dop_gyro = value; }
public static UInt16 Ko_prev_dop_axel { get => _ko_prev_dop; set => _ko_prev_dop = value; }
/// <summary>
/// Время устаревания информации от комплекса
/// </summary>
public static Int32 Vremya_ustar { get => _vremya_ustar; set => _vremya_ustar = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[_len_pack];
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, _len_crc);
}
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(InfoWord), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(Time_Sys), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(Time_Nav), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 22, 2);
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 24, 2);
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 26, 2);
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 28, 2);
Array.Copy(BitConverter.GetBytes(Vost_sk), 0, Data, 30, 2);
Array.Copy(BitConverter.GetBytes(Sev_sk), 0, Data, 32, 2);
Array.Copy(BitConverter.GetBytes(Vert_sk), 0, Data, 34, 2);
Array.Copy(BitConverter.GetBytes(Modul_sk), 0, Data, 36, 2);
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 38, 4);
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 42, 4);
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 46, 4);
Array.Copy(BitConverter.GetBytes(Vysota_baro), 0, Data, 50, 4);
Array.Copy(BitConverter.GetBytes(UsX), 0, Data, 54, 2);
Array.Copy(BitConverter.GetBytes(UsY), 0, Data, 56, 2);
Array.Copy(BitConverter.GetBytes(UsZ), 0, Data, 58, 2);
Array.Copy(BitConverter.GetBytes(UskX), 0, Data, 60, 2);
Array.Copy(BitConverter.GetBytes(UskY), 0, Data, 62, 2);
Array.Copy(BitConverter.GetBytes(UskZ), 0, Data, 64, 2);
Array.Copy(BitConverter.GetBytes(Kod_Oshibki), 0, Data, 66, 2);
Array.Copy(BitConverter.GetBytes(Vremya_ustar), 0, Data, 68, 4);
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
InfoWord = Data[12];
Time_Sys = BitConverter.ToUInt32(Data, 14);
Time_Nav = BitConverter.ToUInt32(Data, 18);
Dostovernost = BitConverter.ToUInt16(Data, 22);
Kren = BitConverter.ToInt16(Data, 24);
Tangaj = BitConverter.ToInt16(Data, 26);
Kurs = BitConverter.ToInt16(Data, 28);
Vost_sk = BitConverter.ToInt16(Data, 30);
Sev_sk = BitConverter.ToInt16(Data, 32);
Vert_sk = BitConverter.ToInt16(Data, 34);
Modul_sk = BitConverter.ToUInt16(Data, 36);
Shirota = BitConverter.ToInt32(Data, 38);
Dolgota = BitConverter.ToInt32(Data, 42);
Vysota = BitConverter.ToInt32(Data, 46);
Vysota_baro = BitConverter.ToInt32(Data, 50);
UsX = BitConverter.ToInt16(Data, 54);
UsY = BitConverter.ToInt16(Data, 56);
UsZ = BitConverter.ToInt16(Data, 58);
UskX = BitConverter.ToInt16(Data, 60);
UskY = BitConverter.ToInt16(Data, 62);
UskZ = BitConverter.ToInt16(Data, 64);
Kod_Oshibki = BitConverter.ToUInt16(Data, 66);
Vremya_ustar = BitConverter.ToInt32(Data, 68);
CRC16 = BitConverter.ToUInt16(Data, 72);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Новый класс пакет обмена данных СНС от БОН
/// </summary>
public static class BONSNS2BVM
{
private const UInt16 _len_pack = 50;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static Byte _num_pack = 3;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 3;
private static UInt16 _id_pack = 0x0323;
private static UInt32 _schetchik;
private static UInt16 _rejim_SNS = 0;
private static UInt16 _rejim_2D = 0;
private static UInt16 _rejim_3dfix = 0;
private static UInt16 _rejim_RTK = 0;
private static UInt32 _time_sys;
private static UInt32 _time_nav;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_coord = 0;
private static UInt16 _d_vysota = 0;
private static UInt16 _d_skorost = 0;
private static UInt16 _d_vremya = 0;
private static UInt16 _d_gf_sputnik = 0;
private static UInt32 _time_sns;
private static Int32 _shirota_sns;
private static Int32 _dolgota_sns;
private static Int32 _vysota_sns;
private static UInt16 _put_ugol_sns;
private static UInt16 _sputnik_sns;
private static Int32 _vremya_ustar;
private static UInt16 _CRC16;
public static Byte Start = CONST.START;
public static UInt16 Address = (UInt16)CONST.ADDR.addrBVM | (UInt16)CONST.ADDR.addrOES | (UInt16)CONST.ADDR.addrPR | (UInt16)CONST.ADDR.addrPU;
public static Byte Code = (Byte)CONST.CODE.msgRECEIVE_DATA;
public static UInt16 Lenght { get => _len_data; set => _len_data = value; }
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; set => _num_pack = value; }
public static Byte dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static Byte addr_pack { get => _addr_pack; set => _addr_pack = value; }
public static UInt32 Schetchik { get => _schetchik; set => _schetchik = value; }
public static UInt16 Rejim_SNS
{
get
{
_rejim_SNS = (UInt16)_rejim_2D;
_rejim_SNS |= (UInt16)(_rejim_3dfix << 1);
_rejim_SNS |= (UInt16)(_rejim_RTK << 2);
return _rejim_SNS;
}
set
{
_rejim_SNS = (UInt16)(value);
_rejim_2D = (UInt16)(value & 0x01);
_rejim_3dfix = (UInt16)((value & 0x02) >> 1);
_rejim_RTK = (UInt16)((value & 0x04) >> 2);
}
}
public static UInt16 rejim_2D { get => _rejim_2D; set => _rejim_2D = value; }
public static UInt16 rejim_3dfix { get => _rejim_3dfix; set => _rejim_3dfix = value; }
public static UInt16 rejim_RTK { get => _rejim_RTK; set => _rejim_RTK = value; }
/// <summary>
/// Время с подачи питания
/// </summary>
public static UInt32 Time_Sys { get => _time_sys; set => _time_sys = value; }
/// <summary>
/// Время в режме навигация
/// </summary>
public static UInt32 Time_Nav { get => _time_nav; set => _time_nav = value; }
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_coord);
_dostovernost |= (UInt16)(_d_vysota << 1);
_dostovernost |= (UInt16)(_d_skorost << 2);
_dostovernost |= (UInt16)(_d_vremya << 3);
_dostovernost |= (UInt16)(_d_gf_sputnik << 4);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_coord = (UInt16)(value & 0x0001);
_d_vysota = (UInt16)((value & 0x0002) >> 1);
_d_skorost = (UInt16)((value & 0x0004) >> 2);
_d_vremya = (UInt16)((value & 0x0008) >> 3);
_d_gf_sputnik = (UInt16)((value & 0x0010) >> 4);
}
}
public static UInt16 D_coord { get => _d_coord; set => _d_coord = value; }
public static UInt16 D_vysota { get => _d_vysota; set => _d_vysota = value; }
public static UInt16 D_skorost { get => _d_skorost; set => _d_skorost = value; }
public static UInt16 D_vremya { get => _d_vremya; set => _d_vremya = value; }
public static UInt16 D_gf_sputnik { get => _d_gf_sputnik; set => _d_gf_sputnik = value; }
public static UInt32 Time_sns { get => _time_sns; set => _time_sns = value; }
public static Int32 Shirota_sns { get => _shirota_sns; set => _shirota_sns = value; }
public static Int32 Dolgota_sns { get => _dolgota_sns; set => _dolgota_sns = value; }
public static Int32 Vysota_sns { get => _vysota_sns; set => _vysota_sns = value; }
public static UInt16 Put_ugol_sns { get => _put_ugol_sns; set => _put_ugol_sns = value; }
public static UInt16 Sputnik_sns { get => _sputnik_sns; set => _sputnik_sns = value; }
public static Int32 Vremya_ustar { get => _vremya_ustar; set => _vremya_ustar = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[_len_pack];
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, _len_crc);
}
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
Array.Copy(BitConverter.GetBytes(Schetchik), 0, Data, 8, 4);
Array.Copy(BitConverter.GetBytes(Rejim_SNS), 0, Data, 12, 2);
Array.Copy(BitConverter.GetBytes(Time_Sys), 0, Data, 14, 4);
Array.Copy(BitConverter.GetBytes(Time_Nav), 0, Data, 18, 4);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 22, 2);
Array.Copy(BitConverter.GetBytes(Time_sns), 0, Data, 24, 4);
Array.Copy(BitConverter.GetBytes(Shirota_sns), 0, Data, 28, 4);
Array.Copy(BitConverter.GetBytes(Dolgota_sns), 0, Data, 32, 4);
Array.Copy(BitConverter.GetBytes(Vysota_sns), 0, Data, 36, 4);
Array.Copy(BitConverter.GetBytes(Put_ugol_sns), 0, Data, 40, 2);
Array.Copy(BitConverter.GetBytes(Sputnik_sns), 0, Data, 42, 2);
Array.Copy(BitConverter.GetBytes(Vremya_ustar), 0, Data, 44, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
Schetchik = BitConverter.ToUInt32(Data, 8);
Rejim_SNS = BitConverter.ToUInt16(Data, 12);
Time_Sys = BitConverter.ToUInt32(Data, 14);
Time_Nav = BitConverter.ToUInt32(Data, 18);
Dostovernost = BitConverter.ToUInt16(Data, 22);
Time_sns = BitConverter.ToUInt32(Data, 24);
Shirota_sns = BitConverter.ToInt32(Data, 28);
Dolgota_sns = BitConverter.ToInt32(Data, 32);
Vysota_sns = BitConverter.ToInt32(Data, 36);
Put_ugol_sns = BitConverter.ToUInt16(Data, 40);
Sputnik_sns = BitConverter.ToUInt16(Data, 42);
Vremya_ustar = BitConverter.ToInt32(Data, 44);
CRC16 = BitConverter.ToUInt16(Data, 48);
}
}
/// <summary>
/// Класс служебных сообщений
/// </summary>
public static class MESS
{
public static Byte Start = CONST.START;
public static UInt16 Address = 0;
public static Byte Code = 0;
public static UInt16 Lenght = 0;
public static UInt16 CRC16;
public static Byte[] Data = new Byte[8];
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, 6);
}
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, 6);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, 6, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
CRC16 = BitConverter.ToUInt16(Data, 6);
}
}
/// <summary>
/// Класс служебных сообщений
/// </summary>
public static class MESS2
{
private const UInt16 _len_pack = 10;
private static UInt16 _len_data = _len_pack - 8;
private static UInt16 _len_crc = _len_pack - 2;
private static UInt16 _num_pack = 1;
private static UInt16 _dir_pack = 2;
private static UInt16 _addr_pack = 3;
private static UInt16 _id_pack = 0;
public static Byte Start = CONST.START;
public static UInt16 Address = 0;
public static Byte Code = 0;
public static UInt16 Lenght = 2;
/// <summary>
/// Идентификатор пакета
/// </summary>
public static UInt16 Id_Pack
{
get
{
_id_pack = (UInt16)(_addr_pack << 8);
_id_pack |= (UInt16)(_dir_pack << 4);
_id_pack |= (UInt16)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (UInt16)(value & 0x000F);
_dir_pack = (UInt16)((value & 0x00F0) >> 4);
_addr_pack = (UInt16)((value & 0xFF00) >> 8);
}
}
public static UInt16 num_pack { get => _num_pack; set => _num_pack = value; }
public static UInt16 dir_pack1 { get => _dir_pack; set => _dir_pack = value; }
public static UInt16 addr_pack { get => _addr_pack; set => _addr_pack = value; }
public static UInt16 CRC16;
public static Byte[] Data = new Byte[_len_pack];
public static UInt16 CalcCRC()
{
return CONST.CRC16(ref Data, _len_crc);
}
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(Address), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Code), 0, Data, 3, 1);
Array.Copy(BitConverter.GetBytes(Lenght), 0, Data, 4, 2);
Array.Copy(BitConverter.GetBytes(Id_Pack), 0, Data, 6, 2);
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc);
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
CRC16 = BitConverter.ToUInt16(Data, _len_crc);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Служебный класс для пересчета угловых координат
/// </summary>
public static class AZUM
{
/*
private static void pix2ang()
{
//% (x, y) - координаты центра пикселя изображения
//% начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя
//% ось OX направлена вправо по возрастанию номеров столбцов
//% ось OY направлена вниз по возрастанию номеров строк
//%
//% w - количество столбцов изображения
//% h - количество строк изображения
//sAZUM retu;
Double w_full = 4072.0;
Double h_full = 3064.0;
Double focus_meters = 12e-3f;
Double pixel_size_meters = 1.55e-6f;
Double rad2deg = (180.0 / (Double)Math.PI);
Double f = focus_meters / pixel_size_meters;
Double xc_full = 0.5f * w_full;
Double yc_full = 0.5f * h_full;
Double x_full = (_xy.X + 0.5) * w_full / _wh.W;
Double y_full = (_xy.Y + 0.5) * h_full / _wh.H;
Double x_ohf = x_full - xc_full;
Double y_ohf = y_full - yc_full;
Double z_ohf = f;
Double rho = (Double)Math.Sqrt(x_ohf * x_ohf + z_ohf * z_ohf);
_au.A = (Double)Math.Atan2(x_ohf, z_ohf) * rad2deg;
_au.U = (Double)(-Math.Atan2(y_ohf, rho) * rad2deg);
}
private static void ang2pix()
{
// calc_xy result_;
// (x, y) - координаты центра пикселя изображения
// начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя, double
//% ось OX направлена вправо по возрастанию номеров столбцов
// ось OY направлена вниз по возрастанию номеров строк
//% az - азимутальный угол (отсчитывается вправо), градусы, double
//% el - угол места (отсчитывается вверх), градусы, double
//% w - количество столбцов изображения, double
//% h - количество строк изображения, double
Double w_full = (Double)(4072);
Double h_full = (Double)(3064);
Double focus_meters = (Double)(12e-3);
Double pixel_size_meters = (Double)(1.55e-6);
Double deg2rad = (Double)(Math.PI / 180.0); //% pi = 3.14...
//float rad2deg = (180.0f /3.1415926f);
Double f = focus_meters / pixel_size_meters;
Double xc_full = 0.5 * w_full;
Double yc_full = 0.5 * h_full;
//_au.A = _au.A * deg2rad;
//_au.U = _au.U * deg2rad;
//double x_ohf = cos(el) * sin(az);
//double z_ohf = cos(el) * cos(az);
//double y_ohf = -sin(el);
//double x_full = x_ohf / z_ohf * f + xc_full;
//double y_full = y_ohf / z_ohf * f + yc_full;
Double x_full = xc_full + f * Math.Tan(_au.A * deg2rad);
Double y_full = yc_full - f * Math.Tan(_au.U * deg2rad) / Math.Cos(_au.A * deg2rad);
_xy.X = x_full * _wh.W / w_full - 0.5;
_xy.Y = y_full * _wh.H / h_full - 0.5;
}
*/
public static void pix2ang(ref Double A, ref Double U, Double W, Double H, Double X, Double Y)
{
//% (x, y) - координаты центра пикселя изображения
//% начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя
//% ось OX направлена вправо по возрастанию номеров столбцов
//% ось OY направлена вниз по возрастанию номеров строк
//%
//% w - количество столбцов изображения
//% h - количество строк изображения
//sAZUM retu;
Double w_full = 4072.0;
Double h_full = 3064.0;
Double focus_meters = 12e-3;
Double pixel_size_meters = 1.55e-6;
Double rad2deg = (180.0 / (Double)Math.PI);
Double f = focus_meters / pixel_size_meters;
Double xc_full = 0.5f * w_full;
Double yc_full = 0.5f * h_full;
Double x_full = (X + 0.5) * w_full / W;
Double y_full = (Y + 0.5) * h_full / H;
Double x_ohf = x_full - xc_full;
Double y_ohf = y_full - yc_full;
Double z_ohf = f;
Double rho = (Double)Math.Sqrt(x_ohf * x_ohf + z_ohf * z_ohf);
A = (Double)Math.Atan2(x_ohf, z_ohf) * rad2deg;
U = (Double)(-Math.Atan2(y_ohf, rho) * rad2deg);
}
public static void pix2ang(ref float A, ref float U, float W, float H, float X, float Y)
{
//% (x, y) - координаты центра пикселя изображения
//% начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя
//% ось OX направлена вправо по возрастанию номеров столбцов
//% ось OY направлена вниз по возрастанию номеров строк
//%
//% w - количество столбцов изображения
//% h - количество строк изображения
//sAZUM retu;
float w_full = (float)4072.0;
float h_full = (float)3064.0;
float focus_meters = 12e-3F;
float pixel_size_meters = 1.55e-6F;
float rad2deg = (180.0F / (float)Math.PI);
float f = focus_meters / pixel_size_meters;
float xc_full = 0.5f * w_full;
float yc_full = 0.5f * h_full;
float x_full = (float)(X + 0.5) * w_full / W;
float y_full = (float)(Y + 0.5) * h_full / H;
float x_ohf = x_full - xc_full;
float y_ohf = y_full - yc_full;
float z_ohf = f;
float rho = (float)Math.Sqrt(x_ohf * x_ohf + z_ohf * z_ohf);
A = (float)Math.Atan2(x_ohf, z_ohf) * rad2deg;
U = (float)(-Math.Atan2(y_ohf, rho) * rad2deg);
}
public static void ang2pix(ref Double X, ref Double Y, Double W, Double H, Double A, Double U)
{
// calc_xy result_;
// (x, y) - координаты центра пикселя изображения
// начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя, double
//% ось OX направлена вправо по возрастанию номеров столбцов
// ось OY направлена вниз по возрастанию номеров строк
//% az - азимутальный угол (отсчитывается вправо), градусы, double
//% el - угол места (отсчитывается вверх), градусы, double
//% w - количество столбцов изображения, double
//% h - количество строк изображения, double
Double w_full = (Double)(4072);
Double h_full = (Double)(3064);
Double focus_meters = (Double)(12e-3);
Double pixel_size_meters = (Double)(1.55e-6);
Double deg2rad = (Double)(Math.PI / 180.0); //% pi = 3.14...
//float rad2deg = (180.0f /3.1415926f);
Double f = focus_meters / pixel_size_meters;
Double xc_full = 0.5 * w_full;
Double yc_full = 0.5 * h_full;
//_au.A = _au.A * deg2rad;
//_au.U = _au.U * deg2rad;
//double x_ohf = cos(el) * sin(az);
//double z_ohf = cos(el) * cos(az);
//double y_ohf = -sin(el);
//double x_full = x_ohf / z_ohf * f + xc_full;
//double y_full = y_ohf / z_ohf * f + yc_full;
Double x_full = xc_full + f * Math.Tan(A * deg2rad);
Double y_full = yc_full - f * Math.Tan(U * deg2rad) / Math.Cos(A * deg2rad);
X = x_full * W / w_full - 0.5;
Y = y_full * H / h_full - 0.5;
}
public static void ang2pix(ref float X, ref float Y, float W, float H, float A, float U)
{
// calc_xy result_;
// (x, y) - координаты центра пикселя изображения
// начало O = (0, 0) системы координат изображения находится
//% в центре левого верхнего пикселя, double
//% ось OX направлена вправо по возрастанию номеров столбцов
// ось OY направлена вниз по возрастанию номеров строк
//% az - азимутальный угол (отсчитывается вправо), градусы, double
//% el - угол места (отсчитывается вверх), градусы, double
//% w - количество столбцов изображения, double
//% h - количество строк изображения, double
float w_full = 4072F;
float h_full = 3064F;
float focus_meters = 12e-3F;
float pixel_size_meters = 1.55e-6F;
float deg2rad = (float)(Math.PI / 180.0); //% pi = 3.14...
//float rad2deg = (180.0f /3.1415926f);
float f = focus_meters / pixel_size_meters;
float xc_full = 0.5F * w_full;
float yc_full = 0.5F * h_full;
//_au.A = _au.A * deg2rad;
//_au.U = _au.U * deg2rad;
//double x_ohf = cos(el) * sin(az);
//double z_ohf = cos(el) * cos(az);
//double y_ohf = -sin(el);
//double x_full = x_ohf / z_ohf * f + xc_full;
//double y_full = y_ohf / z_ohf * f + yc_full;
float x_full = xc_full + f * (float)Math.Tan(A * deg2rad);
float y_full = yc_full - f * (float)Math.Tan(U * deg2rad) / (float)Math.Cos(A * deg2rad);
X = x_full * W / w_full - 0.5F;
Y = y_full * H / h_full - 0.5F;
}
public static Double minmax(Double min, Double max, Double val)
{
if (val <= min)
return min;
if (val >= max)
return max;
return val;
}
public static float minmax(float min, float max, float val)
{
if (val <= min)
return min;
if (val >= max)
return max;
return val;
}
public static UInt16 minmax(UInt16 min, UInt16 max, UInt16 val)
{
if (val <= min)
return min;
if (val >= max)
return max;
return val;
}
public static UInt16 minmaxUS(UInt16 min, UInt16 max, UInt16 val)
{
if (val <= min)
return min;
if (val >= max)
return max;
return val;
}
}
/// <summary>
/// Класс для разбора заголовка
/// </summary>
public static class HEAD
{
private static Byte _num_pack = 1;
private static Byte _dir_pack = 2;
private static Byte _addr_pack = 3;
private static UInt16 _id_pack = 0x0321;
public static Byte Start = CONST.START;
public static UInt16 Address = 0;
public static Byte Code = 0;
public static UInt16 Lenght = 0;
public static UInt16 Id_Pack
{
get
{
_id_pack = (ushort)(_addr_pack << 8);
_id_pack |= (ushort)(_dir_pack << 4);
_id_pack |= (ushort)_num_pack;
return _id_pack;
}
set
{
_id_pack = value;
_num_pack = (Byte)(value & 0x000F);
_dir_pack = (Byte)((value & 0x00F0) >> 4);
_addr_pack = (Byte)((value & 0xFF00) >> 8);
}
}
public static Byte num_pack { get => _num_pack; }
public static Byte dir_pack { get => _dir_pack; }
public static Byte addr_pack { get => _addr_pack; }
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
static Byte[] Data = new Byte[8];
public static void GetData(Byte[] arr)
{
Array.Copy(arr, Data, 8);
Start = Data[0];
Address = (UInt16)(Data[2] << 8 | Data[1]);
Code = Data[3];
Lenght = BitConverter.ToUInt16(Data, 4);
Id_Pack = BitConverter.ToUInt16(Data, 6);
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
/// <summary>
/// Новый класс пакет 0322 в БОН
/// </summary>
public static class sTOBON0322
{
private const UInt16 _len_pack = 49;
private static UInt16 _infoword = 0;
private static UInt16 _i_vstr_kontr = 0;
private static UInt16 _i_neispr_bon = 0;
private static UInt16 _i_vystavka = 0;
private static UInt16 _i_gotovnost = 0;
private static UInt16 _i_ots_massiv_NV = 0;
private static UInt16 _i_rejim_nav = 0;
private static UInt16 _i_korr_nosit = 0;
private static UInt16 _i_korr_sns = 0;
private static UInt16 _dostovernost = 0;
private static UInt16 _d_kren_tangaj = 0;
private static UInt16 _d_kurs = 0;
private static UInt16 _d_ugl_sk = 0;
private static UInt16 _d_lin_usk = 0;
private static UInt16 _d_in_coord = 0;
private static UInt16 _d_baro = 0;
private static UInt16 _d_inerc_sk = 0;
private static UInt16 _d_vrem_rabot = 0;
private static Int16 _kren;
private static Int16 _tangaj;
private static Int16 _kurs;
private static Int16 _vost_sk;
private static Int16 _sev_sk;
private static Int16 _vert_sk;
private static UInt16 _modul_sk;
private static Int32 _shirota;
private static Int32 _dolgota;
private static Int32 _vysota;
private static Int32 _vysota_baro;
private static Int16 _usx;
private static Int16 _usy;
private static Int16 _usz;
private static Int16 _uskx;
private static Int16 _usky;
private static Int16 _uskz;
private static UInt16 _kod_oshibki;
private static UInt16 _ko_nedop_dvij;
private static UInt16 _ko_sboy;
private static UInt16 _ko_ots_dannyh_sns;
private static UInt16 _ko_ots_dannyh_bch;
private static UInt16 _ko_prev_dop_gyro;
private static UInt16 _ko_prev_dop_axel;
public static Byte Start = CONST.STARTTOBON0322;
/// <summary>
/// Слово информационное
/// </summary>
public static UInt16 InfoWord
{
get
{
_infoword = (UInt16)(_i_vstr_kontr << 0);
_infoword |= (UInt16)(_i_neispr_bon << 1);
_infoword |= (UInt16)(_i_vystavka << 2);
_infoword |= (UInt16)(_i_gotovnost << 3);
_infoword |= (UInt16)(_i_ots_massiv_NV << 4);
_infoword |= (UInt16)(_i_rejim_nav << 5);
_infoword |= (UInt16)(_i_korr_nosit << 6);
_infoword |= (UInt16)(_i_korr_sns << 7);
return _infoword;
}
set
{
_infoword = value;
_i_vstr_kontr = (UInt16)(value & 0x01 >> 0);
_i_neispr_bon = (UInt16)((value & 0x02) >> 1);
_i_vystavka = (UInt16)((value & 0x04) >> 2);
_i_gotovnost = (UInt16)((value & 0x08) >> 3);
_i_ots_massiv_NV = (UInt16)((value & 0x10) >> 4);
_i_rejim_nav = (UInt16)((value & 0x20) >> 5);
_i_korr_nosit = (UInt16)((value & 0x40) >> 6);
_i_korr_sns = (UInt16)((value & 0x80) >> 7);
}
}
public static UInt16 I_vstr_kontr { get => _i_vstr_kontr; set => _i_vstr_kontr = value; }
public static UInt16 I_neispr_bon { get => _i_neispr_bon; set => _i_neispr_bon = value; }
public static UInt16 I_vystavka { get => _i_vystavka; set => _i_vystavka = value; }
public static UInt16 I_gotovnost { get => _i_gotovnost; set => _i_gotovnost = value; }
public static UInt16 I_ots_massiv_NV { get => _i_ots_massiv_NV; set => _i_ots_massiv_NV = value; }
public static UInt16 I_rejim_nav { get => _i_rejim_nav; set => _i_rejim_nav = value; }
public static UInt16 I_korr_nosit { get => _i_korr_nosit; set => _i_korr_nosit = value; }
public static UInt16 I_korr_sns { get => _i_korr_sns; set => _i_korr_sns = value; }
/// <summary>
/// Достоверность данных
/// </summary>
public static UInt16 Dostovernost
{
get
{
_dostovernost = (UInt16)(_d_kren_tangaj);
_dostovernost |= (UInt16)(_d_kurs << 1);
_dostovernost |= (UInt16)(_d_ugl_sk << 2);
_dostovernost |= (UInt16)(_d_lin_usk << 3);
_dostovernost |= (UInt16)(_d_in_coord << 4);
_dostovernost |= (UInt16)(_d_baro << 5);
_dostovernost |= (UInt16)(_d_inerc_sk << 6);
_dostovernost |= (UInt16)(_d_vrem_rabot << 7);
return _dostovernost;
}
set
{
_dostovernost = value;
_d_kren_tangaj = (UInt16)((value & 0x0001) >> 0);
_d_kurs = (UInt16)((value & 0x0002) >> 1);
_d_ugl_sk = (UInt16)((value & 0x0004) >> 2);
_d_lin_usk = (UInt16)((value & 0x0008) >> 3);
_d_in_coord = (UInt16)((value & 0x0010) >> 4);
_d_baro = (UInt16)((value & 0x0020) >> 5);
_d_inerc_sk = (UInt16)((value & 0x0040) >> 6);
_d_vrem_rabot = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 D_kren_tangaj { get => _d_kren_tangaj; set => _d_kren_tangaj = value; }
public static UInt16 D_kurs { get => _d_kurs; set => _d_kurs = value; }
public static UInt16 D_ugl_sk { get => _d_ugl_sk; set => _d_ugl_sk = value; }
public static UInt16 D_lin_usk { get => _d_lin_usk; set => _d_lin_usk = value; }
public static UInt16 D_in_coord { get => _d_in_coord; set => _d_in_coord = value; }
public static UInt16 D_baro { get => _d_baro; set => _d_baro = value; }
public static UInt16 D_inerc_sk { get => _d_inerc_sk; set => _d_inerc_sk = value; }
public static UInt16 D_vrem_rabot { get => _d_vrem_rabot; set => _d_vrem_rabot = value; }
public static Int16 Kren { get => _kren; set => _kren = value; }
public static Int16 Tangaj { get => _tangaj; set => _tangaj = value; }
public static Int16 Kurs { get => _kurs; set => _kurs = value; }
public static Int16 Vost_sk { get => _vost_sk; set => _vost_sk = value; }
public static Int16 Sev_sk { get => _sev_sk; set => _sev_sk = value; }
public static Int16 Vert_sk { get => _vert_sk; set => _vert_sk = value; }
public static UInt16 Modul_sk { get => _modul_sk; set => _modul_sk = value; }
public static Int32 Shirota { get => _shirota; set => _shirota = value; }
public static Int32 Dolgota { get => _dolgota; set => _dolgota = value; }
public static Int32 Vysota { get => _vysota; set => _vysota = value; }
public static Int32 Vysota_baro { get => _vysota_baro; set => _vysota_baro = value; }
public static Int16 UsX { get => _usx; set => _usx = value; }
public static Int16 UsY { get => _usy; set => _usy = value; }
public static Int16 UsZ { get => _usz; set => _usz = value; }
public static Int16 UskX { get => _uskx; set => _uskx = value; }
public static Int16 UskY { get => _usky; set => _usky = value; }
public static Int16 UskZ { get => _uskz; set => _uskz = value; }
/// <summary>
/// Код ошибки БИНС
/// </summary>
public static UInt16 Kod_Oshibki
{
get
{
_kod_oshibki = (UInt16)(_ko_nedop_dvij << 2);
_kod_oshibki |= (UInt16)(_ko_sboy << 3);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_sns << 4);
_kod_oshibki |= (UInt16)(_ko_ots_dannyh_bch << 5);
_kod_oshibki |= (UInt16)(_ko_prev_dop_gyro << 6);
_kod_oshibki |= (UInt16)(_ko_prev_dop_axel << 7);
return _kod_oshibki;
}
set
{
_kod_oshibki = value;
_ko_nedop_dvij = (UInt16)((value & 0x0004) >> 2);
_ko_sboy = (UInt16)((value & 0x0008) >> 3);
_ko_ots_dannyh_sns = (UInt16)((value & 0x0010) >> 4);
_ko_ots_dannyh_bch = (UInt16)((value & 0x0020) >> 5);
_ko_prev_dop_gyro = (UInt16)((value & 0x0040) >> 6);
_ko_prev_dop_axel = (UInt16)((value & 0x0080) >> 7);
}
}
public static UInt16 Ko_nedop_dvij { get => _ko_nedop_dvij; set => _ko_nedop_dvij = value; }
public static UInt16 Ko_sboy { get => _ko_sboy; set => _ko_sboy = value; }
public static UInt16 Ko_ots_dannyh_sns { get => _ko_ots_dannyh_sns; set => _ko_ots_dannyh_sns = value; }
public static UInt16 Ko_ots_dannyh_bch { get => _ko_ots_dannyh_bch; set => _ko_ots_dannyh_bch = value; }
public static UInt16 Ko_prev_dop_gyro { get => _ko_prev_dop_gyro; set => _ko_prev_dop_gyro = value; }
public static UInt16 Ko_prev_dop_axel { get => _ko_prev_dop_axel; set => _ko_prev_dop_axel = value; }
/// <summary>
/// Время устаревания информации от комплекса
/// </summary>
public static Byte[] Data = new Byte[_len_pack];
/// <summary>
/// Функция формирования массива с пакетом
/// </summary>
public static void MakeData()
{
Array.Copy(BitConverter.GetBytes(Start), 0, Data, 0, 1);
Array.Copy(BitConverter.GetBytes(InfoWord), 0, Data, 1, 2);
Array.Copy(BitConverter.GetBytes(Dostovernost), 0, Data, 3, 2);
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 5, 2);
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 7, 2);
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 9, 2);
Array.Copy(BitConverter.GetBytes(Vost_sk), 0, Data, 11, 2);
Array.Copy(BitConverter.GetBytes(Sev_sk), 0, Data, 13, 2);
Array.Copy(BitConverter.GetBytes(Vert_sk), 0, Data, 15, 2);
Array.Copy(BitConverter.GetBytes(Modul_sk), 0, Data, 17, 2);
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 19, 4);
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 23, 4);
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 27, 4);
Array.Copy(BitConverter.GetBytes(Vysota_baro), 0, Data, 31, 4);
Array.Copy(BitConverter.GetBytes(UsX), 0, Data, 35, 2);
Array.Copy(BitConverter.GetBytes(UsY), 0, Data, 37, 2);
Array.Copy(BitConverter.GetBytes(UsZ), 0, Data, 39, 2);
Array.Copy(BitConverter.GetBytes(UskX), 0, Data, 41, 2);
Array.Copy(BitConverter.GetBytes(UskY), 0, Data, 43, 2);
Array.Copy(BitConverter.GetBytes(UskZ), 0, Data, 45, 2);
Array.Copy(BitConverter.GetBytes(Kod_Oshibki), 0, Data, 47, 2);
}
/// <summary>
/// Функция извлечения данных из массива
/// </summary>
public static void GetData()
{
}
public static void ClearData()
{
for (int i = 0; i < Data.Length; i++)
Data[i] = 0;
}
}
}