Электронные технологии и метрологические системы Главная Форум Поиск Карта сайта Написать
Электронные технологии и метрологические системы   
Тел./факс: (495) 228-01-11 (многоканальный); E-mail: info@zetms.ru   
Электронные технологии и метрологические системы ZETLab
 
 Главная 
 Продукция 
 Поддержка 
 Предприятие 
 Прайс лист 
 Контакты 
 Карта сайта 
ZETServer
Grid
Gramma
PlotterXYZ
Polar
Scale
ColScale
GreenScale
TextDisp
ExtEditBox
Kompas
Unit
ZADC
DSP
Примеры программирования


Online-консультанты
388828835 - Мария
627723417 - Никита
397652821 - Елена

Приглашаем на курсы обучения (20-22 сентября 2011 года)

Форум

Скидка ВУЗам!

Доставка по всему миру!

Удалённое управление прибором.

Каталог продукции.

Запрос звонка

Наш телефон

Наш мобильный телефон

Наш факс


E:mail

Анализатор спектра a17-u8. Срок поставки 2 недели.

Анализатор спектра a17-u2 с ноутбуком.








Главная / Продукция / Программное обеспечение / ZETLab Studio - средства разработки виртуальных приборов Версия для печати Версия для печати

Примеры использования модуля Unit


Программы SpectrTest, написанные на разных языках программирования, демонстрируют совместную работу нескольких ActiveX компонентов,  входящих в состав средств разработчика  ZETLab Studio.

Используемые компоненты:

  • GridGL.ocx;
  • Unit.ocx;
  • программа “Узкополосный спектр”.

Примеры показывают, как обеспечить взаимодействие между компонентами на языках программирования C++, C# и Basic в среде разработки VS 2005.

В каждой программе реализован следующий алгоритм:

  1. Unit запускает программу Spectr.exe.
  2. Далее, порционно (по готовности Spectr.exe), Unit считывает массив, содержащий частотную сетку и спектр.
  3. В зависимости от количества данных в массиве настраивается сетка GridGL.
  4. С помощью GridGL отображается график частотного спектра.

Результат работы каждой программы будет одинаков, вне зависимости от выбранного языка программирования. На рисунке 1 справа представленно окно непосредственно программы SpectrTest, а слева - окно запущенной из нее программы Spectr.exe.

Рисунок 1

Программа SpectrTest на Visual Studio C++

Ниже приведен фрагмент программы SpectrTest на VS C++

При создании программы на форму диалогового окна (рисунок 2) были добавлены компоненты GridGL.ocx для отображения спектра, Unit.ocx для обеспечения запуска и управления программой Spectr.exe и кнопка Button, для запуска пользователем программы Spectr.exe.

Рисунок 2

// SpectrTestDlg.h : header file

public:

      CGridglctrl1 m_grid;         // компонент GridGL 

      CUnitctrl1 m_unit;           // компонент Unit 

      CButton m_startBtn;          // кнопка "Запустить "Spectr.exe"

public:

      // фукнция, обрабатывающая нажатие кнопки "Запустить "Spectr.exe" 

      afx_msg void OnBnClickedButton1();

 

      //функция, считывающая информацию с программы, запущенной через Юнит 

      void ReadyUnitctrl1(long param);

 

      //смотрим, не было ли ошибки при соединении с программой 

      void CheckActivateError(long error);

 

      //переменная, в которой хранится размер массива, получаемого от программы, запущеной через Юнит

      int m_oldArraySize;

 

      //запрос размера массива

      long RequestDataArraySize();

 

      //запрос массива, содержащего сетку частот

      void RequestFreq();

 

public:

 

      //структура, содержащая флаги о запросах

      struct flagsS

      {

            //конструктор по умолчанию

            flagsS::flagsS()

            {

                   m_bRequestFreq = false;

                   m_bRequestSpectr = false;

            }

            //флаги

            bool m_bRequestFreq;    //запрос массива сетки частот

            bool m_bRequestSpectr;  //запрос коэффициентов спектра

      } flags;

 

// SpectrTestDlg.cpp : implementation file

 

// обработка нажатия кнопки "Запустить "Spectr.exe"

void CSpectrTestDlg::OnBnClickedButton1()

{

      //делаем кнопку запуска неактивной

      m_startBtn.EnableWindow(0); 

 

      //проводим инициализацию Юнита

      m_unit.InitUnit();

      //запускаем программу "спектральный анализ"

      long error = m_unit.Activate(L"Spectr");

      //смотрим, не было ли ошибки при соединении с программой

      CheckActivateError(error);

      //немного подождем, пока запустится программа

      Sleep(500);

      //сдвигаем окно программы в левый верхний угол экрана

      m_unit.MoveUnit(0,0);

      //посылаем команду Юниту на запрос массива, содержащего сетку частот

      RequestFreq();

}

//смотрим, не было ли ошибки при соединении с программой

void CSpectrTestDlg::CheckActivateError(long error)

      switch (error)

      {

      case 0:

            //все нормально, соединение есть

            break;

      case -1:

            MessageBox(L"Нет свободного места для подключения к серверу программ Unit (слишком много программ подключено к серверу Unit)");

            break;

      case -2:

            MessageBox(L"Нет свободного места для подключения к серверу программ Unit

(слишком много программ подключено к серверу Unit)");

            break;

      case -4:

            MessageBox(L"не запускается программа Spectr.exe (нет на диске, не та версия)");

            break;

      case -5:

            MessageBox(L"Программа не проходит инициализацию с сервером программ Unit (мало оперативной памяти или дискового пространства)"); 

            break;

      default: break;

      }

}

//запрос массива, содержащего сетку частот

void CSpectrTestDlg::RequestFreq()

{

      m_unit.SetParam(6,0);

      //ставим флаг запроса сетки частот

      flags.m_bRequestFreq = true;

      flags.m_bRequestSpectr = false;

}

 

//функция, считывающая информацию с программы, запущенной через Юнит

void CSpectrTestDlg::ReadyUnitctrl1(long param)

{

      //узнаем размер массива данных

      long arraySize = RequestDataArraySize();

 

      //смотрим, какая информация к нам пришла

 

      //объявляем временные переменные

      long size;

      float* data = new float[arraySize]; //создаем динамический массив

      long parametr;

 

      //читаем данные, поступившие с программы Spectr.exe

      m_unit.Read(&size,data,&parametr);

 

      //если стоит флаг о запросе четки частот, то

      //в предыдущей строчке (m_unit.Read) мы прочитали сетку частот

      if (flags.m_bRequestFreq == true)

      {

            //сразу же сбрасываем флаг

            flags.m_bRequestFreq = false;

 

            //теперь необходимо выставить параметры координатной сетки компонента GridGL.ocx

            m_grid.SetSize(arraySize);

            m_grid.SetNumVisiblePoints(arraySize);

 

            //выставляем параметры отображения по оси X

            m_grid.SetXfirst(data[0]);               //значение в начале координатной сетки

            m_grid.SetXend(data[arraySize-1]);//значение в конце координатной сетки

 

            //выставляем текущую область видимости по оси Х

            m_grid.SetMathlx(data[0]);               //Левая граница отображения данных

            m_grid.SetMathdx(arraySize-1);     //Длина отображения данных

            //посылаем команду Юниту на запрос массива, содержащего спектр

            m_unit.SetParam(7,0);

            //ставим флаг запроса спектра

            flags.m_bRequestSpectr = true;

      } else

      {

            //если размер вновь пришедшего массива отличается от размера предыдущего массива,

            //значит надо подстроить координатную сетку под новый размер

            //(это может быть если вы изменили настройки Spectr.exe в ручную, а не через Юнит)

            if (m_oldArraySize != arraySize)  

            {

                  m_oldArraySize = arraySize;

                  RequesrFreq();

            }

            else

                  //если же пришел спектр, то просто отрисовываем его на графике

                  m_grid.Paint(data);

      }

 

      //поскольку массив динамический, то необходимо его удалить

      delete []data;

}

 

//запрос размера массива, передаваемого от запущенной программы Spectr.exe

long CSpectrTestDlg::RequestDataArraySize()

{

      long size;

      float data;

      long parametr;

      m_unit.Read(&size,NULL,&parametr);  

      return size;

}


В любой части настоящего сайта могут иметься неточности и технические ошибки. В содержание могут периодически вноситься изменения и/или поправки.

Россия, 124482, Москва, Зеленоград, Савелкинский проезд, дом 4, 21 этаж, офис 2101. Схема проезда.
Тел.: (495) 228-01-11 (многоканальный); Факс: (495) 228-01-11; E-mail: info@zetms.ru, sale@zetms.ru.
GPS координаты: долгота: 37°13′2.9″ в. д. (37.217473), широта: 55°59′27.77″ с. ш. (55.991048)






     
Главная | Продукция | Поддержка | Предприятие | Контакты | Карта сайта | Прайс-лист | Старый сайт | www.zetlab.ru | www.sigmausb.ru