Exemplo n.º 1
0
 //------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Сериализует объект БИ в файл
 /// </summary>
 /// <param name="stream">Поток в котором открыт файл для сериализации, должен быть открыт для записи</param>
 /// <param name="device">Объект БИ</param>
 /// <returns>Результат выполнения операции, 
 /// если false - не удалость сериализовать</returns>
 public static Boolean Serialize(FileStream stream, MeasuringDeviceMainPower device)
 {
     BinaryFormatter bf = new BinaryFormatter();
     Boolean result;
     if (stream != null)
     {
         if (stream.CanWrite)
         {            
             try
             {
                 bf.Serialize(stream, device);
                 result = true;
             }
             catch
             {
                 // Не удалось сериализовать объект
                 result = false;
             }
         }
         else
         {
             result = false;
         }
     }
     else
     {
         result = false;
     }
     return result;
 }
Exemplo n.º 2
0
        //----------------------------------------------------------------------------
        /// <summary>
        /// Читает визитную карточку устройства и выводит её на экран
        /// </summary>
        private void GetTypeDevice()
        {
            OperationResult result;
            CallingCard deviceInfo;
            String _typeOfDevice;

            // Получаем данные об устройстве.
            if (_Host == null)
            {
                _Host =
                    new Modbus.OSIModel.ApplicationLayer.Master.Device(
                        "Network", _SerialPort);

                this.ReadCallingCard(out result, out deviceInfo);
                _Host = null;
            }
            else
            {
                this.ReadCallingCard(out result, out deviceInfo);
            }

            if (result.Result == OPERATION_RESULT.OK)
            {
                // Если визитную карточку удалось получить, и виртуальное 
                // устройство не создано, то предлагаем
                // создать не её основе устройство. В противном случае просто выводим информацию
                switch ((UInt16)deviceInfo.TypeOfDevice)
                {
                    case (UInt16)TYPE_NGK_DEVICE.UNKNOWN_DEVICE:
                        {
                            _typeOfDevice = "Неизвестное устройство";
                            break;
                        }
                    case (UInt16)TYPE_NGK_DEVICE.BI_BATTERY_POWER:
                        {
                            _typeOfDevice = "Устройство БИ(У)-01";
                            break;
                        }
                    case (UInt16)TYPE_NGK_DEVICE.BI_MAIN_POWERED:
                        {
                            _typeOfDevice = "Устройство БИ(У)-00";
                            break;
                        }
                    default:
                        {
                            throw new Exception("Данное устройство не поддерживается в данной версии ПО");
                        }
                }

                if (_MeasuringDevice == null)
                {
                    // Предлагаем создать устройство
                    DialogResult dlgres = MessageBox.Show(this,
                        String.Format("Тип устройства: {0} \n Версия ПО: {1} \n Версия аппаратуры: {2} \n Серийный номер: {3} \n Создать устройство?",
                        _typeOfDevice, deviceInfo.SofwareVersion, deviceInfo.HardwareVersion, deviceInfo.SerialNumber),
                        "Устройство НГК", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                    if (dlgres == System.Windows.Forms.DialogResult.Yes)
                    {
                        // Создаём новое устройство
                        IMeasuringDevice device;

                        // Создаём экземпляр
                        switch (deviceInfo.TypeOfDevice)
                        {
                            case TYPE_NGK_DEVICE.BI_BATTERY_POWER:
                                {
                                    //MessageBox.Show(this, "Данный тип БИ не поддерживается ПО",
                                    //    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    //return;
                                    MeasuringDeviceBatteryPower dv = new MeasuringDeviceBatteryPower();
                                    device = (IMeasuringDevice)dv;
                                    break;
                                }
                            case TYPE_NGK_DEVICE.BI_MAIN_POWERED:
                                {
                                    MeasuringDeviceMainPower dv = new MeasuringDeviceMainPower();
                                    device = (IMeasuringDevice)dv;
                                    break;
                                }
                            default:
                                {
                                    MessageBox.Show(this, "Данный тип БИ не поддерживается ПО",
                                        "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return;
                                }
                        }

                        CreateDevice(device);
                    }
                }
                else
                {
                    // Только выводим информацию об устройстве
                    MessageBox.Show(this,
                        String.Format("Тип устройства: {0} \n Версия ПО: {1} \n Версия аппаратуры: {2} \n Серийный номер: {3}",
                        _typeOfDevice, deviceInfo.SofwareVersion, deviceInfo.HardwareVersion, deviceInfo.SerialNumber),
                        "Устройство НГК", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                // При выполении запроса возникла ошибка
                MessageBox.Show(this,
                    String.Format("Неудалось идентифицировать устройство. Ошибка: {0}", result.Message),
                    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return;
        }
Exemplo n.º 3
0
 //------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Генерирует событие перед изменением свойства 
 /// </summary>
 /// <param name="args"></param>
 //private void OnPropertyChanging(PropertyChangingEventArgs args)
 //{
 //    //if (this.PropertyChanging != null)
 //    //{
 //    //    this.PropertyChanging(this, args);
 //    //}
 //    return;
 //}
 //------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Сериализует объект БИ в файл
 /// </summary>
 /// <param name="path">Путь + имя файла, 
 /// в который необходимо сохранить объект БИ</param>
 /// <param name="device">Объект БИ</param>
 /// <returns>Результат выполнения операции, 
 /// если false - не удалость сериализовать</returns>
 public static Boolean Serialize(String path, MeasuringDeviceMainPower device)
 {
     FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);
     BinaryFormatter bf = new BinaryFormatter();
     Boolean result;
     try
     {
         bf.Serialize(fs, device);
         result = true;
     }
     catch
     {
         // Не удалось сериализовать объект
         result = false;
     }
     finally
     {
         if (fs != null)
         {
             fs.Close();
         }
     }
     return result;
 }
Exemplo n.º 4
0
        //----------------------------------------------------------------------------
        /// <summary>
        /// Создаём виртуальное устройство и функционал для работы с ним
        /// </summary>
        /// <param name="device">Устройство КИП, 
        /// если передаётся null - создаётся новое устройство</param>
        private void CreateDevice(IMeasuringDevice device)
        {
            if (device == null)
            {
                // Открываем форму для создания нового устройства
                Forms.FormSelectTypeDevice frm = new Forms.FormSelectTypeDevice();
                DialogResult result = frm.ShowDialog(this);

                if (result != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
                else
                {
                    // Создаём экземпляр
                    switch (frm.TypeDevice)
                    {
                        case TYPE_NGK_DEVICE.BI_BATTERY_POWER:
                            {
                                //MessageBox.Show(this, "Данный тип БИ не поддерживается ПО",
                                //    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                //return;
                                MeasuringDeviceBatteryPower dv = new MeasuringDeviceBatteryPower();
                                device = (IMeasuringDevice)dv;
                                break; 
                            }
                        case TYPE_NGK_DEVICE.BI_MAIN_POWERED:
                            {
                                MeasuringDeviceMainPower dv = new MeasuringDeviceMainPower();
                                device = (IMeasuringDevice)dv;
                                break; 
                            }
                        default:
                            {
                                MessageBox.Show(this, "Данный тип БИ не поддерживается ПО", 
                                    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return;
                            }
                    }
                }
            }

            switch (device.GetDeviceType())
            {
                case TYPE_NGK_DEVICE.BI_MAIN_POWERED:
                    {
                        _Host = 
                            new Modbus.OSIModel.ApplicationLayer.Master.Device(
                                "NetworkModbus", (IDataLinkLayer)_SerialPort);
                        _MeasuringDevice = device;
                        _MeasuringDevice.PropertyChanged += 
                            new PropertyChangedEventHandler(_MeasuringDevice_PropertyChanged);
                        break;
                    }
                case TYPE_NGK_DEVICE.BI_BATTERY_POWER:
                    {
                        _Host = new 
                            Modbus.OSIModel.ApplicationLayer.Master.Device("NetworkModbus", 
                            (IDataLinkLayer)_SerialPort);
                        _MeasuringDevice = device;
                        _MeasuringDevice.PropertyChanged +=
                            new PropertyChangedEventHandler(_MeasuringDevice_PropertyChanged);
                        break;
                    }
                default:
                    {
                        throw new Exception("Попытка создания устройства БИ с неопределённым типом");
                    }
            }

            // Настраиваем элементы навигации, управления и меню
            ToolStripMenuItem itemMenu;
            ToolStripButton button;

            // Главное меню:
            // Меню "Файл"
            itemMenu = ((ToolStripMenuItem)this.menuStripMain.Items["mnuFile"]);
            itemMenu.Enabled = true;
            itemMenu.DropDownItems["mnuFileCreate"].Enabled = false;
            itemMenu.DropDownItems["mnuFileOpen"].Enabled = true;
            itemMenu.DropDownItems["mnuFileClose"].Enabled = true;
            itemMenu.DropDownItems["mnuFileSave"].Enabled = true;
            itemMenu.DropDownItems["mnuFileSaveAs"].Enabled = true;
            itemMenu.DropDownItems[MENU.mnuFilePrint].Enabled = true;
            itemMenu.DropDownItems[MENU.mnuFilePrintPreview].Enabled = true;
            itemMenu.DropDownItems[MENU.mnuFilePrintSettings].Enabled = true;
            itemMenu.DropDownItems[MENU.mnuFilePageSettings].Enabled = true;
            itemMenu.DropDownItems["mnuFileExit"].Enabled = true;

            // Меню "Устройство КИП"
            if (_SerialPort.IsOpen())
            {
                itemMenu = ((ToolStripMenuItem)this.menuStripMain.Items["mnuDevice"]);
                itemMenu.Enabled = true;
                itemMenu.DropDownItems["mnuDeviceRead"].Enabled = true;
                itemMenu.DropDownItems["mnuDeviceWrite"].Enabled = true;
            }
            else
            {
                itemMenu = ((ToolStripMenuItem)this.menuStripMain.Items["mnuDevice"]);
                itemMenu.Enabled = false;
                itemMenu.DropDownItems["mnuDeviceRead"].Enabled = true;
                itemMenu.DropDownItems["mnuDeviceWrite"].Enabled = true;
            }
            // Меню "Подключение"
            //itemMenu = ((ToolStripMenuItem)this.menuStripMain.Items["mnuConnection"]);
            //itemMenu.Enabled = true;
            //itemMenu.DropDownItems["mnuConnectionConnect"].Enabled = false;
            //itemMenu.DropDownItems["mnuConnectionDisconnect"].Enabled = true;
            // Меню "Помощь"
            itemMenu = ((ToolStripMenuItem)this.menuStripMain.Items["mnuHelp"]);
            itemMenu.Enabled = true;
            itemMenu.DropDownItems["mnuHelpHelp"].Enabled = true;
            itemMenu.DropDownItems["mnuHelpAbout"].Enabled = true;

            // Инициализируем панель инструментов
            button = (ToolStripButton)this.toolStripMain.Items["buttonSaveDevice"];
            button.Enabled = true;
            button = (ToolStripButton)this.toolStripMain.Items["buttonNewDevice"];
            button.Enabled = false;
            button = (ToolStripButton)this.toolStripMain.Items["buttonDeleteDevice"];
            button.Enabled = true;
            button = (ToolStripButton)this.toolStripMain.Items["buttonConnection"];

            //button.Enabled = true;
            //button.ToolTipText = "Поключить";
            //button.Image = global::NGK.MeasuringDeviceTech.Properties.Resources.IconDisconnect;

            //((ToolStripMenuItem)menuStripMain.Items["mnuConnection"]).DropDownItems["mnuConnectionConnect"].Enabled = true;
            //((ToolStripMenuItem)menuStripMain.Items["mnuConnection"]).DropDownItems["mnuConnectionDisconnect"].Enabled = false;

            if (_SerialPort.IsOpen())
            {
                button = (ToolStripButton)this.toolStripMain.Items["buttonReadDevice"];
                button.Enabled = true;
                button = (ToolStripButton)this.toolStripMain.Items["buttonWriteDevice"];
                button.Enabled = true;
                button = (ToolStripButton)this.toolStripMain.Items["buttonVerifyInitDevice"];
                button.Enabled = true;
                button = (ToolStripButton)this.toolStripMain.Items["buttonSyncDateTime"];
                button.Enabled = true;
                button = (ToolStripButton)this.toolStripMain.Items[TOOLSTRIPBUTTON.buttonStartMonitor];
                button.Enabled = true;
                button = (ToolStripButton)this.toolStripMain.Items[TOOLSTRIPBUTTON.buttonStopMonitor];
                button.Enabled = false;
            }
            else
            {
                button = (ToolStripButton)this.toolStripMain.Items["buttonReadDevice"];
                button.Enabled = false;
                button = (ToolStripButton)this.toolStripMain.Items["buttonWriteDevice"];
                button.Enabled = false;
                button = (ToolStripButton)this.toolStripMain.Items["buttonVerifyInitDevice"];
                button.Enabled = false;
                button = (ToolStripButton)this.toolStripMain.Items["buttonSyncDateTime"];
                button.Enabled = false;
                button = (ToolStripButton)this.toolStripMain.Items[TOOLSTRIPBUTTON.buttonStartMonitor];
                button.Enabled = false;
                button = (ToolStripButton)this.toolStripMain.Items[TOOLSTRIPBUTTON.buttonStopMonitor];
                button.Enabled = false;
            }

            // Переходим в дереве на устройство и обновляем данные
            if (this.treeViewMain.SelectedNode ==
                this.treeViewMain.Nodes["NodeRoot"].Nodes["NodeMeasuringDevice"])
            {
                // Это необходимо делать, т.к. если в данный момен выбран нод "NodeMeasuringDevice"
                // и создаётся устройство, то отображение данных созданного устройства в propertygrid не происходит!!! 
                this.treeViewMain.SelectedNode = this.treeViewMain.Nodes["NodeRoot"];
                this.treeViewMain.SelectedNode = this.treeViewMain.Nodes["NodeRoot"].Nodes["NodeMeasuringDevice"];
            }
            else
            {
                this.treeViewMain.SelectedNode = this.treeViewMain.Nodes["NodeRoot"].Nodes["NodeMeasuringDevice"];
            }
            return;
        }