//---------------------------------------------------------------------------- /// <summary> /// Метод генерирует серийный номер устройства на основе вводимых данных /// </summary> /// <param name="type">Тип устройства NGK</param> /// <param name="year">Год выпуска, две последних цыфры</param> /// <param name="SerialNumber">Номер по порядку за год</param> /// <returns></returns> private UInt64 SerialNumberGenerator( TYPE_NGK_DEVICE type, int year, int serialNumber) { // XX.XX.XX.XXXX // | | | |_____ Номер по порядку в соответствии с типом и подтипом устройства выпущенных за указанный год // | | |________ Год выпуска изделия 0..99 // | |___________ Под тип устройства NGK // |______________ Тип устройства NGK if ((year > 99) || (year < 1)) { throw new ArgumentOutOfRangeException("Year", "Выходит за границы допустимого диапазона 1...99"); } if ((serialNumber > 9999) || (serialNumber < 0)) { throw new ArgumentOutOfRangeException("serialNumber", "Выходит за границы допустимого диапазона 0...9999"); } UInt64 sn = 0; sn = sn + (UInt64)serialNumber; sn = sn + (((UInt64)year) * 10000); sn = sn + (((UInt64)type) * 1000000); return(sn); }
//---------------------------------------------------------------------------- public void Read_IR_TypeOfDevice( ref Modbus.OSIModel.ApplicationLayer.Master.Device host, out OperationResult error, Byte addressSlave, out TYPE_NGK_DEVICE typeOfDevice) { Modbus.OSIModel.Message.Result result; UInt16[] registers; if (host == null) { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.CONNECTION_ERROR, "Подключение к сети не создано"); } else { if (host.DataLinkObject.IsOpen()) { result = host.ReadInputRegisters(addressSlave, BI_ADDRESSES_OF_INPUTREGISTERS.TypeOfDevice, 1, out registers); if (result.Error == Modbus.OSIModel.ApplicationLayer.Error.NoError) { try { typeOfDevice = (TYPE_NGK_DEVICE)Enum.Parse(typeof(TYPE_NGK_DEVICE), registers[0].ToString()); error = new OperationResult(OPERATION_RESULT.OK, String.Empty); } catch { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.UNKNOWN_DEVICE, String.Format( "Устройство вернуло код неизвестного типа устройства: {0}", registers[0].ToString())); } } else { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.FAILURE, result.Description); } } else { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.CONNECTION_ERROR, "Соeдинение создано, но не открыто"); } } return; }
//------------------------------------------------------------------------------------------------------ /// <summary> /// Конструктор /// </summary> /// <param name="typeOfDevice">Тип устройства</param> public MeasuringPeriodMainPowerControl(TYPE_NGK_DEVICE typeOfDevice) { InitializeComponent(); switch (typeOfDevice) { case TYPE_NGK_DEVICE.BI_MAIN_POWERED: { comboBoxMode.Items.Clear(); comboBoxMode.Items.Add("Указанный период"); comboBoxMode.Items.Add("Измерять постоянно"); comboBoxMode.Items.Add("Ответ по запросу"); comboBoxMode.SelectedItem = "Указанный период"; numericUpDownValue.Minimum = 1; numericUpDownValue.Maximum = 0x93A80; numericUpDownValue.Increment = 1; break; } case TYPE_NGK_DEVICE.BI_BATTERY_POWER: { comboBoxMode.Items.Clear(); comboBoxMode.Items.Add("Указанный период"); //comboBoxMode.Items.Add("Измерять постоянно"); comboBoxMode.Items.Add("Ответ по запросу"); comboBoxMode.SelectedItem = "Указанный период"; numericUpDownValue.Minimum = 0x0A; numericUpDownValue.Maximum = 0x93A80; numericUpDownValue.Increment = 1; break; } case TYPE_NGK_DEVICE.UNKNOWN_DEVICE: { throw new Exception("Невозможно создать контрол, неизвестное устройство"); } default: { throw new Exception("Невозможно создать контрол, неизвестное устройство"); } } }
//---------------------------------------------------------------------------- private void comboBoxDeviceType_SelectedIndexChanged( object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; String deviceName; deviceName = (String)cb.SelectedItem; switch (deviceName) { case "Неизвестное устройство": { _TypeDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; break; } case "Устройство БИ(У)-01": { _TypeDevice = TYPE_NGK_DEVICE.BI_BATTERY_POWER; break; } case "Устройство БИ(У)-00": { _TypeDevice = TYPE_NGK_DEVICE.BI_MAIN_POWERED; break; } default: { throw new Exception("Получен список устройств не поддерживаемых в данной версии ПО"); } } //_TypeDevice = // (TYPE_NGK_DEVICE)Enum.Parse(typeof(TYPE_NGK_DEVICE), // (String)cb.SelectedItem); }
//---------------------------------------------------------------------------- public void Read_IR_TypeOfDevice( ref Modbus.OSIModel.ApplicationLayer.Master.Device host, out OperationResult error, out TYPE_NGK_DEVICE typeOfDevice) { Modbus.OSIModel.Message.Result result; //String msg; UInt16[] registers; result = host.ReadInputRegisters(AddressSlave, BI_ADDRESSES_OF_INPUTREGISTERS.TypeOfDevice, 1, out registers); if (result.Error == Modbus.OSIModel.ApplicationLayer.Error.NoError) { try { typeOfDevice = (TYPE_NGK_DEVICE)Enum.Parse(typeof(TYPE_NGK_DEVICE), registers[0].ToString()); error = new OperationResult(OPERATION_RESULT.OK, String.Empty); } catch { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.UNKNOWN_DEVICE, String.Format( "Устройство вернуло код неизвестного типа устройства: {0}", registers[0].ToString())); } } else { typeOfDevice = TYPE_NGK_DEVICE.UNKNOWN_DEVICE; error = new OperationResult(OPERATION_RESULT.FAILURE, result.Description); } return; }
//---------------------------------------------------------------------------- public FormInitDevice(TYPE_NGK_DEVICE type) { InitializeComponent(); TypeOfDevice = type; }
//---------------------------------------------------------------------------- /// <summary> /// Метод генерирует серийный номер устройства на основе вводимых данных /// </summary> /// <param name="type">Тип устройства NGK</param> /// <param name="year">Год выпуска, две последних цыфры</param> /// <param name="SerialNumber">Номер по порядку за год</param> /// <returns></returns> private UInt64 SerialNumberGenerator( TYPE_NGK_DEVICE type, int year, int serialNumber) { // XX.XX.XX.XXXX // | | | |_____ Номер по порядку в соответствии с типом и подтипом устройства выпущенных за указанный год // | | |________ Год выпуска изделия 0..99 // | |___________ Под тип устройства NGK // |______________ Тип устройства NGK if ((year > 99) || (year < 1)) { throw new ArgumentOutOfRangeException("Year", "Выходит за границы допустимого диапазона 1...99"); } if ((serialNumber > 9999) || (serialNumber < 0)) { throw new ArgumentOutOfRangeException("serialNumber", "Выходит за границы допустимого диапазона 0...9999"); } UInt64 sn = 0; sn = sn + (UInt64)serialNumber; sn = sn + (((UInt64)year) * 10000); sn = sn + (((UInt64)type) * 1000000); return sn; }