• Автор
    Тема
  • #48502
    no_img
    Михаил Микляев
    Участник

    Добрый день! У меня вопрос к разработчикам. Я уже спрашивал на форуме (тема Zet-220 подвисает -https://www.zetms.ru/support/NewForum.php?PAGE_NAME=read&FID=2&TID=132) почему время от времени Zet-220 виснет, причем второй экземпляр модуля абсолютно идентично подвисает. Но ответа так и не дождался.
    Может есть хоть какое-нибудь предположение о причинах сброса АЦП? Привык уже к вашей продукции, неохота на полпути менять производителя и заново все настраивать, переписывать.Да и новые установки делать все же хотелось бы с вашими модулями.

  • Автор
    Ответы
  • #48503
    no_img
    Manager ZETLAB
    Участник

    Уважаемый, Михаил!

    Мы с такой проблемой подвисания не сталкивались. Для того, чтобы с этим бороться необходимо у себя создать аналогичную ситуацию. Расскажите как можно подробнее в какой момент это происходит. Какая ОС на компьютере установлено? Какими параметрами обладает компьютер? Какое обновление программ установлено? Когда был изготовлен прибор? В каких условиях работает? Что нажимаете перед его зависанием? Если может быть что-то слишком долго работает и после этого зависает? Помогите нам разобраться с этой ситуцией.

    #48504
    no_img
    Михаил Микляев
    Участник

    АЦП-ЦАП ZET-220 №192 март 2010
    АЦП-ЦАП ZET-220 №247 окрябрь 2010
    Операционная система: лицензионная Windows XP Service Pack3.
    Компьютер: AMD Athlon64(X2)Dual Core Processor 3800+ 2.01ГГц, 2.87ГБ ОЗУ.
    Ваше программное обеспечение: ZETLAB Version 4 Windows Vista Compatible. Build Date: 4-10-2009
    Перед зависанием ничего не нажимается. Процесс длительный, просто наблюдаем за изменением показаний датчиков.В программе реализована процедура считывания данных с нескольких каналов (от 3 до 7) работающих с частотой дискретизации 200 ГЦ (ранее уже писал фрагмент кода).Условия работы — лаборатория, но вибраций,пыли и мощных электромагнитых полей нет. Время зависания от начала запуска программы может быть различным. (может проработать 20 мин., и вообще достать с перезагрузками, а может и целый день без проблем проработать). Пару раз вместе с АЦП зависала и клавиатура. По показаниям в Диспетчере задач — перегрузки системы нет, ресурсов хватает. Других программ во время работы модуля не запускаю.

    #48505
    no_img
    Manager ZETLAB
    Участник

    Здравствуйте, Михаил!

    Есть вероятность, что проблема в чипсете или USB драйвере. Есть у Вас возможность проверить работу устройства на другом компьютере?

    #48506
    no_img
    Михаил Микляев
    Участник

    Да, есть такая возможность. Попробую. Под Вистой можно запускать или XP обязательно?

    #48507
    no_img
    Manager ZETLAB
    Участник

    Можно и под вистой…

    #48508
    no_img
    Михаил Микляев
    Участник

    Здравствуйте. Спасибо за совет. На ноутбуке все нормально работает без сбоев несколько дней, хотя и слабее он значительно. Правда небольшая заминка произошла. На ноутбуке часы опаздывают от модуля за секунду на 0.02сек. Соответственно сигнал начинает запаздывать. Если вместо:

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if Srv1.CurrentTime(0)>mytime then
    begin
    Srv1.GetData(0,0,mytime,200,ff[0]);
    mytime:=mytime+1;
    b[1]:=0;
    for i:=0 to 199 do
    begin
    b[1]:=b[1]+ff[i];
    end;
    b[1]:=b[1]/200;
    end;
    end;

    я запишу:

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if Srv1.CurrentTime(0)>mytime then
    begin
    Srv1.GetData(0,0,mytime,200,ff[0]);
    mytime:=Srv1.CurrentTime(0);
    b[1]:=0;
    for i:=0 to 199 do
    begin
    b[1]:=b[1]+ff[i];
    end;
    b[1]:=b[1]/200;
    end;
    end;

    т.е. буду ‘привязываться’ к времени модуля — то ошибки не будет?
    И еще, не совсем понял почему здесь нужно включать виртуальный канал, а не ‘физический’ на модуле? И достаточно ли включать один виртуальный канал для снятия сигнала с нескольких каналов модуля?

    #48509
    no_img
    Manager ZETLAB
    Участник

    Здравствуйте, Михаил!

    С какой частотой у Вас возникает прерывание от таймера и как Вы измеряете задержку? Что значит включать виртуальный канал?

    #48510
    no_img
    Михаил Микляев
    Участник

    Таймер в программе настроен на прерывание 1000ms, то есть ровно одна секунда. В модуле я так понял свои часы, а частота дискретизации и прочие параметры привязаны к ним. CurrentTime, в частности показывает это время модуля. Задержку определяю просто: вывожу через edit1 currenttime любого из каналов. А через edit2 вывожу значение mytime, которое увеличивается на единицу по событию TForm1.Timer1Timer. Наблюдаю постепенное нарастание, разницы в этих временах, которые в начальный момент времени синхронизированы.
    Включаю виртульный канал вызовом метода ConnectVrtCh(NumChan), где NumChan-количество виртульных каналов. Просто я не понял, почему нужно писать SRV1.ConnectVrtCh(0), а не просто SRV1.Connect. В первом случае при вызове метода GetData все путем, а во втором возникает ошибка…(сейчас уже не вспомню какая).Извините за глупый вопрос.

    #48511
    no_img
    Manager ZETLAB
    Участник

    Здравствуйте, Михаил!
    Поскольку вы опрашиваете данные через таймер, а таймер и метод CurrentTime абсолютно между собой не как не связаны, то ваши расхождения по времени не выглядят удивительными. Таймер — это низкоприоритетный поток, поэтому каждый раз прибавляя 1 секунду при его срабатывании нельзя быть уверенным что прошла именно 1 секунда. Лучше пользоваться запоминанием предыдущего значения CurrentTime и сравнивать это значение с текущим, но опрос можно делать и по таймеру.
    К вам вопрос: зачем вам нужен виртуальный канал?

    #48512
    no_img
    Михаил Микляев
    Участник

    То есть организовать вроде бесконечного цикла в котором опрашивается только Currenttime. И таким образом вообще не связываться ни с каким таймером? Попробую. Виртуальный канал вообще мне не нужен, просто, как я указывал ранее, если вызывать метод SRV1.Connect, то на GetData возникает ошибка EAccessViolation, а если вызывать метод SRV1.ConnectVrtCh(0), то по GetData нормально считываются показания. Просто был вынужден так написать, вот и возник попутно вопрос, почему так.
    По поводу подвисания АЦП на одном из компьютеров. Чаще всего происходит зависание после записи числа в порт. То есть при записи в порт, допустим

    begin
    form1.SRV1.SetDigOutput(0,26);
    form1.SRV1.SetDigOutput(0,27);

    end;
    с некоторой долей вероятности подвисает.

    #48514
    no_img
    Manager ZETLAB
    Участник

    Здравствуйте, Михаил.

    Получение данных можно организовать и по таймеру, и как бесконечный цикл с задержкой — как угодно.
    Главное — это время, передаваемое в качестве параметра методу GetData:
    Как сказано в документации ;), время должно быть не больше CurrentTime по этому каналу, не меньше 0 и не меньше размера хранимых в буфере данных.
    В случае вычисления времени как mytime := mytime + 1 оно легко может не попасть в этот диапазон: на обработку таймера тратится время, плюс время по каналу может отставать или спешить. В Вашем случае времена совпали при запуске программы, поскольку при вызове ConnectVrtCh время по всем каналам сбрасывается в 0. Однако после вызова Connect CurrentTime может возвращать любое число.
    Лучше сделать как-то так:
    Код
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    num: Integer;
    begin
    if Srv1.CurrentTime(0)>mytime then
    begin
    num := (Srv1.CurrentTime(0)-mytime)*Srv1.Frequency(0);
    if num > 200 then
    num := 200;
    mytime:=Srv1.CurrentTime(0);
    Srv1.GetData(0,0,mytime,num,ff[0]);
    b[1]:=0;
    for i:=0 to num do
    begin
    b[1]:=b[1]+ff[i];
    end;
    b[1]:=b[1]/num;
    end;
    Srv1.NumFileUsed(0);
    end;

    В таком виде должно работать при соединении через Connect(). Можно по таймеру, можно сделать бесконечный цикл, добавив задержку.
    Последняя строчка нужна только для случая, когда Ваша программа обрабатывает записанный сигнал, работая совместно с Воспроизведением Сигналов /catalog/programs/zetlab/reader.php.

    По поводу зависания: попробуйте поставить небольшую задержку между form1.SRV1.SetDigOutput(0,26);
    Возможно, причина в том, что 2 команды перекрываются

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

Авторизация
*
*

Потеряли пароль?

Политика конфиденциальности персональных данных

Регистрация
*
*
*

Политика конфиденциальности персональных данных

Генерация пароля