public void LoadDeviceInfo() { DeviceProp.Clear(); var e2020 = UnityConfig.GetConfiguredContainer().Resolve<IE2010>(); if(e2020.Inited == false) e2020.Init(); moduleDescription = e2020.GET_MODULE_DESCRIPTION(); //ADC var adc = moduleDescription.Adc; AddParameter("Active", adc.Active.ToString()); AddParameter("Название модуля", adc.Name); AddParameter("Комментарий", adc.Comment); AddParameter("Калибровочные коэфициенты", ""); int i = 0; foreach (var coeff in adc.ScaleCalibration) { AddParameter(" Калибр. коэфициент " + i, $"{coeff:N2}"); i++; if (i > 12) break; } AddParameter("Коэфициенты смещения", ""); i = 0; foreach (var coeff in adc.OffsetCalibration) { AddParameter(" Смещ. коэфициент " + i, $"{coeff:N2}"); i++; if (i > 12) break; } //interface var linterface = moduleDescription.Module; AddParameter("Коменнатарий", linterface.Comment, DevicePropertyGroup.Interface); AddParameter("Имя компании", linterface.CompanyName, DevicePropertyGroup.Interface); //Module var module = moduleDescription.Module; AddParameter("Имя устройства", module.DeviceName, DevicePropertyGroup.Module); AddParameter("Ревизия", Convert.ToChar(module.Revision).ToString(), DevicePropertyGroup.Module); AddParameter("Серийный номер", (module.SerialNumber), DevicePropertyGroup.Module); AddParameter("Модификация", module.Modification.ToString(), DevicePropertyGroup.Module); //Module var mcu = moduleDescription.Mcu; }
private static void SetDefaultAdcParams(ref IE2010 mE2010, M_MODULE_DESCRIPTION_E2010 moduleDescription) { ap = mE2010.GET_ADC_PARS(); int i, j; // установим желаемые параметры работы АЦП if ((char)moduleDescription.Module.Revision == 'A') ap.IsAdcCorrectionEnabled = 0; // запретим автоматическую корректировку данных на уровне модуля (для Rev.A) else ap.IsAdcCorrectionEnabled = 1; // разрешим автоматическую корректировку данных на уровне модуля (для Rev.B и выше) ap.SynchroPars.StartSource = (ushort)INT_ADC_START.INT_ADC_START_E2010; // внутренний старт сбора с АЦП // ap.SynchroPars.StartSource = INT_ADC_START_WITH_TRANS_E2010; // внутренний старт сбора с АЦП с трансляцией // ap.SynchroPars.StartSource = EXT_ADC_START_ON_RISING_EDGE_E2010; // внешний старт сбора с АЦП по фронту ap.SynchroPars.SynhroSource = (ushort)INT_ADC_CLOCK.INT_ADC_CLOCK_E2010; // внутренние тактовые импульсы АЦП // ap.SynchroPars.SynhroSource = INT_ADC_CLOCK_WITH_TRANS_E2010; // внутренние тактовые импульсы АЦП с трансляцией ap.SynchroPars.StartDelay = 0x0; // задержка начала сбора данных в кадрах отсчётов (для Rev.B и выше) ap.SynchroPars.StopAfterNKadrs = 0x0; // останов сбора данных через заданное кол-во кадров отсчётов (для Rev.B и выше) ap.SynchroPars.SynchroAdMode = (ushort)E2010_SYNC.NO_ANALOG_SYNCHRO_E2010; // тип аналоговой синхронизации (для Rev.B и выше) // ap.SynchroPars.SynchroAdMode = ANALOG_SYNCHRO_ON_HIGH_LEVEL_E2010; ap.SynchroPars.SynchroAdChannel = 0x0; // канал аналоговой синхронизации (для Rev.B и выше) ap.SynchroPars.SynchroAdPorog = 0; // порог аналоговой синхронизации в кодах АЦП (для Rev.B и выше) ap.SynchroPars.IsBlockDataMarkerEnabled = 0x0; // маркирование начала блока данных (удобно, например, при аналоговой синхронизации ввода по уровню) (для Rev.B и выше) ap.ChannelsQuantity = MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010; // кол-во активных каналов // формируем управляющую таблицу ap.ControlTable = new ushort[(ushort)MODULE_CONSTANTS.MAX_CONTROL_TABLE_LENGTH_E2010]; for (i = 0x0; i < ap.ChannelsQuantity; i++) { ap.ControlTable[i] = (ushort)i; } // частоту сбора будем устанавливать в зависимости от скорости USB // частота работы АЦП в кГц const double AdcRate = 1000.0; ap.AdcRate = AdcRate; int DataStep; // частота работы АЦП в кГц var usbSpeed = mE2010.GetUsbSpeed(); if (usbSpeed == LusbSpeed.USB11_LUSBAPI) { ap.InterKadrDelay = 0.01; // межкадровая задержка в мс DataStep = 256 * 1024; // размер запроса } else { ap.InterKadrDelay = 0.0; // межкадровая задержка в мс DataStep = 1024 * 1024; // размер запроса } // сконфигурим входные каналы ap.InputRange = new ushort[MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; ap.InputSwitch = new ushort[MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; for (i = 0x0; i < (ushort)MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010; i++) { ap.InputRange[i] = (ushort)ADC_INPUTV.ADC_INPUT_RANGE_3000mV_E2010; // входной диапазоне 3В ap.InputSwitch[i] = (ushort)ADC_INPUT.ADC_INPUT_SIGNAL_E2010; // источник входа - сигнал } // передаём в структуру параметров работы АЦП корректировочные коэффициенты АЦП ap.AdcOffsetCoefs = new double[MODULE_CONSTANTS.ADC_INPUT_RANGES_QUANTITY_E2010, MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; ap.AdcScaleCoefs = new double[MODULE_CONSTANTS.ADC_INPUT_RANGES_QUANTITY_E2010, MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; for (i = 0x0; i < MODULE_CONSTANTS.ADC_INPUT_RANGES_QUANTITY_E2010; i++) for (j = 0x0; j < MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010; j++) { // корректировка смещения ap.AdcOffsetCoefs[i, j] = moduleDescription.Adc.OffsetCalibration[j + i * MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; // корректировка масштаба ap.AdcScaleCoefs[i, j] = moduleDescription.Adc.ScaleCalibration[j + i * MODULE_CONSTANTS.ADC_CHANNELS_QUANTITY_E2010]; } // передадим требуемые параметры работы АЦП в модуль mE2010.SET_ADC_PARS(ap, DataStep); }