• Автор
    Тема
  • #50264

    Виталий К.
    Участник

    1. Исходя из блок схемы в 230-м модуле максимальная частота опроса каждого одного канала
    зависит от количества включенных каналов, это так? Если зависит то это означает что
    каналы опрашиваются не синхронно?

    2. Если имеются несколько 230-х модулей, каким образом можно их синхронизировать
    (одновременное начало сбора данных и синхронный опрос)?

    3. Вопрос по работе с Zadc.dll. Что будет в случае если необходимая для помещения в буфер
    (полученный с помощью ZGetBufferADC) порция данных размером больше области оставшейся до конца буфера?

    4. Количество включенных каналов можно получить с помощью ZGetNumberInputADC. А каким образом можно
    узнать номера включенных каналов?

Просмотр 15 ответов - с 1 по 15 (всего 34)
  • Автор
    Ответы
  • #50265

    Менеджер ZETLab
    Хранитель

    Здравствуйте, Виталий!
    1. Частота дискретизации АЦП в ZET 230 не зависит от количества включенных каналов, соответственно, сколько бы ни было включено каналов, данные опрашиваются всегда синхронно.
    2. Синхронизовать модули ZET 230 можно через цифровой порт этих устройств. При этом одно из устройств будет мастером, а остальные слейвом. Кто мастер, а кто слейв настраивается через «Диспетчер устройств» на вкладке «Синхронизация». При таком подходе цифровые порты устройств должны быть физически соединены. Более подробно написано здесь.
    3) Поскольку буфер циклический, то указатель на текущий элемент заполнения буфера просто перейдет в начало и все продолжется.
    4) Узнать номера включенных каналов можно в цикле по всем каналам функцией ZGetInputADC. Для включенных каналов в параметре enable будет возвращаться значение 1, а для выключенных 0.
    Удачи!

    #50266

    Виталий К.
    Участник

    Спасибо!
    Только по 3-му вопросу, осталось не понятным, часть данных будет записана в конце буфера, а часть в начале или же указатель перейдет на начало и данные полностью запишутся начиная с 0-го адреса?

    #50267

    Менеджер ZETLab
    Хранитель

    Здравствуйте, Виталий!
    Часть данных запишется в конец буфера, а оставшаяся часть в начало буфера.
    Удачи!

    #50268

    Виталий К.
    Участник

    Здравствуйте!
    Для работы с модулями через библиотеку Zadc.dll используются константы typeDevice, определяющие тип устройства. (Например в функции ZOpen(typeDevice, numberDSP); ).
    Не подскажете число typeDevice для 230-го модуля?

    #50270

    Менеджер ZETLab
    Хранитель

    Добрый день!
    1)typeDevice для 230-го модуля равен 17
    2)В документе ZETLabStudio.pdf в главе 12 содержится информация по интересующему вас вопросу.
    Документ поставляется на дисках к приборам или в Doc.rar на ftp находится всегда последняя версия.

    #50271

    Виталий К.
    Участник

    Добрый день. Есть код, основанный на Вашем с++ примере, который нормально читает данные с 210-го модуля (подключается
    по USB), при попытке использования этого же кода для чтения с 230-го модуля(подключение по Ethernet). При этом единственное
    изменение в коде — замена типа устройства с 10 на 17.

    В наличии 3 библиотеки(версия 2012.9.3.0 идет с ПО ZetLab), функция ZOpen возвращает разные значения в зависимости
    от передаваемого ей типа устройства (10 для 210 модуля, 17 — для 230-го)см. таблицу:

    Версия длл Тип устройства Результат ZOpen
    2012.9.3.0 10 0xA00
    2012.9.3.0 17 0xC00

    2011.12.2.0 10 0 (OK)
    2011.12.2.0 17 0x900

    5.1.0.0 10 0 (OK)
    5.1.0.0 17 0x900

    Т.е. ни одна из длл не работает с 230-м модулем, подключенным по Ethernet. Жду помощи.
    версия ПО ZetLab — 06.09.2012
    Windows XP SP3

    #50272

    Менеджер ZETLab
    Хранитель

    Добрый день!
    Ошибка 0xA00 — устройство с данным numberDSP не подключено (надо проверить значение numberDSP — для Ethernet оно скорее всего начинается с номера 67)
    Ошибка 0xC00 (для 230) это ошибка несовпадения версий

    #50273

    Виталий К.
    Участник

    Спасибо за разъяснения. Действительно, для Ethernet numberDSP начинается с 67.

    #50274

    Менеджер ZETLab
    Хранитель

    Добрый день. Никак не можем разобраться с синхронизацией двух (и более) 230-х модулей. Есть необходимость получать данные с всех каналов двух модулей синхронно (т.е. отсчеты должны сниматься одновременно с каналов обоих модулей).
    Пытаемся читать самописной программой (которая функционально собственно почти полностью содрана с Вашего примера)
    При установке режимов ведущий и ведомый, соединения 8-го пина цифрового порта и подаче на все каналы синусоиды в 1000 Гц частотой:
    1) снимаемые отсчеты стартуют не синхронно (возможно тут необходимо учитывать порядок вызова ZStartADC для ведущего и ведомого модулей, подскажите как тут быть)
    2) по характеру снимаемых с двух модулей синусоид видно, что частота дискретизации у них немного разная (в следствии чего синусоиды, построенные только по отсчетам то сходятся то расходятся с большим периодом)
    Как решение этих проблем вижу установку одного из модулей «Задатчиком синхронизации», и организация дискретизации с одной частотой. Но в документе ZET 2xx Base.pdf в п.4.2.3 есть описание старого интерфейса настройки, а в новом пункта «Задатчик синхронизации» нет.
    Заранее спасибо за ответ.

    #50275

    Менеджер ZETLab
    Хранитель

    Добрый день!
    Единственное, что нужно, чтобы устройства все были одного типа.
    1)Порядок вызова ZStartADC: сначала запускаются ведомые устройства (в режиме ожидания внешнего сигнала запуска), затем запускается ведущее устройство, которое подает сигнал ведомым.
    2)Соединять нужно несколько ножек. Их функции описаны:
    в пункте 4.2.3 описана цифровая ножка 8 как источник управления — то есть это сигнал внешнего запуска. Помимо этого в пп. 4.2.3.1 и 4.2.3.2 описаны еще цифровые ножки 7 и 6 — по ним передается внешняя частота дискретизации АЦП и ЦАП.
    Если используется Диспетчере устройств, то во вкладке «Синхронизация» выставить в задатчике флажок Ведущий, а в остальных — Ведомый
    3) Настройка синхронизации по цифровому порту:
    Код
    // проверка значения err после каждого вызова опущена для краткости
    long err;

    // настройка задатчика синхронизации
    err = ZSetEnableExtStartADC(typeDSP, numberDSP, 1);
    err = ZSetEnableExtFreqADC(typeDSP, numberDSP, 1);
    err = ZSetMasterSynchr(typeDSP, numberDSP, 1);

    // получаем частоту с задатчика
    double freq;
    err = ZGetExtFreqADC(typeDSP, numberDSP, &freq);

    // настройка ведомых устройств
    err = ZSetEnableExtStartADC(typeDSP, numberDSP, 1);
    err = ZSetEnableExtFreqADC(typeDSP, numberDSP, 1);
    err = ZSetExtFreqADC(typeDSP, numberDSP, freq);
    err = ZSetMasterSynchr(typeDSP, numberDSP, 0),

    потом ZStartADC в указанном порядке. Вот такой пример должен работать.
    Сообщите еще, пожалуйста, какой пример Вы используйте?

    #50276

    Виталий К.
    Участник

    Используемый пример — Пример работы с драйвером с использованием библиотеки ZADC.dll. Программа написана на Microsoft Visual С++ 6.0. со страницы Программирование с вашего сайта. Т.е. с этого адреса https://www.zetms.ru/support/programming/index.php

    #50277

    Виталий К.
    Участник

    Описание приведенных Вами функций отсутствует в имеющемся в примере модуле Zadc_int.h. После внесения их в *.h-файл, линкер выдает unresolved external symbol. Скажите, как у Вас можно получить актуальные версии Zadc_int.h и Zadc.lib. Если не трудно можете выслать мне на адрес k1981ua@mail.ru
    С уважением, Виталий.

    #50278

    Менеджер ZETLab
    Хранитель

    Добрый день!
    Файлы высланы.

    #50279

    Виталий К.
    Участник

    Спасибо!

    #50281

    Виталий К.
    Участник

    Добрый день! Скопилось еще несколько вопросов:
    1) функция ZGetExtFreqADC(typeDSP, numberDSP, &freq) в параметре частоты всегда(на разных частотах 2500, 25000 и 50000Гц)
    возвращает 12800000. Это так и должно быть?
    2) есть ли способ получения данных с 230-х модулей напрямую, т.е. без Zadc.dll? Их протокол обмена открытый?
    3) При считывании данных с приборов они идут пачками по несколько тысяч сэмплов, иногда при частоте дискретизации
    25000 Гц пачки составляют 20-30 тыс. сэмплов (т.е. 160-1400 тыс. байт ( *4 канала*2байта)). Такое поведение нормально?
    По ощущениям ЗетЛаб считывает данные меньшими порциями.

    Заранее спасибо за ответы.

Просмотр 15 ответов - с 1 по 15 (всего 34)

Для ответа в этой теме необходимо авторизоваться.