|
|
Buffer в структуре IO_REQUEST_LUSBAPI
в мануале написано что данные в буфере распологаются покадрово. Причем это зависит от количества логических каналов в ControlTable. нашел константу MAX_CONTROL_TABLE_LENGTH_E140 равна 128.
Я немного переделал пример SynchroInput(builder c++), сделал там Chart вместо PaintBox :
//-- -------------------------------------------------------------------------
// отобразим все графики
//-- -------------------------------------------------------------------------
void __fastcall TChannelThread::RedrawViewer(void)
{
DWORD i;
MainForm->View->Series[0]->Clear();
for(i = 0x0; i < PointsToRead; i++) {
MainForm->Buffer[i] = ReadBuffer[i];
MainForm->View->Series[0]->AddY(ReadBuffer[i]);
}
}
View - это Chart.
Вот так выглядят получаемые данные:
[img][url]http://www.imagepost.ru/images/730/1.png[/img][/url]
http://www.imagepost.ru/?v=730/1.png
на синусойду не очень похожа...если честно не совсем понял принцип кадров. Если можно расскажите поподробнее...
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
не понятно почему она такая широкая...
то есть как я понял кадр это последовательность чисел , н-р 6340, 3456, 2332, 4343 ...
6340 для 1 канала
3456 для 2 канала
2332 для 3 канала
4343 для 4 канала
...
а как определить сколько по стандарту каналов тогда? мне например надо 4 серии сделать для 4 каналов. Поправьте ,Если не так понял...
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
Если про E14-140 речь идет, то сразу определите, к какому контакту контакту разъёма что подключаете, и что у Вас за источник сигнала. Подобные картинки получаются, например, при неправильном подключении...
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
Текущий размер кадра задается параметром ChannelsQuantity. Например, если ChannelsQuantity = 2, то при Вашей последовательности чисел получаем:
6340 отсчет с 1ого канала для 1ого кадра;
3456 отсчет со 2ого канала для 1ого кадра;
2332 отсчет с 1ого канала для 2ого кадра;
4343 отсчет со 2ого канала для 2ого кадра;
и т.д. по циклу...
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
Сергей , а вот в чем разница между виртуальными каналами и физическими? То есть логических каналов может быть 128. А на приборе 32 посути, 16 инвертирующих и 16 неинвертирующих.
Для эксперимента на 1 канала подвесил резистор и по логике должна получиться прямая линия, но получаю шум , вот код
//-- -------------------------------------------------------------------------
// отобразим все графики
//-- -------------------------------------------------------------------------
void __fastcall TChannelThread::RedrawViewer(void)
{
DWORD i;
int count =0;
double* tmpBuf;
// выделим память для Viewer
tmpBuf = new double[ChannelPoint * ChannelsQuantity];
memset(tmpBuf, 0x0, sizeof(double)*ChannelPoint * ChannelsQuantity);
MainForm->View->Series[0]->Clear();
MainForm->View->Series[1]->Clear();
MainForm->View->Series[2]->Clear();
MainForm->View->Series[3]->Clear();
for(i = 0x0; i < PointsToRead/8; i++) {
MainForm->Buffer[i] = ReadBuffer[i];
tmpBuf[i]=ReadBuffer[i];
MainForm->View->Series[0]->AddY(ReadBuffer[i]);
//MainForm->View->Series[1]->AddY(ReadBuffer[i+1]);
//MainForm->View->Series[2]->AddY(ReadBuffer[i+2]);
//MainForm->View->Series[3]->AddY(ReadBuffer[i+3]);
//MainForm->Memo1->Lines->Add(IntToStr(MainForm->Buffer[i]));
//count++;
i+=128;
}
// MainForm->View->Series[0]->AddArray(tmpBuf, count);
//MainForm->View->Series[1]->AddY(ReadBuffer[i+1]);
//MainForm->View->Series[2]->AddY(ReadBuffer[i+2]);
//MainForm->View->Series[3]->AddY(ReadBuffer[i+3]);
}
я пытаюсь под себя переделать вашу прогу SynhroThread, там ChannelsQuantity =4 я оставил также... Не менял...
i+=128; надо делать? чтобы перескочить 128 логических каналов? Заранее извиняюсь за то что не догоняю)
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
на LGRAPH проверил там прямая линия получается, то есть резистор нормально висит.
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
а-а-а наверно 1 канала надо было сделать ChannelsQuantity=1... так как другие не заземлены, то так шум выводил...
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
1. Не совсем понятно какое именно изделие Вы используете.
2. Вместо понятия //'виртуальный//' мы применяем термин логический канал. Логический канал включает в себя номер физического канала модуля, а также, как правило, используемый для этого канала диапазон входного напряжения. Массив этих лог.каналов формирует управляющую таблицу (или
кадр отсчётов), которая и определяет циклическую последовательноть опроса АЦП. Всю эту информацию можно найти в руководстве программиста, в частности, в параграфе под названием //'Логический номер канала АЦП//'. Для примера управляющая таблица может быть такой {0x0, 0xA, 0x5, 0x2, 0x1, 0x0, 0x5 } и ChannelsQuantity = 4. Это означает, что размер кадра равен 4 и для оцифровки модулем будут использованы только первые 4 логических канала. При этом последовательность опроса физических каналов АЦП будет такой: 1ый канал, 11ый канал, 6ой канал, 3ий канал, 1ый канал, 11ый канал ... и т.д. по циклу.
3. Ваш цикл для ChannelsQuantity = 4 можно попробовать записать, например, так:
for(i = 0x0; i < PointsToRead/ChannelsQuantity; i++)
{
MainForm->View->Series[0]->AddY(ReadBuffer[0x0 + i*ChannelsQuantity]);
MainForm->View->Series[1]->AddY(ReadBuffer[0x1 + i*ChannelsQuantity]);
MainForm->View->Series[2]->AddY(ReadBuffer[0x2 + i*ChannelsQuantity]);
MainForm->View->Series[3]->AddY(ReadBuffer[0x3 + i*ChannelsQuantity]);
}
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
Сергей, спасибо.
Хотелось бы уточнить. для модуля Е14-140М, в примерах для lusbapi33 есть пример SynchroInput,
Там в момент инициализации АЦП в методе(событии) FormShow, есть код :
// формируем управляющую таблицу логических каналов
for(i = 0x0; i < ap.ChannelsQuantity; i++) ap.ControlTable[i] = (WORD)(i |
(IsCommonGnd << 0x5)/*общая земля*/ |
(0x1 << 0x6)/*усиление 4*/);
он формирует эту таблицу ControlTable.
Можете пояснить что значит (0x1 << 0x6)/*усиление 4*/ ?
если коэффициент усиления 1 нужен ,то как?
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
1. Всё-таки неплохо бы было бы почитать руководство пользователя (http://www.lcard.ru/download/e14_140_pr … _guide.pdf). И в частности, параграф 3.2.3. //'Логический номер канала АЦП//'.
2. Если нужен коэффициент усиления равный 1, то пишем так:
for(i = 0x0; i < ap.ChannelsQuantity; i++) ap.ControlTable[i] = (WORD)(i);
|
|
|
Re: Buffer в структуре IO_REQUEST_LUSBAPI
Сергей, спасибо. Понял. 0x1 << 0x6 сдвигаем и получаем 01000000 то естьпервые биты 01 то есть 4 коэффициент усиления, спасибо
|