Beispiel #1
0
    public void AddProject(KSProject project, string positioning)
    {
        MasterSettings ms = MasterSettings.me;

        ParticleSystem.Particle temp = new ParticleSystem.Particle();
        int arraySize = particleSystem.GetParticles(particles);

        temp.size          = ms.WindowSize;
        temp.color         = KSJSON.me.parentCatColors[project.parentCat];
        temp.startLifetime = int.MaxValue;
        temp.lifetime      = int.MaxValue;

        switch (positioning.ToLower())
        {
        case "scatter":
            temp.position = ScatterPosition(project);
            break;

        case "bar":
        default:
            temp.position = BarPosition(arraySize);
            break;
        }

        Array.Resize <ParticleSystem.Particle>(ref particles, arraySize + 1);
        particles[arraySize] = temp;

        particleSystem.SetParticles(particles, arraySize + 1);
    }
        public OperationResult <MasterSettings> GetMasterSettings(long masterId)
        {
            Logger.Trace("Get master settings for {0}", masterId);
            return(InvokeOperations.InvokeOperation(() =>
            {
                var master = repository.GetMaster(masterId);
                //var masterDeposit = repository.GetMasterInvestSum(masterId);
                //var investDeposit = repository.GetInvestSumByMaster(masterId);
                var settings = new MasterSettings
                {
                    NextProcessing = master.date_next_processing,
                    Period = master.period,
                    ManagementFee = master.fee_management,
                    SuccessFee = master.fee_success,
                    MasterAmount = master.amount_own,
                    //InvestorsCount = repository.GetInvestorsCount(masterId),
                    Nickname = master.nickname,
                    //MasterDeposit = masterDeposit,
                    //InvestorsDeposit = investDeposit,
                    MinimalAmount = master.amount_min
                };

                return settings;
            }));
        }
        public void Insert2()
        {
            Dictionary <Guid, DateTime> Read = new Dictionary <Guid, DateTime>()
            {
                { Guid.Parse("6B9F4B43-5F78-E811-80C7-000C29DADC00"), DateTime.UtcNow }
            };

            MasterSettings.SetProperties(new Dictionary <string, object>()
            {
                { "CreatedBy", Guid.Parse("FC09E7EE-5E78-E811-80C7-000C29DADC00") }
            }, MasterSettings.Triggers.BeforeInsert);
            //MasterSettings.SetProperties(new Dictionary<string, object>() { { "CreatedBy", Guid.Parse("6B9F4B43-5F78-E811-80C7-000C29DADC00") } }, MasterSettings.Triggers.AfterInsert);
            Message message = new Message()
            {
                Text    = $"Test message # {DateTime.UtcNow.ToShortTimeString()}",
                Client  = 1,
                Caterer = 1,
                Read    = Read
            };

            InsertResult <Message> result = MessageRepository.Insert(message);

            Console.WriteLine($"Success:{result.Success}\nCollectionId:{result.CollectionId}\nInserted:\n{JToken.Parse(JsonConvert.SerializeObject(result.Result)).ToString(Formatting.Indented)}");

            Assert.IsNotNull(result.Result);
            Assert.IsInstanceOfType(result.Result, typeof(Message));
        }
Beispiel #4
0
        public EposDeviceManager(MasterSettings settings, SyncCloudAgent cloudAgent)
            : base(cloudAgent)
        {
            _deviceScanner = new DeviceScanner(settings);

            RegisterEvents();
        }
Beispiel #5
0
        public EposDeviceManager(MasterSettings settings)
        {
            VcsWrapper.Device.Init();

            _deviceScanner = new DeviceScanner(settings);

            RegisterEvents();
        }
Beispiel #6
0
    Vector3 BarPosition(int i)
    {
        MasterSettings ms = MasterSettings.me;

        float scale = (ms.WindowSize + ms.WindowSpacing);
        float z     = Mathf.Floor(i / 100);
        float x     = Mathf.Floor((i - z * 100) / 10);
        float y     = i - z * 100 - x * 10;

        return(new Vector3(x, y, z) * scale);
    }
Beispiel #7
0
    // Use this for initialization
    void Awake()
    {
        me = GetComponent <MasterSettings>();

/* What are the default values of a new particle.
 *              ParticleSystem.Particle debugParticle = new ParticleSystem.Particle();
 *              PropertyInfo[] properties = debugParticle.GetType().GetProperties();
 *              foreach (PropertyInfo property in properties)
 *                  Debug.Log("Name: " + property.Name + ", Value: " + property.GetValue(debugParticle, null));
 */
    }
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else if (instance != this)
     {
         Destroy(gameObject);
     }
 }
Beispiel #9
0
        //Constructor to setup the real KinectV2Core object
        public Core(ref MasterSettings settings, bool isGUILaunched, int kinectNumber)
        {
            realCore = new KinectCoreV2(ref settings, isGUILaunched, kinectNumber);

            //Subscribe to the events so they can be forwarded
            realCore.SkeletonChanged      += realCore_SkeletonChanged;
            realCore.DepthFrameReceived   += realCore_DepthFrameReceived;
            realCore.ColorFrameReceived   += realCore_ColorFrameReceived;
            realCore.AccelerationChanged  += realCore_AccelerationChanged;
            realCore.AudioPositionChanged += realCore_AudioPositionChanged;
            realCore.LogMessageGenerated  += realCore_LogMessageGenerated;
        }
Beispiel #10
0
        public NetworkKinectCore(ref MasterSettings settings, bool isGUILaunched, int kinectNumber, string name)
        {
            nkName         = name;
            masterSettings = settings;
            dynamic tempSettings = masterSettings.kinectOptionsList[(int)kinectNumber];  //Because of the wrapper, we have to go through a dynamic variable

            masterKinectSettings = (NetworkKinectSettings)tempSettings;
            kinectID             = kinectNumber;

            isGUI = isGUILaunched;
            //NOTE: unlike the physical Kinect sensors, network Kinect sensors are not launched on the creation of the core
        }
        //Constructor to setup the real KinectV2SettingsControl
        public SettingsControl(int kinectNumber, ref MasterSettings settings, IKinectCore kinect)
        {
            InitializeComponent();
            Grid.SetColumn(this, 2);
            this.Visibility = System.Windows.Visibility.Collapsed;

            Core         coreWrapper = (Core)kinect;
            KinectCoreV2 kinectCore  = (KinectCoreV2)coreWrapper;

            realControl            = new KinectV2SettingsControl(kinectNumber, ref settings, kinectCore);
            realControl.Visibility = System.Windows.Visibility.Visible;
            this.MasterGrid.Children.Add((UserControl)realControl);
        }
Beispiel #12
0
    // Use this for initialization
    void Awake()
    {
        mat       = new Material(BaseMaterial);
        particles = new ParticleSystem.Particle[0];

        MasterSettings ms = MasterSettings.me;

        defaultParticle               = new ParticleSystem.Particle();
        defaultParticle.size          = ms.WindowSize;
        defaultParticle.color         = Color.white;
        defaultParticle.startLifetime = int.MaxValue;
        defaultParticle.lifetime      = int.MaxValue;
    }
Beispiel #13
0
        private static void RunOptionsAndReturnExitCode(MasterOptions opts)
        {
            var    appName  = AppDomain.CurrentDomain.FriendlyName;
            var    settings = new MasterSettings();
            var    host     = settings.Host;
            string login    = settings.Identity.AuthData.Login;
            string password = settings.Identity.AuthData.Password;

            if (!string.IsNullOrEmpty(opts.Host))
            {
                host = opts.Host;
            }

            if (!string.IsNullOrEmpty(opts.Login))
            {
                login = opts.Login;
            }

            if (!string.IsNullOrEmpty(opts.Password))
            {
                password = opts.Password;
            }

            var master = new EltraMasterConnector();

            master.Host = host;
            master.ConnectionSettings = new ConnectionSettings()
            {
                UpdateInterval = settings.UpdateInterval, Timeout = settings.Timeout
            };

            var t = Task.Run(async() => {
                Console.WriteLine($"Sign-in login={login}, passwd={password}");

                var di = new UserIdentity()
                {
                    Login = login, Name = settings.Identity.Name, Password = password, Role = settings.Identity.Role
                };

                if (await master.SignIn(di, true))
                {
                    if (!master.StartService(appName, new EposDeviceManager(settings)))
                    {
                        MsgLogger.WriteError(appName, "starting master service failed!");
                    }
                }
            });

            t.Wait();
        }
    // Use this for initialization
    void Start()
    {
        MasterSettings ms = MasterSettings.me;

        f_skinRadius    = ms.skinRadius;
        f_skinRadius    = SkinRadius;
        f_nodeSpread    = ms.nodeSpread;
        i_circlePoints  = ms.circlePoints;
        i_coneHeight    = ms.coneHeight;
        i_pointsPerNode = ms.pointsPerNode;
        f_tension       = ms.tension;

        makeNodes(seed);
        makeSpine();
        makeSkin();
    }
Beispiel #15
0
    public void OldAddProject(KSProject project)
    {
        MasterSettings ms   = MasterSettings.me;
        GameObject     temp = (GameObject)Instantiate(WinFab);

        temp.GetComponent <Window>().Project = project;
        temp.transform.parent        = transform;
        temp.transform.localScale    = Vector3.one * ms.WindowSize;
        temp.transform.localPosition = new Vector3(0, 0, (float)windows.Count * (ms.WindowSize + ms.WindowSpacing));
        mat.color = KSJSON.me.parentCatColors[project.parentCat];
        temp.renderer.material = mat;
        windows.Add(temp);
        if (windows.Count % 1000 == 0 && false)
        {
            StaticBatch();
        }
    }
Beispiel #16
0
    IEnumerator BuildProjects()
    {
        MasterSettings ms = MasterSettings.me;

        Debug.Log(projectQueue.Count);
        while (projectQueue.Count > 0)
        {
            timer += Time.deltaTime;
            //buildrate = 3f/(float)projectQueue.Count;
            while (timer > 0)
            {
                if (projectQueue.Count < 1)
                {
                    break;
                }
                KSProject proj = (KSProject)projectQueue.Dequeue();
                //Debug.Log(proj.ToString());

                ParticleSystem.Particle temp = new ParticleSystem.Particle();

                temp.size          = ms.WindowSize;
                temp.color         = KSJSON.me.parentCatColors[proj.parentCat];
                temp.startLifetime = int.MaxValue;
                temp.lifetime      = int.MaxValue;

                temp.position = placeParticle(
                    proj,
                    KSMetric.List[GA.xLabel],
                    KSMetric.List[GA.yLabel]
                    );

                pps.projects.Add(proj);
                pps.particles.Add(temp);

                timer -= buildrate;
                GA.ProjectCount++;
            }
            pps.ToParticleSystem(particleSystem);
            yield return(null);
        }

        makeTris();

        //Debug.Log("Finished Queue");
    }
Beispiel #17
0
        internal static void RunServerInConsole(bool isVerbose, bool autoStart, string startupFile)
        {
            Console.Clear();
            Console.WriteLine("Welcome to the Kinect With VR (KiwiVR) Server!");
            Console.WriteLine("Press the \"E\" key at any time to exit.");

            MasterSettings settings = new MasterSettings();

            try
            {
                settings = HelperMethods.LoadSettings(startupFile);
            }
            catch
            {
                HelperMethods.WriteToLog("Cannot open settings file!");
            }

            ServerCore server = new ServerCore(isVerbose, settings);
            for (int i = 0; i < server.serverMasterOptions.kinectOptionsList.Count; i++) //Launch the Kinects
            {
                server.kinects.Add(new KinectCore(server, null, server.serverMasterOptions.kinectOptionsList[i].kinectID));
            }
            server.launchServer(); //This will still try to launch with default settings even if the settings load fails

            bool running = true;
            while (running)
            {
                Thread.Sleep(100);
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo key = Console.ReadKey(false);
                    if (key.Key == ConsoleKey.E || (key.Key == ConsoleKey.C && key.Modifiers == ConsoleModifiers.Control))
                    {
                        running = false;
                    }
                }
            }

            Console.WriteLine("Shutting down the server.  Please wait...");
            server.stopServer();

            NativeInterop.FreeConsole();
        }
    // Use this for initialization
    void Start()
    {
        go_polyps = new GameObject[1000];

        MasterSettings ms = MasterSettings.me;

        i_polypsPerNode = ms.polypsPerNode;
        f_polypHeight   = ms.polypHeight;
        f_skinRadius    = ms.skinRadius;
        f_polypAngle    = ms.polypAngle;
        f_nodeSpread    = ms.nodeSpread;
        f_tension       = ms.tension;
        i_pointsPerNode = ms.pointsPerNode;
        i_circlePoints  = ms.circlePoints;
        i_coneHeight    = ms.coneHeight;
        pf_polyp        = ms.polypFab;

        //drawLine = true;

        KSJSON.me.getProjects(gameObject, "parentCat=" + parentCat + "&limit=500");
    }
Beispiel #19
0
 public RedisGroup(string groupName, int poolSize, RedisSettings[] settings, IServerSelector selector = null) : this()
 {
     GroupName = groupName;
     PoolSize  = poolSize;
     foreach (var setting in settings)
     {
         if (setting.Master)
         {
             MasterSettings.Add(setting);
         }
         else
         {
             SlaveSettings.Add(setting);
         }
     }
     if (SlaveSettings.Count == 0)
     {
         SlaveSettings = MasterSettings;
     }
     _serverSelector = selector ?? new SimpleHashingSelector();
 }
 public void GetAndSaveDataFromSlaves(MasterSettings masterSettings)
 {
     SaveResults(this.GetDataFromSlaves(masterSettings));
 }
        public Dictionary <int, string> GetDataFromSlaves(MasterSettings masterSettings)
        {
            ModbusMaster master;
            var          results = new Dictionary <int, string>();

            try
            {
                var masterSettingsIp = masterSettings as MasterSettingsIp;
                if (masterSettingsIp != null)
                {
                    using (var client = new TcpClient(
                               masterSettingsIp.Host,
                               masterSettingsIp.Port)
                    {
                        ReceiveTimeout = masterSettings.Timeout
                    })
                    {
                        master = ModbusIpMaster.CreateIp(client);

                        results = SendRequests(master, masterSettings);

                        client.Close();
                    }
                }
                else
                {
                    var masterSettingsCom = masterSettings as MasterSettingsCom;
                    if (masterSettingsCom != null)
                    {
                        using (var port = new SerialPort(masterSettingsCom.PortName)
                        {
                            BaudRate = masterSettingsCom.BaudRate,
                            DataBits = masterSettingsCom.DataBits,
                            Parity = masterSettingsCom.Parity,
                            StopBits = masterSettingsCom.StopBits,
                            ReadTimeout = masterSettingsCom.Timeout
                        })
                        {
                            port.Open();

                            master = ModbusSerialMaster.CreateRtu(port);

                            results = SendRequests(master, masterSettings);

                            port.Close();
                        }
                    }
                }
            }
            catch (SocketException ex)
            {
                if (!isConnectionLost)
                {
                    if (loggerEnabled)
                    {
                        Logger.Write(ex.Message);
                    }
                    else
                    {
                        throw ex;
                    }
                }
                isConnectionLost = true;
            }

            return(results);
        }
 private void ReadMasterSettingsFile()
 {
     try
     {
         if(File.Exists(GearFiles.MasterSettingsFilename))
         {
             using (FileStream file = File.OpenRead(GearFiles.MasterSettingsFilename))
             {
                 mMasterSettings = Serializer.Deserialize<MasterSettings>(file);
             }
         }
         else if(File.Exists(GearFiles.BackupMasterSettingsFilename))
         {
             using (FileStream file = File.OpenRead(GearFiles.BackupMasterSettingsFilename))
             {
                 mMasterSettings = Serializer.Deserialize<MasterSettings>(file);
             }
         }
         else
         {
             mMasterSettings = new MasterSettings();
             BuildCollectionTaskList();
             BuildKillTaskList();
             SaveMasterSettingsFile();
         }
     }
     catch
     {
         if(File.Exists(GearFiles.BackupMasterSettingsFilename))
         {
             using (FileStream file = File.OpenRead(GearFiles.BackupMasterSettingsFilename))
             {
                 mMasterSettings = Serializer.Deserialize<MasterSettings>(file);
             }
         }
         else
         {
             mMasterSettings = new MasterSettings();
             BuildCollectionTaskList();
             BuildKillTaskList();
             SaveMasterSettingsFile();
         }
     }
 }
Beispiel #23
0
 public DeviceScanner(MasterSettings settings)
 {
     _settings = settings;
     _devices  = new List <MotionControllerDevice>();
     _cancelationTokenSource = new CancellationTokenSource();
 }
Beispiel #24
0
        private void Window_Initialized(object sender, EventArgs e)
        {
            //Setup the timer to update the GUI with the server runtime
            uptimeUpdateTimer = new System.Timers.Timer();
            uptimeUpdateTimer.Interval = 500;
            uptimeUpdateTimer.Elapsed += new System.Timers.ElapsedEventHandler(uptimeUpdateTimer_Elapsed);

            MasterSettings tempSettings = new MasterSettings();

            //Create the server core (this does NOT start the server)
            server = new ServerCore(verbose, tempSettings, this);

            //Set all the data for the data grids
            VoiceButtonDataGrid.ItemsSource = server.serverMasterOptions.voiceButtonCommands;
            VoiceTextDataGrid.ItemsSource = server.serverMasterOptions.voiceTextCommands;

            KinectStatusBlock.Text = "1";

            if (startupFile != null && startupFile != "")
            {
                try
                {
                    server.serverMasterOptions = HelperMethods.LoadSettings(startupFile);
                    UpdateGUISettings();
                }
                catch
                {
                    MessageBox.Show("Error: The startup settings file failed to load!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    HelperMethods.WriteToLog("Startup settings (" + startupFile + ") failed to load.");
                }
            }

            //TODO: Handle starting Kinects based on the loaded settings file
            //Initialize the data for the available Kinects
            for (int i = 0; i < KinectSensor.KinectSensors.Count; i++)
            {
                AvailableKinectData tempData = new AvailableKinectData();
                tempData.ConnectionID = KinectSensor.KinectSensors[i].DeviceConnectionId;
                tempData.Status = KinectSensor.KinectSensors[i].Status;
                if (i == 0 && tempData.Status == KinectStatus.Connected)
                {
                    tempData.UseKinect = true;
                    tempData.KinectID = 0;
                    server.serverMasterOptions.kinectOptionsList.Add(new KinectSettings(tempData.ConnectionID, (int)tempData.KinectID));
                    server.kinects.Add(new KinectCore(server, this, (int)tempData.KinectID));
                    tempData.ServerStatus = "Running";
                }
                else
                {
                    tempData.UseKinect = false;
                    tempData.KinectID = null;
                }
                tempData.PropertyChanged += useKinect_PropertyChanged;
                availableKinects.Add(tempData);
            }
            kinectsAvailableDataGrid.ItemsSource = availableKinects;
            UpdatePageListing();
            GenerateImageSourcePickerLists();
            KinectSensor.KinectSensors.StatusChanged += KinectSensors_StatusChanged;

            //Populate the skeleton data and set the binding for the data grid
            GenerateSkeletonDataGridData();
            SkeletonSettingsDataGrid.ItemsSource = server.serverMasterOptions.skeletonOptions.individualSkeletons;

            //Populate and setup the voice recognition lists
            GenerateVoiceRecogEngineList();
            GenerateAudioSourceList();
            VoiceKinectComboBox.SelectedIndex = 0;

            //Set defaults where needed
            FeedbackJointTypeComboBox.SelectedIndex = 0;
            SkelSortModeComboBox.SelectedIndex = 5;

            if (startOnLaunch)
            {
                startServerButton_Click(this, new RoutedEventArgs());
            }
        }
 //Public methods required by the IKinectSettingsControl interface
 public void UpdateGUI(MasterSettings newSettings)
 {
     realControl.UpdateGUI(newSettings);
 }
        private Dictionary <int, string> SendRequests(ModbusMaster master, MasterSettings masterSettings)
        {
            if (master == null)
            {
                return(null);
            }

            var results = new Dictionary <int, string>();

            foreach (var slave in masterSettings.SlaveSettings)
            {
                string hexResults = "";

                PackagesCounter.RequestedPackagesCount += 1;

                try
                {
                    if (masterSettings.IsLoggerEnabled)
                    {
                        Logger.WriteDebug($"Sent request to a slave: DeviceId = {slave.DeviceId}; SlaveAddress={slave.StartAddress}; NumberOfRegisters={slave.NumberOfRegisters}.");
                    }

                    switch (slave.ActionType)
                    {
                    case ActionTypes.Read:
                        var registers = master.ReadHoldingRegisters(slave.DeviceId, slave.StartAddress,
                                                                    slave.NumberOfRegisters);

                        if (registers == null || registers.Length == 0)
                        {
                            throw new EmptyResultException(
                                      $"Slave with address {slave.DeviceId} returned an empty result when reading {slave.NumberOfRegisters} registers starting with register number {slave.StartAddress}.");
                        }

                        PackagesCounter.RecievedPackagesCount += 1;
                        isConnectionLost = false;

                        var inputs = registers.ConvertToBitArray();

                        hexResults = inputs.ConvertToHex();

                        var startAddress = slave.StartAddress;

                        foreach (var type in slave.Types)
                        {
                            switch (type.Item2)
                            {
                            case ModbusDataType.SInt16:
                                // Берём из массива битов первые 16, чтобы сконвертировать их в знаковое 16-битное целое число.
                                var sInt16Part = inputs.Take(8 * type.Item1).ToArray();

                                // Обрезаем у массива эти первые 16 бит (16 бит = 2 байта).
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var sInt16BinaryString = string.Join("", sInt16Part.Select(x => x ? 1 : 0));

                                // Конвертируем полученное двоичное число в знаковое 16-битное целое число.
                                var sInt16 = Convert.ToInt16(sInt16BinaryString, 2);

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, sInt16.ToString());

                                // Перемещаем указатель на следующий регистр (16 бит = 2 байта = 1 регистр)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.UInt16:
                                // Берём из массива битов первые 16, чтобы сконвертировать их в беззнаковое 16-битное целое число.
                                var uInt16Part = inputs.Take(8 * type.Item1).ToArray();

                                // Обрезаем у массива эти первые 16 бит (16 бит = 2 байта).
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var binaryString = uInt16Part.Select(x => x ? 1 : 0);

                                // Конвертируем полученное двоичное число в беззнаковое 16-битное целое число.
                                var uShort = Convert.ToUInt16(string.Join("", binaryString), 2);

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, uShort.ToString());

                                // Перемещаем указатель на следующий регистр (16 бит = 2 байта = 1 регистр)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.SInt32:
                                // Берём из массива битов первые 32, чтобы сконвертировать их в знаковое 32-битное целое число.
                                var sInt32Part = inputs.Take(8 * type.Item1).ToArray();

                                // Обрезаем у массива эти первые 32 бит (32 бит = 4 байта).
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var sInt32BinaryString = sInt32Part.Select(x => x ? 1 : 0);

                                // Конвертируем полученное двоичное число в знаковое 32-битное целое число.
                                var sInt32 = Convert.ToInt32(string.Join("", sInt32BinaryString), 2);

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, sInt32.ToString());

                                // Перемещаем указатель на следующий регистр (32 бита = 4 байта = 2 регистра)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.UInt32:
                                // Берём из массива битов первые 32, чтобы сконвертировать их в беззнаковое 32-битное целое число.
                                var uInt32Part = inputs.Take(8 * type.Item1).ToArray();

                                // Обрезаем у массива эти первые 32 бит (32 бит = 4 байта).
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var binaryUInt32String = uInt32Part.Select(x => x ? 1 : 0);

                                // Конвертируем полученное двоичное число в беззнаковое 32-битное целое число.
                                var uInt32 = Convert.ToUInt32(string.Join("", binaryUInt32String), 2);

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, uInt32.ToString());

                                // Перемещаем указатель на следующий регистр (32 бита = 4 байта = 2 регистра)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.Hex:
                                // Берём из массива битов первые 32, чтобы сконвертировать их в беззнаковое 32-битное целое число.
                                var hexPart = inputs.Take(8 * type.Item1).ToArray();

                                // Обрезаем у массива эти первые 32 бит (32 бит = 4 байта).
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var binaryHexString = hexPart.Select(x => x ? 1 : 0);

                                // Конвертируем полученное десятичное число в знаковое 32-битное целое число, после этого конвертируем число в 16-ричную систему счисления.
                                var hex = Convert.ToUInt32(string.Join("", binaryHexString), 2).ToString("X");

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, $"0x{hex}");

                                // Перемещаем указатель на следующий регистр (32 бита = 4 байта = 2 регистра)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.UtcTimestamp:
                                // В данном случае мы должны считать целое число (тоже беззнаковое 32-битное) и преобразовать к дате.
                                // Берём из массива битов первые 32, чтобы сконвертировать их в знаковое 32-битное целое число.
                                var utcTimestampPart = inputs.Take(8 * type.Item1).ToArray();
                                inputs = inputs.Skip(8 * type.Item1).ToArray();

                                // Преобразуем массив битов в строку, состоящую из единиц и нулей.
                                var binaryUtcTimestampString = utcTimestampPart.Select(x => x ? 1 : 0);

                                // Конвертируем полученное двоичное число в беззнаковое 32-битное целое число.
                                var utcTimestamp = Convert.ToUInt32(string.Join("", binaryUtcTimestampString), 2);

                                // Добавляем полученное число в список значений.
                                results.Add(startAddress, new DateTime(1970, 1, 1).AddSeconds(utcTimestamp)
                                            .ToLocalTime()
                                            .ToString("yyyy.MM.dd HH:mm:ss"));

                                // Перемещаем указатель на следующий регистр (32 бита = 4 байта = 2 регистра)
                                startAddress += (ushort)(type.Item1 / 2);

                                break;

                            case ModbusDataType.String:
                                bool[] stringPart;

                                if (inputs.Length > 8 * type.Item1)
                                {
                                    stringPart = inputs.Take(8 * type.Item1).ToArray();
                                    inputs     = inputs.Skip(8 * type.Item1).ToArray();

                                    results.Add(startAddress, stringPart.ConvertToString());

                                    startAddress += (ushort)(type.Item1 / 2);
                                }
                                else
                                {
                                    stringPart = inputs;
                                    inputs     = new bool[0];

                                    results.Add(startAddress, stringPart.ConvertToString());

                                    startAddress += (ushort)(stringPart.Length / 16);
                                }

                                break;

                            default:
                                throw new ArgumentOutOfRangeException();
                            }
                        }

                        if (masterSettings.IsLoggerEnabled)
                        {
                            Logger.WriteDebug($"Recieved data from slave: DeviceId = {slave.DeviceId}; SlaveAddress={slave.StartAddress}; NumberOfRegisters={slave.NumberOfRegisters}; {hexResults}");
                        }

                        break;

                    case ActionTypes.Write:
                        var data = new ushort[] { Convert.ToUInt16(slave.Formula) };

                        master.WriteMultipleRegisters(slave.DeviceId, slave.StartAddress, data);

                        if (masterSettings.IsLoggerEnabled)
                        {
                            Logger.WriteDebug($"Sent data to slave: DeviceId = {slave.DeviceId}; SlaveAddress={slave.StartAddress}; {data}");
                        }

                        break;
                    }
                }
                catch (SlaveException slaveException)
                {
                    switch (slaveException.SlaveExceptionCode)
                    {
                    case 130:
                        if (!isConnectionLost)
                        {
                            Logger.Write(slaveException.Message);
                        }
                        isConnectionLost = true;
                        break;

                    default:
                        if (loggerEnabled)
                        {
                            Logger.Write(slaveException.Message);
                        }
                        else
                        {
                            throw slaveException;
                        }
                        break;
                    }
                }
                catch (Exception exception)
                {
                    if (loggerEnabled)
                    {
                        Logger.Write(exception.Message);
                    }
                    else
                    {
                        throw exception;
                    }
                }
            }

            return(results);
        }
 // Use this for initialization
 void Awake()
 {
     me = GetComponent<MasterSettings>();
     /* What are the default values of a new particle.
     ParticleSystem.Particle debugParticle = new ParticleSystem.Particle();
     PropertyInfo[] properties = debugParticle.GetType().GetProperties();
     foreach (PropertyInfo property in properties)
         Debug.Log("Name: " + property.Name + ", Value: " + property.GetValue(debugParticle, null));
         */
 }