public Driver_VirtualDevice(ConcurrentQueue <DeviceManager.MeasureStruct> _QueueNewValuesGlobal, int _id) { QueueNewValues = _QueueNewValuesGlobal; DriverID = _id; Random rnd = new Random(); MeasPerMin = rnd.Next(60, 150); CoefMinY = rnd.Next(10, 40); CoefMaxY = rnd.Next(50, 100); CoefPulseWith = rnd.Next(4000, 6000); CoefSinOfsPulse = rnd.Next(50, 150); LabDevice.DataTypes type = (LabDevice.DataTypes)rnd.Next(Enum.GetValues(typeof(LabDevice.DataTypes)).Length); }
public void NewValue(decimal value, LabDevice.DataTypes type, int _DriverId) { //Debug.WriteLine(value); //if (type != DataType) DeviceManager ///QueueNewValues.Enqueue(new LabDevice.MeasureStruct { Val = value, Typ = type, TS = DateTime.Now }); //int CurrentIDSession = -1; //foreach (KeyValuePair<int, LabDevice> currentDev in Devices) CurrentIDSession = (currentDev.Value.IDTargetDriver == _DriverId) ? currentDev.Key : CurrentIDSession; //Devices[CurrentIDSession].NewValue(value, type); //MainWindowEventNewValue(value, type, DateTime.Now, CurrentIDSession); //записать себе, чтобы потом с другого потока кто то мог взять эти данные, + отправить текущие данные в хост приложение //AddValueToFile(value, LabDevice.DataTypes.Abstract, ""); //graph //file //MainWindow.System_AddValueToGraph(value, DataTypes.Abstract); }
public bool TryParceData(byte[] data, out decimal Resoult, out LabDevice.DataTypes CurrentType, out string ResoultInRAW) { Resoult = 0; ResoultInRAW = ""; CurrentType = LabDevice.DataTypes.Abstract; if (data[1] != 240 && data[1] != 0) { LocalBuffer = LocalBuffer.Concat(data.Skip(2).Take(data[1] - 240).ToArray()).ToArray(); } //Debug.WriteLine(LocalBuffer.Length); int EndPos = IndexOf(LocalBuffer, new byte[] { 0x0D }, 0); if (EndPos != -1) { if (EndPos >= 13) { char[] asciiChars = Encoding.ASCII.GetChars(LocalBuffer); string asciiString = new string(asciiChars); //Debug.WriteLine(System.Text.Encoding.ASCII.GetString(LocalBuffer)); int CurrentStart = EndPos - 13; Resoult += (LocalBuffer[CurrentStart + 2] & 0x0F) * 1000; Resoult += (LocalBuffer[CurrentStart + 3] & 0x0F) * 100; Resoult += (LocalBuffer[CurrentStart + 4] & 0x0F) * 10; Resoult += (LocalBuffer[CurrentStart + 5] & 0x0F); if (LocalBuffer[CurrentStart + 7] == 49) { Resoult /= 1000; } if (LocalBuffer[CurrentStart + 7] == 50) { Resoult /= 100; } if (LocalBuffer[CurrentStart + 7] == 52) { Resoult /= 10; } if (LocalBuffer[CurrentStart + 10] == 32) { Resoult *= 1000; } if (LocalBuffer[CurrentStart + 10] == 16) { Resoult *= 1000000; } CurrentType = LabDevice.DataTypes.Resistance; ////int multiplex = 1000; ////int devider = 1; ////for (int i = CurrentStart + 5; i< CurrentStart + 10; i++) ////{ //// if (LocalBuffer[i] == 0x2E) //// { //// devider = multiplex; //// } //// else //// { //// Resoult += (LocalBuffer[i] & 0x0F) * multiplex; //// multiplex /= 10; //// } ////} ////Resoult /= devider; //Resoult = digits[4] + digits[3] * 10 + digits[2] * 100 + digits[1] * 1000 + digits[0] * 10000; //int rangeindex = LocalBuffer[CurrentStart + 5] & 0x0F; //int function = (LocalBuffer[CurrentStart + 6] & 0x0F); //decimal multi = (decimal)multlut[function, rangeindex]; //Resoult *= multi; ////if (LocalBuffer[CurrentStart + 4] == 0x2D) Resoult *= -1; ////switch (CurrentStart + 1) ////{ //// case (byte)'D': CurrentType = LabDevice.DataTypes.Voltage; break; //// case (byte)'O': CurrentType = LabDevice.DataTypes.Resistance; break; //// case (byte)'C': CurrentType = LabDevice.DataTypes.Capacity; break; //// case (byte)'T': CurrentType = LabDevice.DataTypes.Temperature; break; //// case (byte)'A': CurrentType = LabDevice.DataTypes.Current; break; //// case 12: CurrentType = LabDevice.DataTypes.Freq; break; ////} ResoultInRAW = BitConverter.ToString(LocalBuffer.Skip(CurrentStart).ToArray()); LocalBuffer = new byte[1]; //if (digits[0] == 0x0a && digits[1] == 0x0a && digits[2] == 0x00 && digits[3] == 0x0c && digits[4] == 0x0a) //{ // Resoult = 0; // return false; //} return(true); } else { LocalBuffer = new byte[1]; return(false); } } return(false); //try //{ // LocalBuffer = LocalBuffer.Concat(data).ToArray(); // Resoult = LocalBuffer.Length; // //CurrentValue = Resoult; // return true; //} //catch //{ // return false; //} }
public bool TryParceData(byte [] data, out decimal Resoult, out LabDevice.DataTypes CurrentType, out string ResoultInRAW) { Resoult = 0; ResoultInRAW = ""; CurrentType = LabDevice.DataTypes.Abstract; if (data[1] != 240 && data[1] != 0) { LocalBuffer = LocalBuffer.Concat(data.Skip(2).Take(data[1] - 240).ToArray()).ToArray(); } //Debug.WriteLine(LocalBuffer.Length); int EndPos = IndexOf(LocalBuffer, new byte[] { 0x0D, 0x8A }, 0); if (EndPos != -1) { if (EndPos >= 9) { //Debug.WriteLine(EndPos); int CurrentStart = EndPos - 9; int [] digits = new int[5]; digits[0] = (LocalBuffer[CurrentStart + 0] & 0x0F); digits[1] = (LocalBuffer[CurrentStart + 1] & 0x0F); digits[2] = (LocalBuffer[CurrentStart + 2] & 0x0F); digits[3] = (LocalBuffer[CurrentStart + 3] & 0x0F); digits[4] = (LocalBuffer[CurrentStart + 4] & 0x0F); Resoult = digits[4] + digits[3] * 10 + digits[2] * 100 + digits[1] * 1000 + digits[0] * 10000; int rangeindex = LocalBuffer[CurrentStart + 5] & 0x0F; int function = (LocalBuffer[CurrentStart + 6] & 0x0F); decimal multi = (decimal)multlut[function, rangeindex]; Resoult *= multi; if ((LocalBuffer[CurrentStart + 8] & 0x04) > 0) { Resoult *= -1; } switch (function) { case 0: case 1: case 2: case 3: CurrentType = LabDevice.DataTypes.Voltage; break; case 4: CurrentType = LabDevice.DataTypes.Resistance; break; case 5: CurrentType = LabDevice.DataTypes.Capacity; break; case 6: CurrentType = LabDevice.DataTypes.Temperature; break; case 7: case 8: case 9: CurrentType = LabDevice.DataTypes.Current; break; case 12: CurrentType = LabDevice.DataTypes.Freq; break; } ResoultInRAW = BitConverter.ToString(LocalBuffer.Skip(CurrentStart).ToArray()); LocalBuffer = new byte[1]; if (digits[0] == 0x0a && digits[1] == 0x0a && digits[2] == 0x00 && digits[3] == 0x0c && digits[4] == 0x0a) { Resoult = 0; return(false); } return(true); } else { LocalBuffer = new byte[1]; return(false); } } return(false); //try //{ // LocalBuffer = LocalBuffer.Concat(data).ToArray(); // Resoult = LocalBuffer.Length; // //CurrentValue = Resoult; // return true; //} //catch //{ // return false; //} }