Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Форум

Вы не вошли.

 Поиск | Регистрация | Вход 

#2 Техническая поддержка и выбор оборудования » Разница между E14-440 c ЦАП и без » 24.07.2015 12:49:53

denprox
Ответов: 4

Доброго времени суток! Подскажите пожалуйста, есть ли разница чтения данных с TTL на Е14-440 с ЦАП и без него.

Возникла некоторая проблема. Написали пример программы, с использованием Е14-440 без ЦАП. Все работает. Ставим в ту же самую схему блок с ЦАП на борту, результат начинает плавать в больших диапазонах.

Делаем так:

// состояния цифровых линий
WORD TtlIn;

ULONG CountDI = 0;

ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
		!pModule->TTL_IN(&TtlIn);   // Запрос состояния
		formMain->DI1 = TtlIn;         // Записываем ответ

		if (formMain->DI1!=DI_save){    // Если состояние изменилось
		 DI_save = formMain->DI1;        //Запишем последнее состояние
		 CountDI++;            //Счетчик изменения состояний импульса
		 }
   }

В результате, этот код работает по разному, с блоками, разница между которыми только в наличии ЦАП'а.

#3 Re: Техническая поддержка и выбор оборудования » Компиляция под RAD Studio 2010 » 23.07.2015 09:32:21

Проблему решил таким образом:

if(!Buffer) {MessageBox(Handle,"Не могу выделить память под буфер данных!", "ОШИБКА!!!", MB_OK|MB_ICONINFORMATION); Close(); return;}

#4 Техническая поддержка и выбор оборудования » Компиляция под RAD Studio 2010 » 23.07.2015 08:55:46

denprox
Ответов: 1

Доброго времени суток! Столкнулся с такой проблемой: Пытаюсь перенести проект из Builder 6 в Rad studio 2010 (для прибора Е14-440). С технической стороны все нормально работает, но есть проблемы с сообщениями об ошибках. К примеру у функции

OnLoadUsbDevice(TMessage& Message) есть такие обработчики:

if(!Buffer) {Application->MessageBox("Не могу выделить память под буфер данных!", "ОШИБКА!!!", MB_OK + MB_ICONINFORMATION); Close(); return;}

В Builder 6 ни каких проблем нет. Но в 2010 версии, компилятор ругается:

[BCC32 Error] formMain_Unit.cpp(82): E2034 Cannot convert 'const char *' to 'const wchar_t *'
  Full parser context
    formMain_Unit.cpp(78): parsing: void _fastcall TformMain::OnLoadUsbDevice(TMessage &)

Если поставить перед текстом (const wchar_t*), как того просит компилятор, то вместо русского текста выдаются иероглифы.

Подскажите пожалуйста, что можно сделать в таком случае?

#6 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 03.07.2015 11:05:59

Есть ли возможность заказать готовую прошивку с данной функцией? У нас сроки ограничены, на изучение времени практически нет.

#7 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 03.07.2015 09:51:12

Нашел одну тему на вашем форуме: Счетчики в цифровых линиях внешних модулей

Во втором посте вы написали:

Если речь идёт о цифровых входах, то в Е14-440 потенциально возможно написать "счётчики импульсов" на уровне сигнального процессора ADSP-2185M. Но для этого придётся заняться низкоуровневым программированием Е14-440.

Правильно ли я понимаю, что если реализовать данный счетчик, то на программном уровне не придется ни чего дописывать? Т.е. Е14-440 будет сразу выдавать кол-во импульсов на цифровом входе ?

#8 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 02.07.2015 14:45:28

Ясно. Не подскажите, нет ли каких-то стандартных примеров по подсчету количества импульсов за некоторый промежуток времени (в частности за секунду)?

Опишу немного иначе задачу:
На цифровой вход IN1, который запараллелен с входом синхронизации INT, подается прямоугольный сигнал от тактового генератора. Необходимо посчитать, сколько раз изменится импульс за секунду.

В потоке, в момент сбора/отправки данных делаю запрос :

WORD TtlIn;

!pModule->TTL_IN(&TtlIn);   
DI1 = TtlIn;  

   

Если добавить цикл, вида:

CountDI = 0;

ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
        !pModule->TTL_IN(&TtlIn);   // Запрос состояния
        Form1->DI1 = TtlIn;         // Записываем ответ

        if (Form1->DI1!=DI_save){    // Если состояние изменилось
         DI_save = Form1->DI1;        //Запишем последнее состояние
         CountDI++;            //Счетчик изменения состояний импульса
         }

   }  

То в таком случае, получаем кол-во отчетов, но при этом программа подвисает, при попадании в данный цикл. Плюс идет привязка к системному счетчику, что может выйти боком в будущем.

#10 Re: Техническая поддержка и выбор оборудования » Пример программы с TTL » 01.07.2015 09:59:58

Примеры которые есть на сайте и на диске для E14-440 (ReadData, WriteData...) написаны для ЦАП. Есть ли подобные примеры для АЦП ? Есть ли вообще разница между АЦП и ЦАП, для задач, когда необходимо записать в устройство данные ?

#11 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 30.06.2015 15:35:47

Если упростить приведенный пример выше, для L791 (lcomp), то получится следующее:

ULONG CountDI = 0;
ULONG DI_countSaved[10];
ULONG TimeN;

ASYNC_PAR DI;
IDaqLDevice* pI;

USHORT DI1;

//--------------------------------------------------------------------------------

CountDI = 0;
ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
      TimeN = GetTickCount();
      while(GetTickCount() - TimeN < 10) // считываем состояние в т. 10 мс.
      {
         DI.s_Type = L_ASYNC_TTL_INP; //Для ввода одного отсчета с TTL линий
         pI->IoAsync(&DI);
         DI1 = DI.Data[0]&0x1; // Записываем введенные данные
         
         if (DI1!=DI_save){    // Если состояние изменилось
         DI_save = DI1;        //Запишем последнее состояние
         
         CountDI++;            //Счетчик изменения состояний импульса (кол-во отчетов)
         } 
      }
    
   }
DI_countSaved[pos] = CountDI;    // записываем кол-во отчетов за секунду в массив

Далее еще следуют некоторые расчеты, но меня больше интересует, как будет выглядеть данный пример для E14-440 (lusbapi)

#12 Техническая поддержка и выбор оборудования » Пример программы с TTL » 30.06.2015 15:13:28

denprox
Ответов: 3

Доброго времени суток. Подскажите пожалуйста, где можно посмотреть рабочие примеры по работе с TTL линиями для E14-440 (lusbapi)

Например, как реализовать кнопку Вкл/Выкл  сигала на Входе.

Или подскажите, как будет выглядеть следующий пример от L791 (lcomp), для E14-440 (lusbapi):

IDaqLDevice* pI;
ASYNC_PAR DO;
//-----------------------------------

DO.s_Type = L_ASYNC_TTL_OUT;
DO.Data[0]=DO1|DO2|DO4;
pI->IoAsync(&DO);

//---------------------------------

#13 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 30.06.2015 12:47:04

Постараюсь описать более подробно задачу:

На некотором оборудовании установлен расходомер (водяной счетчик) СГВ-15 БЕТАР.

Необходимо написать программу, которая показывала бы текущий расход воды.
Для определения расхода, необходимо частоту умножить на вес импульса (константа 8,14).

Амплитуда сигнала примерно 5В.
Минимальная длительность импульса 1/3 периода, это ~8 млс
Диапазон измерения примерно от 8 грамм/сек до 200 грамм/сек
Максимальная частота: 0..40 Гц

Данная задача, решалась с помощью приведенного выше примера, на карте L791 (библиотека lcomp). На данный момент, необходимо изменить данный пример под новое оборудование E14-440 (библиотека lusbapi).

#14 Re: Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 26.06.2015 14:19:32

Спасибо за ответ!

Еще такой вопрос:
В старой версии программы для нашего оборудования, с использованием L791 (библиотека lcomp), применялся такой код, для решения выше описанной задачи:

DWORD WINAPI ServiceThread(LPVOID lpParameter)
{
        ASYNC_PAR DI;
        ASYNC_PAR DO;
        USHORT DI_save = 0;
        ULONG i,j;
        double Value;
        ULONG TimeN;
        pos = 0;
        AnsiString str;

        while(true)
        {

        write_log("TTheard : proceed = true");
           ::Sleep(1);

                DO.s_Type = L_ASYNC_TTL_OUT;
                DO.Data[0]=DO1|DO2|DO4;
                pI->IoAsync(&DO);
                i=0;

                try
                {

                   EnterCriticalSection(section_harvest);

                        CountDI = 0;
                        ULONG StartTime = GetTickCount();
                        for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
                        {

                                TimeN = GetTickCount();
                                while(GetTickCount() - TimeN < 10) // считываем состояние в т. 10 мс.
                                {

                                        DI.s_Type = L_ASYNC_TTL_INP;
                                        //DI.Data[0] = 1;
                                        pI->IoAsync(&DI);
                                        DI1 = DI.Data[0]&0x1;

                                        if (DI1!=DI_save){
                                        DI_save = DI1;
                                        CountDI++;
                                        }

                                }

                        }

                                DI_countSaved[pos] = CountDI;    // записываем кол-во отчетов за секунду в массив

Задача состоит в том, чтобы выполнить примерно ту же задачу, средствами Е14-440 (библиотека lusbapi).

Не могли бы вы прокомментировать, на сколько он пригоден для решения данной задачи?

#15 Техническая поддержка и выбор оборудования » E14-440 - вход синхронизации » 26.06.2015 12:16:15

denprox
Ответов: 13

Доброго времени суток! Подскажите пожалуйста, каким образом можно измерить период или частоту внешнего сигнала ? Возможно с использованием входа синхронизации

#18 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 24.06.2015 11:47:20

Есть какой ни будь пример по сбору информации сразу с нескольких каналов ? Например нужно в массив из 10 элементов, записать данные с 28 по 37 каналы?

#19 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 24.06.2015 07:36:00

Тоже разобрался )) Он был прописан, но видимо как то криво. Добавил заново и все заработало!

Спасибо!

#20 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 23.06.2015 14:59:45

Извиняюсь, с этим тоже разобрался )

Проблемы только вот такого характера остались:

[Linker Error] Unresolved external 'GetDllVersion' referenced from ...
[Linker Error] Unresolved external 'CreateLInstance' referenced from ...

Библиотеки подключены, но компилятор не находит функции

#21 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 23.06.2015 14:55:34

С этим уже разобрался, Спасибо!

Сейчас разбираю пример "SynchroInput" для E14-440. Возникла проблема с подключением библиотеки Lusbapi. Пишу *.h файле проекта:

#include "Lusbapi.h"

Но при компиляции все равно пишет, что Lusbapi не найден. Хотя в примере именно так и прописано. При этом пример SynchroInput компилируется без проблем.
Что я мог сделать не так ?

#22 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 23.06.2015 11:39:23

Спасибо! Еще такой вопрос, загрузка управляющей программы выполняется каждый раз при запуске программы или один раз?

#23 Re: Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 19.06.2015 11:16:48

Спасибо! А что можете сказать про  "I_ADC_PCI_COUNT_L791" ?

Пытался в документации найти описание, но так и не нашел ни чего. Что это ?

Используется вот в таком цикле:

for (j=0;j<Sync[I_ADC_PCI_COUNT_L791];j++)
{
   if (i<9)
  {
     Value = ((double) (Data[j]&0x0000ffff));///8/1024*5*25.74;
     Value = ((Value*5000/8192/data->Rizm[i])-data->In[i])/(data->Ik[i]-data->In[i])*(data->Tk[i]-data->Tn[i])+data->Tn[i];
     if (Value > data->Tn[i] && Value < data->Tk[i]) T[i] = Value;
     else T[i] = 0;
 }
  i++;
  if (i>15) i=0;
}

#24 Техническая поддержка и выбор оборудования » Переход от L791 к E14-440 » 18.06.2015 13:46:45

denprox
Ответов: 14

Доброго времени суток! Подскажите пожалуйста, на сколько отличаются принципы общения у данных устройств ? 

Плюс забегая вперед, такой вопрос: какой аналог у " I_ADC_PCI_COUNT_L791" , для E14-440 ?

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск