Пример #1
0
        /// <summary>
        /// Чтение запросов из устройства
        /// </summary>
        private async void OnReadFromDeviceCommand()
        {
            //херня, знаю, но смысл один и тот же. надо просто сделать недоступными кнопки на вермя чтения, а обращаться через имя я не хочу
            IsAutonomus = true;
            try
            {
                this.RequestsFromDevice.Clear();
                this.ModuleRequestsForUIList.Clear();
                // число запросов к модулям хранится по адресу 0х300Е, читаем 1 слово(2 байта)
                ushort[] RC = await RTUConnectionGlobal.GetDataByAddress(1, REQUEST_COUNT_ADDRESS, 1);

                RequestCountFromDevice = RC[0];
                // начальный адрес
                ushort currentAddress = MODULE_REQUEST_START_ADDRESS;
                for (byte i = 0; i < RC[0]; i++)
                {
                    RequestsFromDevice.Add(new ModuleRequest(await RTUConnectionGlobal.GetDataByAddress(1, currentAddress, 4)));
                    ModuleRequestsForUIList.Add(RequestsFromDevice[i].UIRequest);
                    currentAddress += 4;
                }
                ShowMessage("Чтение запросов прошло успешно!", "Информация", MessageBoxImage.Information);
                AnalyzeModulesFromDevice();
            }
            catch (Exception ex)
            {
                ShowMessage("При чтении запросов произошла ошибка.", "Внимание", MessageBoxImage.Warning);
            }
            IsAutonomus = false;
        }
Пример #2
0
        /// <summary>
        /// Анализ модулей, прочитанных из устройства + их расстановка по местам
        /// </summary>
        private async void AnalyzeModulesFromDevice()
        {
            byte _firstModulePos;

            if (IsToggleCrate918Checked)
            {
                _firstModulePos = 0;
            }
            else
            {
                _firstModulePos = 1;
            }
            /// читаем модуль с верхом
            try
            {
                ushort[] upperModule = await RTUConnectionGlobal.GetDataByAddress(1, UPPER_MODULE_ADDRESS, 5);

                if (upperModule != null)
                {
                    byte[] byteArrayUpper    = ArrayExtension.UshortArrayToByteArray(upperModule);
                    string _typeAddressUpper = Converters.Convert.ConvertFromDecToHexStr(byteArrayUpper[1]);
                    byte   _typeUpper        = Converters.Convert.ConvertFromHexToDec((byte)Int32.Parse(_typeAddressUpper.First().ToString(), System.Globalization.NumberStyles.HexNumber));
                    byte   _addressUpper     = Converters.Convert.ConvertFromHexToDec((byte)Int32.Parse(_typeAddressUpper.Last().ToString(), System.Globalization.NumberStyles.HexNumber));
                    string upperName         = "Заглушка";
                    if (_typeUpper != 0)
                    {
                        if (_typeUpper == 0x0E)
                        {
                            //немного костыли, но че уж поделать, если таски возникают после того, как ниписано практически все
                            Config915Series cfg915 = new Config915Series(byteArrayUpper[5]);
                            if (cfg915.ModbusSpeed == 115200)
                            {
                                upperName = "MС915";
                            }
                            if (cfg915.ModbusSpeed == 19200)
                            {
                                upperName = "MС917";
                            }
                        }
                        if (_typeUpper == 0x0F)
                        {
                            upperName = "MС911";
                        }
                        this.ModuleListForUI[_addressUpper - _firstModulePos] = upperName;
                    }
                }
            }
            catch (Exception ex)
            {
                ShowMessage("При чтении запроса модуля связи с верхом произошла ошибка.", "Внимание", MessageBoxImage.Warning);
            }
            /// читаем модуль с низом
            try
            {
                ushort[] slaveCount = await RTUConnectionGlobal.GetDataByAddress(1, LOWER_MODULE_REQUEST_TO_SLAVES_COUNT_ADDRESS, 1);

                if (slaveCount[0] != 0)
                {
                    ushort[] lowerModule = await RTUConnectionGlobal.GetDataByAddress(1, LOWER_MODULE_ADDRESS, 5);

                    if (lowerModule != null)
                    {
                        byte[] byteArrayLower    = ArrayExtension.UshortArrayToByteArray(lowerModule);
                        string _typeAddressLower = Converters.Convert.ConvertFromDecToHexStr(byteArrayLower[1]);
                        byte   _typeLower        = Converters.Convert.ConvertFromHexToDec((byte)Int32.Parse(_typeAddressLower.First().ToString(), System.Globalization.NumberStyles.HexNumber));
                        byte   _addressLower     = Converters.Convert.ConvertFromHexToDec((byte)Int32.Parse(_typeAddressLower.Last().ToString(), System.Globalization.NumberStyles.HexNumber));
                        string lowerName         = "Заглушка";
                        if (_typeLower == 0x0E)
                        {
                            lowerName = "Люксметр";
                        }
                        this.ModuleListForUI[_addressLower - _firstModulePos] = lowerName;
                    }
                }
            }
            catch (Exception ex)
            {
                ShowMessage("При чтении запроса модуля связи с низом произошла ошибка.", "Внимание", MessageBoxImage.Warning);
            }
            ///модули

            for (int i = 0; i < RequestsFromDevice.Count(); i++)
            {
                this.ModuleListForUI[RequestsFromDevice[i].CrateAddress - _firstModulePos] = GetModuleNameFromType(RequestsFromDevice[i].Type, RequestsFromDevice[i].ParameterCount);
            }
            ///верх


            ///низ
        }