Программа управления Agilent 344XX

Делись идеей, получай поддержку и критику!

Программа управления Agilent 344XX

Postby CrazyFizik on 19 Jul 2012, 00:16

Недавно на работе появилась задача - получить интегральную оценку работы прибора.
Для этого надо достаточно быстро (несколько десятков - сотен раз в секунду) снимать значение напряжения и скидывать их в табличку для последующей обработки.
Благо старый добрый 34401 и его более молодые собратья 34410/34411 достаточно распространенные мультиметры, буквально под ногами валяются :D И именно на эту линейку мультиметров NI включает в :labview: пример драйверов, так шо даже не пришлось лезть в программ мануал и возится с SCPI.
Правда все же и эти драйвера требуют доработку напильником, но пока обходился подпалитрой Low Level - более простые и выскоуровневые ВП оказались жутко тормазнутыми - ну, например, нафига при каждом снятии данных предварительно настраивать триггер и тратить на это 100 мс драгоценного времени, когда настройки триггера зависят от типа измерения и их можно определять один раз при конфигурировании.

Поэтому быстренько на коленках сваял небольшую прогу. Изначально, задумка была такова - полностью повторить лицевую панель и функциональные возможности "живого" прибора, который может быть подключен по GPIB, Ethernet, USB, RS-232. Ну и, конечно, прога должна быть универсальной и работать со всей линейкой этих мультиметров - как оказалось не зря - задачу поставили написать прогу для 01-го под RS-232, а на стенде оказался 11 и комп без COM-портов - вот так у нас нынче "круто" работает космическая промышленность, даже ТЗ разучились составлять :nono:
Выкладываю прогу и надеюсь с одной стороны на дельные советы, т.к. на работе советоваться мне не с кем, а сдругой стороны - можь кому эта прога понадобиться - т.к. позволяет управлять, снимать данные и записывать их в файл с достаточно распространенного мультиметра.

Пока получилось следующее:
Настройки программы и мультиметра
- выбор типа измерения
- настройка входного фильтра
- настройка времени интегрирования (в моем случае надо было мерить как можно быстрее, но я с самого начала поставил цель собрать универсальную программу)
- переключатель автоустановки нуля
- переключатель autorange
- настройка интервала между замерами
- настройка внешнего порта (изначально делал для COM-порта, но как оказалось, отлично работает и по ethernet)
Работа с данными
- График снятых данных
- Текущее значение измеряемой величины
- Запись данных
- Сохранение в отчет
- Табличка, где можно посмотреть сохраняемый массив данных
- Сигнализатор того что интервалы между замерами постоянны

Замеры производятся однократные, непрерывно повторяющиеся через заданный интервал.

Каковы достижения:
- Как оказалось прога может работать и по Ethernet, и по GPIB, и по RS-232 (на USB не проверял). Спасибо программистам NI - оригинальные дрова под :labview: от Аджилента намного хуже.
- Минимальное время замеров по RS-232 37 мс (по даташиту, 18 мс)
- Минимальное время замеров по GPIB и Ethernet 5 мс (по даташиту 1мс)
Вообщем то круто, но хотелось бы еще меньшее время между замерами, тем более ходит байка, шо какой-то из некогда работающих программистов смог заставить мультиметр мерить данные и валить их на комп с периодом в 3 мс, но я в это не верю - при 9600 бод/с по COM-порту такого физически добиться невозможно

Примерный алгоритм работы с ней таков:
1. Настраиваем порт и выбипаем тип интерфейса
2. Настраиваем мультиметр и задержку между замерами
3. Врубаем режим записи данных (блокируется возможность изменения настроек)
4. Смотрим в табличке какие данные валятся в буфер
5. Смотрим на график (презентабильнее чем табличка)
6. Сохраняем данные в тектсовый файл, запись данных сразу же отключается, разблокируется меню настроек
7. ...
8. profit?

Чего нет, и что надо будет добавить потом:
- Установка таймера (шоб сам прекращал замер, сохранял, производил анализ и печатал отчет)
- Тулза по статитстической обработки данных (а то надоело уже вручную в Экселе строить графики, распределение плотности вероятности, матожидание, сигма, дисперсия и прочее)
- Последующая вставка обработанных данных в отчет
- Уменьшить минимально возможное время между замерами до значений по даташиту (хотя шо-то мне подсказывает, двойное время по даташиту - вот предел моей проги)
- В перспективе надо будет снимать не только напряжения, но и считать количество импульсов, приходящих с датчиков Холла, записывать осциллограммы. И все это по-идеи должно быть засинхронизировано.
- Ну и больше тонких настроек мультиметра, конечно...

Теперь же перейдем к затруднениям...
:rtfm:
А затруднения возникли следующие:
Во-первых, жесткая установка времени между замерами. Видимо программа нифика не оптимизирована и задержка между замерами на деле оказалась очень нестабильной - колбасится в пределах 1-2 мс. А если мерить несколько часов, колбасится начинает еще сильнее. Пичалька. :cry:
В общем, встает первый вопрос - как добиться жесткой фиксации интервалов между замерами.
*Самое что интересное, сегодня до обеда с нуля переписал пол программы - и в ней уже этой проблемы нет - ставишь 50 мс, время стабильно держится 50 мс, ставишь 38 мс - стабильно 38 мс, ставишь 5 мс - 5 мс (если по изернету). В чем секрет - я так и не понял. :shok:
Во-вторых, многоканальные измерения. Про это тоже мне никто не сказал, но как оказалось - надо было мерить не просто изменение напряжения с одного датчика, а как минимум с 3-х (благо мультиметров свободных много), а сам я по-началу до этого не додумался :nono:
И это будет уже второй вопрос - как мне допилить программу так, что бы в ней была заложена возможность многоканальных измерений. Причем многоканальность должна быть гибкой - количество каналов и их адреса задет оператор.
*Правда есть альтернативный вариант - написать ActiveX сервер - и не парится - внедрять в него столько копий этой программы, сколько душе угодно, что порождает следующий пункт.
В-третьих, начиная допиливать программу, я столкнулся с тем, что каждое новое нововеденние вводится все сложнее и сложнее, а программа становится все менее и менее красивой.
Это моя главная загвоздка - третья, выбор модели программирования и архитектуры программы.
Как лучше организовать потоки данных?
Как лучше построить иерархию проекта?
Ударяться в сторону ActiveX или оставить ActiveX на потом, например для объединения программ для разных приборов (мультиметр+ частотомер +осциллограф)?


Был бы рад за совет, а то проводников становится все больше и больше, код становится все более объемным и что-то изменять становиться все труднее, а сама блок-диаграмма уже давно не вмещается в экран :shok: Мне кажется, что где-то я неправильно с самого начала организовал структуру программы. Был бы очень благодарен за дельный совет и темплейт :drink:

Чего я еще не пробовал в этой проге:
- Timed структур, их применение позволит жестко контролировать время исполнения программы с точностью как минимум до 1 мкс, но думаю можно и круче. Но с этими структурами я почти не работал.
- Не применял очередей. Возможно их придется применять, если я захочу делать многоканальные измерения.
- Не пробовал раздельные циклы - снятия данных и их вывода-записи

Отсюда появляются частные, но не менее важные вопрсы:
- Применять ли таймед структуры?
- Использовать ли очереди?
- Использовать ли событийной управляемый автомат?
- Как лучше производить обработку событий GUI, а именно кнопок и полей ввода? В каждом цикле, или по событиям, или внутри специального состояния? Ведь даже булевые кнопочки у меня по-разному должны выполняться.
- Как лучше оформить GUI: использовать Tab или кластеры?
- Где какие проводники данных расставить, что бы в дальнейшем проще было модифицировать программу?
- Что делать когда данных станет очень и очень много в случае многочасовых измерений?
- Как оптимизировать программу, а то две разные варианты программы, написанные по одному шаблону работают тоже по-разному?
- Как добиться более менее жесткого контроля времени исполнения? Да это не ось реального времени, а всего лишь виндоуз, но микросекундный интервал и виндоуз вполне достижим.


В общем буду рад любым советам. :wink:

Прога пока все еще сырая - буду допиливать однозначно, так что ногами программиста не бить, программист кодит как умеет. Да и даже не программист, а конструктор, у которого была 3-ка по русскому. Так шо за русский язык, тоже ногами не бить.
К.О.: Сама прога в прицепе, под названием State Template.
Второй вариант проги могу скинуть отдельно по-желанию - она мало чем отличается, но почему-то работает стабильней, поэтому и вопросов к ней меньше.
Attachments
State Template.zip
Это программа
(162.88 KiB) Downloaded 257 times
CrazyFizik
beginner
beginner
 
Posts: 22
Joined: 22 May 2012, 19:06
Location: Саратов
LabVIEW Version: 2010
Karma: 11
hardware I/O students

Re: Программа управления Agilent 344XX

Postby CrazyFizik on 19 Jul 2012, 00:19

P.S.
Дас, забыл сказать про интерфейсы:
- GPIB
- Ethenet
- RS-232
- USB (работоспособность не проверял)
CrazyFizik
beginner
beginner
 
Posts: 22
Joined: 22 May 2012, 19:06
Location: Саратов
LabVIEW Version: 2010
Karma: 11
hardware I/O students

Re: Программа управления Agilent 344XX

Postby Jakob Brontfeyn on 19 Jul 2012, 13:09

Так много информации, ускользает на мой взгляд главное,
а именно протокол обмена.
Как передает данные мультиметр, например по RS232
по запросу от PC? передает он буффер или одно значение
по каждому опросу??? Это самое важное. Если известны
ASCII команды и формат ответов, может имеет смысл написать
собственное приложение.
Кроме того.
Я могу рекомендовать разделить прием и обработку данных
через глобальную переменную или еще как нибудь.
Мой практический опыт по обьединению разных приборов в одну
систему для автоматизации сложных лабораторных установок
показывает, что это сильно упрощает программирование.
смотри картинки
viewtopic.php?f=14&t=2728&p=23964#p23964
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1703
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Программа управления Agilent 344XX

Postby Lexan_83 on 19 Jul 2012, 14:02

В принципе неплохо, но есть ряд замечаний, слишком много связей идут через отдельные сдвиговые регистры, лучше их объединить в один кластер, тогда блок диаграмма влезет в экран монитора.
CrazyFizik wrote:Каковы достижения:
- Как оказалось прога может работать и по Ethernet, и по GPIB, и по RS-232 (на USB не проверял). Спасибо программистам NI - оригинальные дрова под :labview: от Аджилента намного хуже.
- Минимальное время замеров по RS-232 37 мс (по даташиту, 18 мс)
- Минимальное время замеров по GPIB и Ethernet 5 мс (по даташиту 1мс)
Вообщем то круто, но хотелось бы еще меньшее время между замерами, тем более ходит байка, шо какой-то из некогда работающих программистов смог заставить мультиметр мерить данные и валить их на комп с периодом в 3 мс, но я в это не верю - при 9600 бод/с по COM-порту такого физически добиться невозможно

- USB тоже должен работать, адрес USB только сложновато набирать. Согласен, дрова от Аджилента работают тормознуто, дрова NI намного лучше, но если доработать напильником можно и их оптимизировать.
- насколько я понял, вы меряете время не чистого замера, а замер+время обработки+отображение. Поэтому, возможно такое большое отличие.
- 9600 бод/с по COM-порту это стандартная скорость, можно установить на порядок больше, нужно смотреть какие скорости поддерживает мультиметр.
CrazyFizik wrote:Во-первых, жесткая установка времени между замерами. Видимо программа нифика не оптимизирована и задержка между замерами на деле оказалась очень нестабильной - колбасится в пределах 1-2 мс. А если мерить несколько часов, колбасится начинает еще сильнее. Пичалька. :cry:
В общем, встает первый вопрос - как добиться жесткой фиксации интервалов между замерами.

Вынос измерений в отдельный Timed Structure цикл или в подпрограмму с критическим приоритетом должно уменьшить разброс, но все таки разброс останется, так как винда не Real Time система
CrazyFizik wrote:Во-вторых, многоканальные измерения. Про это тоже мне никто не сказал, но как оказалось - надо было мерить не просто изменение напряжения с одного датчика, а как минимум с 3-х (благо мультиметров свободных много), а сам я по-началу до этого не додумался :nono:
И это будет уже второй вопрос - как мне допилить программу так, что бы в ней была заложена возможность многоканальных измерений. Причем многоканальность должна быть гибкой - количество каналов и их адреса задет оператор.
*Правда есть альтернативный вариант - написать ActiveX сервер - и не парится - внедрять в него столько копий этой программы, сколько душе угодно, что порождает следующий пункт.

с многоканальность есть одна тонкость, если нужна просто многоканальность, то загнать измерение в цикл где шаг цикла - это опрос заданного канала, но тогда пострадает синхронизация и время измерения увеличится. С ActiveX я не стал бы заморачиватся.
CrazyFizik wrote:Как лучше организовать потоки данных?
Как лучше построить иерархию проекта?
Ударяться в сторону ActiveX или оставить ActiveX на потом, например для объединения программ для разных приборов (мультиметр+ частотомер +осциллограф)?

Для начала можно просто сделать три окна мультиметр, частотомер, осциллограф
Lexan_83
adviser
adviser
 
Posts: 221
Joined: 18 May 2009, 10:50
Location: Москва
Medals: 1
Bronze (1)
LabVIEW Version: 8.6
Karma: 45
hardware I/O PDA VIP


Return to Проекты

Who is online

Users browsing this forum: No registered users and 3 guests

cron