Программирование источников питания
Алексей Телегин, ведущий блога по источникам питания Keysight Technologies
Алексей Телегин, ведущий блога по источникам питания Keysight Technologies

Мы продолжаем знакомить читателей с материалами, посвященными базовым понятиям и подходам в использовании источников питания (ИП), современным решениям в данной области и уникальным функциям, помогающим решить самые сложные задачи, возникающие при тестировании. В этом номере менеджер по развитию бизнеса и ведущий раздела по системам электропитания объединенного блога Keysight Technologies в России Алексей Телегин обсуждает вопросы программирования ИП.

Как передать команды в устройство?

Сегодня я хочу рассмотреть способы передачи команд в прибор. Другими словами, какой библиотекой ввода/вывода можно воспользоваться для передачи команд? Все мои рассуждения будут основаны на библиотеках ввода/вывода Keysight, поскольку с этой средой я знаком очень хорошо. Здесь возможны два варианта: прямой ввод/вывод, в котором применяются команды SCPI, или драйверы, к чьим функциям можно обращаться.

Сначала поговорим о прямом вводе/выводе. Я научился программировать приборы с помощью языка HPBASIC, так что для меня все началось именно с этого. Для выполнения данной работы компания Keysight предлагает два основных стандарта. Первый и самый старый из них — библиотека VISA. С ней удобно работать, если вы программируете прибор на языке C. Ниже приведен фрагмент кода на языке C на основе VISA, взятый из примера программы для N6700 (я намеренно убрал комментарии, чтобы показать программу в чистом виде):

VISAstatus=viOpenDefaultRM(&defrm);
VISAstatus=viOpen(defrm,”GPIB0::5”,VI_NULL,VI_NULL,&session);
viPrintf(session,»VOLT 5,(@1) \n»);
viPrintf(session, «OUTP ON, (@1) \n»);
viPrintf(session, «MEAS:VOLT? (@1) \n»);
viScanf(session,»%s»,&voltmeasurement);
viClose(session);
viClose(defrm);

Функции viPrintf и viScanf очень похожи на некоторые базовые функции языка C, так что если вам приходилось программировать на C, то трудностей не возникнет.

Однако существует и новая библиотека Keysight VISA COM, замечательно взаимодействующая с языками, поддерживающими COM. VISA COM хорошо работает с языками Visual Basic и C#. Здесь показана та же программа, написанная на VB:

Set ioMgr = New KeysightRMLib.SRMClsSet
Instrument = New VisaComLib.FormattedIO488Set
Instrument.IO = ioMgr.Open(«GPIB0::5»)
Instrument.WriteString « VOLT 5,(@1)»
Instrument.WriteString « OUTP ON, (@1)”
Instrument.WriteString «MEAS:VOLT? (@1)”
Result = Instrument.ReadstringInstrument.IO.Close

По-моему, это читается лучше, чем VISA. Вот почему, когда мне нужно написать программу, я предпочитаю VISA COM и Visual Basic.

Другой способ управления — использование драйвера. В настоящее время мы предлагаем с нашими приборами драйверы двух разных типов: VXI Plug and Play и IVI COM. Впрочем, драйверы VXI Plug and Play считаются устаревшими, и я не буду на них останавливаться. Вот пример нашей программы, написанной с помощью драйвера IVI (на C#):

driver = new Keysight.KeysightN67xx.Interop.KeysightN67xx();
IKeysightN67xxProtection2 protectionPtr;
IKeysightN67xxMeasurement measurementPtr;
IKeysightN67xxOutput3 outputPtr;
int channeldriver.Initialize(“GPIB0::5”, idquery, reset, initOptions);
outputPtr = driver.Outputs.get_Item(driver.Outputs.get_Name(channel));
protectionPtr =
driver.Protections.get_Item(driver.Protections.get_Name(channel));
measurementPtr =
driver.Measurements.get_Item(driver.Measurements.get_Name(channel));
outputPtr.VoltageLevel(3.0, 3.0);
outputPtr.Enabled = true;
mVolt = measurementPtr.Measure(KeysightN67xxMeasurementTypeEnum.Keysi
ghtN67xxMeasurementVoltage);
driver.Close();

Как видите, программа с драйвером получается значительно сложнее прямого ввода/вывода. Тем не менее можно привести несколько аргументов в пользу драй- -вера. Первый и самый весомый аргумент заключается в том, что сама ваша система рассчитана на применение драйверов. Другой веский аргумент — переносимость кода. В драйвере IVI определены классы приборов, которые будут работать с любым совместимым источником питания постоянного тока. Одним из основных недостатков наших драйверов IVI является то, что функции почти всегда один к одному совпадают с SCPI, поэтому не столь много функций могут работать на более высоком уровне, и вы не сэкономите время на программировании.

Я предпочитаю VISA COM в Visual Basic, поскольку считаю это самым простым способом программирования, и он полностью меня устраивает.

Какой язык программирования выбрать?

Какой язык программирования выбрать?

Вместо того чтобы рекомендовать какой-нибудь конкретный язык, я собираюсь сравнить графические языки программирования с текстовыми.

Для начала давайте предположим, что точного ответа на поставленный вопрос нет и выбор языка программирования — дело вкуса.

В отличие от большинства моих коллег я не специализировался на аналоговой электронике и всегда интересовался компьютерными технологиями и благодаря такой специализации получил некоторые базовые знания о языках программирования. Я предпочитаю сидеть и программировать на текстовых языках, потому что именно этому я обучен.

Графические языки программирования сейчас очень популярны (самый знакомый для меня — Keysight VEE). Я считаю, что такие языки незаменимы для написания коротких Какой язык программирования выбрать? программ. Если программа целиком помещается на одном экране, то графические языки программирования работают просто замечательно. Кроме того, они позволяют действительно легко создавать интерфейсы пользователя, поскольку в них есть множество простых функций для управления прибором и отображения информации. Но я считаю, что они становятся очень громоздкими, если понадобится обмениваться с прибором большими объемами данных. Также я обнаружил, что в них используются весьма странные конструкции циклов. Многие утверждают, что эти графические языки очень напоминают электрические схемы, и я хорошо понимаю, почему люди предпочитают такое представление простому текстовому программированию.

Графические языки программирования позволяют действительно легко создавать интерфейсы пользователя, поскольку в них есть множество простых функций для управления прибором и отображения информации.

Должен признаться, если мне нужно быстро написать программу, которую не придется кому-либо показывать, я по-прежнему сделаю ее на HPBASIC. Я обнаружил, что простые программы пишутся на этом языке очень легко. Если все настроено правильно, то никакие драйверы не нужны; обмен информацией с прибором выполняется легким движением руки. Впрочем, большие программы на HPBASIC уже не так просты.

Сейчас я предпочитаю программировать на Visual Basic (с помощью библиотеки ввода/вывода VISA COM). Если вы взглянете на прилагаемый пример программы для источника питания, то увидите много кода на VB. Думаю, текстовые языки программирования позволяют создавать значительно более компактный код: он занимает меньше места на экране, чем эквивалентная программа на графическом языке. Кроме того, языки вроде Visual Basic обладают большей гибкостью, поскольку ориентированы не только на контрольно-измерительные, но и на более универсальные приложения. Циклы здесь работают очень хорошо, и последовательность операций выглядит для меня более логичной. К тому же я быстрее ввожу текст, чем соединяю квадратики. Однако у текстового программирования есть и свои недостатки. Например, графические языки изначально ориентированы на управление приборами. Они имеют встроенные функции и команды обработки данных, значительно упрощающие жизнь, и предлагают очень хорошие библиотеки для построения интерфейсов пользователя.

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

Прочие новости и статьи