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.
2842 lines
130 KiB
2842 lines
130 KiB
#define VLADIMIR |
|
|
|
using System; |
|
using UTIL; |
|
|
|
/// <summary> |
|
/// Ноавя версия ПИВ 1.23 |
|
/// </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 const UInt16 _len_pack = 54; |
|
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 = 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 = _len_data; |
|
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 eth_X; |
|
public static UInt16 eth_Y; |
|
public static Int32 eth_Vysota; |
|
public static Int16 eth_Kren; |
|
public static Int16 eth_Tangaj; |
|
public static Int16 eth_Kurs; |
|
public static float eth_AZupr; |
|
public static float eth_UMupr; |
|
|
|
public static UInt16 CRC16; |
|
|
|
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(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); |
|
//public static UInt16 eth_X; |
|
//public static UInt16 eth_Y; |
|
//public static Int32 eth_Vysota; |
|
//public static Int16 eth_Kren; |
|
//public static Int16 eth_Tangaj; |
|
//public static Int16 eth_Kurs; |
|
//public static float eth_AZupr; |
|
//public static float eth_UMupr; |
|
Array.Copy(BitConverter.GetBytes(eth_X), 0, Data, 30, 2); |
|
Array.Copy(BitConverter.GetBytes(eth_Y), 0, Data, 32, 2); |
|
Array.Copy(BitConverter.GetBytes(eth_Vysota), 0, Data, 34, 4); |
|
Array.Copy(BitConverter.GetBytes(eth_Kren), 0, Data, 38, 2); |
|
Array.Copy(BitConverter.GetBytes(eth_Tangaj), 0, Data, 40, 2); |
|
Array.Copy(BitConverter.GetBytes(eth_Kurs), 0, Data, 42, 2); |
|
Array.Copy(BitConverter.GetBytes(eth_AZupr), 0, Data, 44, 4); |
|
Array.Copy(BitConverter.GetBytes(eth_UMupr), 0, Data, 48, 4); |
|
|
|
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc); |
|
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 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); |
|
|
|
eth_X = BitConverter.ToUInt16(Data, 30); |
|
eth_Y = BitConverter.ToUInt16(Data, 32); |
|
eth_Vysota = BitConverter.ToInt32(Data, 34); |
|
eth_Kren = BitConverter.ToInt16(Data, 38); |
|
eth_Tangaj = BitConverter.ToInt16(Data, 40); |
|
eth_Kurs = BitConverter.ToInt16(Data, 42); |
|
eth_AZupr = BitConverter.ToSingle(Data, 44); |
|
eth_UMupr = BitConverter.ToSingle(Data, 48); |
|
|
|
CRC16 = BitConverter.ToUInt16(Data, _len_crc); |
|
} |
|
public static void ClearData() |
|
{ |
|
for (int i = 0; i < Data.Length; i++) |
|
Data[i] = 0; |
|
} |
|
public static UInt16 CalcCRC() |
|
{ |
|
return CONST.CRC16(ref Data, _len_crc); |
|
} |
|
|
|
|
|
} |
|
public static class BVM2OES |
|
{ |
|
private const UInt16 _len_pack = 60; |
|
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_upr = 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 = _len_data; |
|
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_upr << 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_upr = (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_upr { get => _r_upr; set => _r_upr = value; } |
|
// 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; // Скорректированная координата центра цели по вертикали |
|
/// <summary> |
|
/// новый ПИВ 1.23 |
|
/// </summary> |
|
public static Int32 Shirota; // Широта БЛА |
|
public static Int32 Dolgota; // Долгота БЛА |
|
public static Int32 Vysota; // Высота БЛА |
|
public static Int16 Kren; // Крен БЛА |
|
public static Int16 Tangaj; // Тангаж БЛА |
|
public static Int16 Kurs; // Курс БЛА |
|
|
|
public static UInt16 CRC16; |
|
|
|
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); |
|
/// <summary> |
|
/// новый ПИВ 1.23 |
|
/// </summary> |
|
Array.Copy(BitConverter.GetBytes(Shirota), 0, Data, 40, 4); |
|
Array.Copy(BitConverter.GetBytes(Dolgota), 0, Data, 44, 4); |
|
Array.Copy(BitConverter.GetBytes(Vysota), 0, Data, 48, 4); |
|
Array.Copy(BitConverter.GetBytes(Kren), 0, Data, 52, 2); |
|
Array.Copy(BitConverter.GetBytes(Tangaj), 0, Data, 54, 2); |
|
Array.Copy(BitConverter.GetBytes(Kurs), 0, Data, 56, 2); |
|
|
|
UInt16 _crc16 = CONST.CRC16(ref Data, _len_crc); |
|
Array.Copy(BitConverter.GetBytes(_crc16), 0, Data, _len_crc, 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); |
|
/// <summary> |
|
/// новый ПИВ 1.23 |
|
/// </summary> |
|
Shirota = BitConverter.ToInt32(Data, 40); |
|
Dolgota = BitConverter.ToInt32(Data, 44); |
|
Vysota = BitConverter.ToInt32(Data, 48); |
|
Kren = BitConverter.ToInt16(Data, 52); |
|
Tangaj = BitConverter.ToInt16(Data, 54); |
|
Kurs = BitConverter.ToInt16(Data, 56); |
|
|
|
CRC16 = BitConverter.ToUInt16(Data, 58); |
|
} |
|
public static void ClearData() |
|
{ |
|
for (int i = 0; i < Data.Length; i++) |
|
Data[i] = 0; |
|
} |
|
public static UInt16 CalcCRC() |
|
{ |
|
return CONST.CRC16(ref Data, _len_crc); |
|
} |
|
|
|
} |
|
public static class BON2BVM |
|
{ |
|
private const UInt16 _len_pack = 85; |
|
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 = 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 = _len_data; |
|
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[_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(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, _len_crc); |
|
} |
|
public static void ClearData() |
|
{ |
|
for (int i = 0; i < Data.Length; i++) |
|
Data[i] = 0; |
|
} |
|
public static UInt16 CalcCRC() |
|
{ |
|
return CONST.CRC16(ref Data, _len_crc); |
|
} |
|
|
|
} |
|
/// <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 |
|
{ |
|
public static int WF { get => (int)Wfull; set => Wfull = (double)value; } |
|
public static int HF { get => (int)Hfull; set => Hfull = (double)value; } |
|
private static Double Wfull; // = (Double)WF; |
|
private static Double Hfull; // = (Double)HF; |
|
//const Double Wfull = 4072.0; |
|
//const Double Hfull = 3064.0; |
|
/* |
|
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; |
|
if (WF == 0 || HF == 0) |
|
{ |
|
throw new Exception("Не заданы значения размера матрицы!"); |
|
} |
|
Double w_full = Wfull; |
|
Double h_full = Hfull; |
|
|
|
//#if DEBUG |
|
// Console.WriteLine($"{Util.printdatetime(false)}{w_full} {h_full}"); |
|
//#endif |
|
#if VLADIMIR |
|
Double focus_meters = 27.5e-3; |
|
Double pixel_size_meters = 3.2e-6; //22.5'' |
|
#else |
|
Double focus_meters = 12e-3; |
|
Double pixel_size_meters = 1.55e-6; |
|
#endif |
|
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 xc_full = 0.5f * w_full; |
|
Double yc_full = (6.0 / 42.0) * 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 p2a(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; |
|
if (WF == 0 || HF == 0) |
|
{ |
|
throw new Exception("Не заданы значения размера матрицы!"); |
|
} |
|
Double w_full = Wfull; |
|
Double h_full = Hfull; |
|
|
|
//#if DEBUG |
|
// Console.WriteLine($"{Util.printdatetime(false)}{w_full} {h_full}"); |
|
//#endif |
|
#if VLADIMIR |
|
Double focus_meters = 27.5e-3; |
|
Double pixel_size_meters = 3.2e-6; //22.5'' |
|
#else |
|
Double focus_meters = 12e-3; |
|
Double pixel_size_meters = 1.55e-6; |
|
#endif |
|
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 xc_full = 0.5f * w_full; |
|
Double yc_full = (6.0 / 42.0) * 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; |
|
|
|
if (WF == 0 || HF == 0) |
|
{ |
|
throw new Exception("Не заданы значения размера матрицы!"); |
|
} |
|
float w_full = (float)Wfull; |
|
float h_full = (float)Hfull; |
|
//#if DEBUG |
|
// Console.WriteLine($"{Util.printdatetime(false)}{w_full} {h_full}"); |
|
//#endif |
|
#if VLADIMIR |
|
float focus_meters = 27.5e-3F; |
|
float pixel_size_meters = 3.2e-6F; //22.5'' |
|
#else |
|
float focus_meters = 12e-3; |
|
float pixel_size_meters = 1.55e-6; |
|
#endif |
|
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 xc_full = 0.5f * w_full; |
|
float yc_full = (6.0F / 42.0F) * 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 |
|
|
|
if (WF == 0 || HF == 0) |
|
{ |
|
throw new Exception("Не заданы значения размера матрицы!"); |
|
} |
|
Double w_full = (Double)Wfull; |
|
Double h_full = (Double)Hfull; |
|
//#if DEBUG |
|
// Console.WriteLine($"{Util.printdatetime(false)}{w_full} {h_full}"); |
|
//#endif |
|
#if VLADIMIR |
|
Double focus_meters = 27.5e-3; |
|
Double pixel_size_meters = 3.2e-6; //22.5'' |
|
#else |
|
Double focus_meters = 12e-3; |
|
Double pixel_size_meters = 1.55e-6; |
|
#endif |
|
Double deg2rad = (Double)(Math.PI / 180.0); //% pi = 3.14... |
|
Double f = focus_meters / pixel_size_meters; |
|
|
|
//Double xc_full = 0.5 * w_full; |
|
//Double yc_full = 0.5 * h_full; |
|
Double xc_full = 0.5f * w_full; |
|
Double yc_full = (6.0 / 42.0) * 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 |
|
|
|
if (WF == 0 || HF == 0) |
|
{ |
|
throw new Exception("Не заданы значения размера матрицы!"); |
|
} |
|
float w_full = (float)Wfull; |
|
float h_full = (float)Hfull; |
|
#if DEBUG |
|
Console.WriteLine($"{Util.printdatetime(false)}{w_full} {h_full}"); |
|
#endif |
|
|
|
#if VLADIMIR |
|
float focus_meters = 27.5e-3F; |
|
float pixel_size_meters = 3.2e-6F; //22.5'' |
|
#else |
|
float focus_meters = 12e-3; |
|
float pixel_size_meters = 1.55e-6; |
|
#endif |
|
|
|
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; |
|
float xc_full = 0.5f * w_full; |
|
float yc_full = (6.0F / 42.0F) * 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 = 53; |
|
// 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; |
|
|
|
private static Int32 _vremya_ustar; |
|
|
|
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 Int32 Vremya_ustar { get => _vremya_ustar; set => _vremya_ustar = value; } |
|
|
|
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); |
|
Array.Copy(BitConverter.GetBytes(Vremya_ustar), 0, Data, 49, 4); |
|
} |
|
/// <summary> |
|
/// Функция извлечения данных из массива |
|
/// </summary> |
|
public static void GetData() |
|
{ |
|
} |
|
public static void ClearData() |
|
{ |
|
for (int i = 0; i < Data.Length; i++) |
|
Data[i] = 0; |
|
} |
|
} |
|
|
|
}
|
|
|