Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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;
            //}
        }
Esempio n. 4
0
        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;
            //}
        }