Кодирование собственного сетевого испытательного оборудования

Mark Harris
|  Создано: 18 Января, 2024  |  Обновлено: 9 Февраля, 2024
Кодирование собственного сетевого испытательного оборудования

Введение

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

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

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

Введение в SCPI

Если вы не знакомы с сетевым тестовым оборудованием, вам необходимо знать о Стандартных Командах для Программируемых Инструментов (SCPI). В свое время Hewlett-Packard разработала концепцию стандартного интерфейсного шины, которая позволила бы любому компьютеру с соответствующим интерфейсом подключаться к любому элементу тестового оборудования. Этот стандарт HPIB стал известен как Общий Интерфейсный Шинный (GPIB) со своим собственным стандартным обозначением IEEE 488. Эта стандартизация позволила каждому элементу сетевого тестового оборудования реагировать на команды от компьютера для выполнения функций, таких как вывод сигнала или выполнение измерения.

SCPI расширил принцип стандартизированной сетевой работы тестового оборудования, добавив дополнительный слой для стандарта IEEE-488, чтобы регулировать компьютерные команды, которые тестовое оборудование могло понимать. Теперь это означает, что осциллограф, произведенный HP, будет реагировать на те же команды, что и осциллограф, произведенный Keysight. До стандартизации команд часто разные модели, произведенные одним производителем, реагировали на разные команды. Эта стандартизация означает, что программа управления тестовым оборудованием на компьютере будет работать с любыми марками и моделями лабораторного оборудования, так что замена сетевого лабораторного блока питания, например, на более совершенную модель, не потребует изменений в программе управления.

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

Введение в SCPI

Команды SCPI представляют собой простые ASCII-строки, которые довольно интуитивно понятны для чтения и понимания. Например, отправка команды “*RST” на тестовое оборудование сбросит его; отправка команды “*WAI” прикажет ему подождать.

Команды SCPI могут инструктировать тестовое оборудование выполнять действие или запрашивать информацию в зависимости от их формата. Например, команда “TIM:ACQT 20ms” изменит время захвата осциллографа на 20 мс, в то время как команда “TIM:ACQT?” заставит его вернуть текущее время захвата.

Важные моменты, которые следует учитывать, заключаются в том, что команды не чувствительны к регистру и поддерживают сокращенные формы, так, например, “TRIG SOUR CH1” и “Trigger source Channel1” являются допустимыми альтернативами одной и той же команды. Вы также можете конкатенировать команды, так, например, “TRIG SOUR CH1”, “TRIG LEVEL1 10” и “TRIG POL INV” можно записать как “TRIG:SOUR CH1;LEVEL1 10;POL INV”, поскольку все команды относятся к одному и тому же TRIG. Эти команды устанавливают исходный канал, его уровень в вольтах и полярность. В данном примере уровень канала 1 устанавливается на 10В с инвертированной полярностью. Не обязательно указывать его триггер 1, поскольку это подразумевается, но вы можете использовать “TRIG1:”, чтобы избежать двусмысленности.

Проект программирования

Сопровождающее это статью видео показывает, как создать собственное сетевое тестовое оборудование, использующее команды SCPI. Это продолжение предыдущего видео, показывающего, как взаимодействовать с тестовым оборудованием для автоматизации.

Цель этого упражнения - позволить пользовательскому тестовому оборудованию без проблем интегрироваться в любое существующее тестовое программное обеспечение, которое может обрабатывать команды SCPI, такое как использующее LAN eXtensions for Instrumentation (LXI) или Virtual Instrument Software Architecture (VISA). Конечная цель - разработать комплексное, интегрированное тестовое устройство, включив в автоматизированное тестовое оборудование микроконтроллер.

Программирование собственного сетевого тестового оборудования

В центре проекта находится разработочная плата Infineon XMC4700 Relax Kit, предназначенная для промышленных приложений. Плата включает микроконтроллер со статической и динамической памятью, часами, источниками питания, стандартными интерфейсами и базовыми элементами управления. Она также включает встроенное сетевое соединение с MAC-адресом для сетевого подключения.

Одним из ключевых преимуществ этой конфигурации является наличие интегрированной среды разработки Digital Application Virtual Engineer (DAVE), которую предоставляет Infineon. DAVE - это инструмент разработки программного обеспечения на основе C и генерации кода для приложений микроконтроллеров. Он позволяет упростить процесс кодирования, удобно обрабатывая большинство задач настройки, чтобы вы могли сосредоточиться на реализации команд SCPI.

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

Пошаговое руководство по программированию

Настройка проекта:

Создание собственного сетевого тестового оборудования: пошаговое руководство

При использовании инструмента DAVE для нового проекта первым шагом является создание нового файла проекта с помощью последовательности команд «Файл -> Новый -> Проект DAVE». Это действие откроет новое окно, где вы можете выбрать опцию «Проект DAVE CE» и дать ему подходящее имя.

Создание собственного сетевого тестового оборудования: пошаговое руководство

Затем вам нужно будет выбрать целевое аппаратное обеспечение; в данном случае это XMC4700 Relax Kit.

Если ваш проект не будет ограничен в ресурсах, всегда рекомендуется использовать полнофункциональную стандартную библиотеку newlib, а не опцию с наноразмером.

Создание собственного сетевого тестового оборудования: пошаговое руководство

Следующим шагом является настройка периферийных устройств для проекта с помощью команды «DAVE -> Добавить новое ПРИЛОЖЕНИЕ».

Создание собственного сетевого тестового оборудования: пошаговое руководство

Первой настройкой, которую нужно выполнить, является настройка сетевого соединения, и вы делаете это с помощью команды «Ethernet -> ETH_LWIP», которая добавляет в проект легковесный стек интернет-протоколов (IP) для обработки этого интерфейса.

Создание собственного сетевого тестового оборудования: пошаговое руководство

Вам также потребуется добавить интерфейсы ввода/вывода для тестового оборудования, в данном примере кнопку и индикатор светодиода. Оба являются дискретными компонентами, поэтому вы должны добавить два приложения «DIGITAL_IO» в опции команды системы, по одному для каждого элемента.

Тест

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

Тестирование

Вам также необходимо настроить стек IP для соединения Ethernet, щелкнув правой кнопкой мыши по «ETH_LWIP App» и выбрав «Настроить экземпляр приложения». Вы обнаружите, что XMC4700 Relax Kit уже предварительно настроен, что экономит время. Вам нужно будет изменить статический IP-адрес на странице настроек IP, чтобы он соответствовал подсети компьютера, который вы используете для автоматизированного тестирования. Кроме того, в этом примере не требуется протокол пользовательских датаграмм (UDP), поэтому вы можете деактивировать его на вкладке настроек протокола.

Тестирование

Наконец, вам нужно обеспечить соответствие между настройками пинов приложения и аппаратным обеспечением микроконтроллера, используя опцию ручного распределения пинов для каждого компонента. Чтобы настроить дискретную кнопку, щелкните по ней правой кнопкой мыши и выберите команду «Ручное распределение пинов».

Тестирование

Затем вы можете выбрать подходящий номер пина для кнопки на Relax Kit из выпадающего меню, которое удобно предоставляет метки для упрощения этого процесса. Настройка светодиода и соединения Ethernet происходит по тому же принципу. Вы обнаружите, что функция распределения пинов упрощает этот процесс, позволяя выбирать только пины с необходимой функциональностью. Инструмент автоматически предоставляет все метки XMC4700 Relax Kit для упрощения этого процесса.

Эти шаги завершают настройку вашего проекта автоматизированного тестирования, и теперь вы готовы к написанию тестового кода.

Кодирование приложения проекта

Тест

Вы можете сгенерировать код для приложений, просто нажав на кнопку «Сгенерировать код» на панели инструментов DAVE, а затем просто подождать завершения операции.

Перед тем как начать кодировать всерьёз, рекомендуется перенести консоль с микроконтроллера на компьютер, обеспечив лёгкий доступ к `printf`. Это позволит вам форматировать и печатать данные, делая написание и отладку кода быстрее и проще. Вы можете сделать это, включив «GDB Semi-Hosting» в настройках конфигурации. Для этого перейдите в «Свойства проекта», затем в «Сборка C/C++» и выберите «Настройки».

Тестирование

В разделе «ARM-GCC, C Linker, Разное», вам нужно добавить «–specs=rdimon.specs» в флаги «Другое». Этот шаг включает конфигурацию полухостинга для линкера.

Тест

Затем вы можете перейти в раздел «ARM-GCC C Compiler, Препроцессор» и добавить новый определённый символ «XMC_DEBUG_ENABLE». Эта настройка обеспечивает перенаправление консоли в конфигурации сборки отладки.

Тестирование

В настройках проекта вам нужно снять флажок, который предоставляет «стандартные системные вызовы newlib» в настройках «ARM-GCC C Linker, Общее». Если оставить этот флажок установленным, вы обнаружите, что это прерывает инициализацию обработчика монитора и вызывает сбой сборки.

Далее вам нужно инициализировать мониторинг, что можно сделать, добавив «extern void initialise_monitor_handles(void);» в начало вашего кода. Эту функцию нужно вызвать после вызова DAVE_Init();.

Обратите внимание, что написание слова «initialise» - это британский вариант английского языка, поскольку база ARM находится в Кембридже, Англия. Использование американского написания приведет к ошибке, которую может быть сложно устранить, если вы не заметите тонкую разницу в написании.

Кодирование сетевого проекта

Первым шагом в настройке работы сети Ethernet является включение стека Lightweight IP для регулярной проверки новых сообщений. Вы можете сделать это, добавив вызов функции «sys_check_timeouts();» в ваш бесконечный цикл while, который выполняется после завершения инициализации.

Эта функция потребует отладки для работы на микроконтроллере. Вы можете сделать это, создав новую конфигурацию отладки. Рекомендуется отключить опцию «Установить точку останова: main», чтобы код начал выполняться сразу после запуска микроконтроллера. Выбор опции отладки загрузит ваш новый код в микроконтроллер.

Тестирование

Вы можете подтвердить, что код работает, вызвав консоль Windows на вашем компьютере и отправив пинг на IP-адрес платы разработки, который в этом примере является XMC4700 Relax Kit. Плата разработки должна ответить на каждый пинг, подтверждая, что плата работает и сетевое соединение функционирует.

Код стека Lightweight IP автоматически обработает функции протокола управления сообщениями в Интернете (ICMP). Тем не менее, вы должны создать код для обработки входящих соединений и данных протокола управления передачей (TCP). Это можно сделать, используя стандартные операторы кода стека Lightweight IP, которые не специфичны для микроконтроллера.

Теперь, когда вы завершили настройку сетевого соединения, вы можете настроить блок управления протоколом на прослушивание порта 5025, который используется кодом SCPI для коммуникаций. Вы должны настроить стек Lightweight IP на делегирование всех новых соединений функции под названием client_accept, которую вам нужно будет расширить для обработки новых клиентов. Все полученные данные должны быть перенаправлены в отдельную функцию обработки, которая также выведет сообщение отладки для указания на получение нового соединения.

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

Компиляция кода создаст функциональную сборку, если нет ошибок кодирования для отладки.

Кодирование проекта IO

Следующим шагом является настройка «Цифровых IO приложений» для выполнения их требуемых операций.

Тест

Щелкните правой кнопкой мыши по каждому приложению и выберите опцию «Настроить экземпляр приложения». Настройка по умолчанию для компонентов ввода-вывода - трехстатусный вход, что идеально подходит для кнопки. Однако для светодиода вам нужно будет изменить настройки на «Ввод/Вывод» с сильным управлением и мягким переходом. Эта конфигурация с сильным управлением гарантирует, что плата будет производить достаточно тока управления для зажигания светодиода. Конфигурация с мягким переходом относится к скорости перехода сигнала на контакте. Мягкий переход смягчает любые переходные эффекты в сети распределения питания и снижает риск негативного воздействия на электромагнитную совместимость. Использование этой опции для дискретного выхода является хорошей практикой, если вам не нужен сигнал с скоростью перехода на уровне наносекунд.

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

Кодирование проекта SCPI

После завершения настройки и инициализации функций, кодирование проекта может наконец перейти к реализации команд SCPI для тестирования. Нет необходимости реализовывать команды SCPI с нуля; на GitHub доступна исключительная библиотека SCPI-Parser от Яна Брейера в качестве отправной точки.

Вы можете воспользоваться этим ресурсом, извлекая папку libscpi в папку Libraries вашего проекта. Затем извлеките папки scpi-def из «examples -> common» в папку вашего проекта. Этот шаг импортирует библиотеку SCPI-Parser и обеспечивает хорошую отправную точку для реализации вашего проекта.

Вам нужно будет удалить папку test и makefile в библиотеке libscpi в интегрированной среде разработки DAVE, поскольку они будут несовместимы с используемой библиотекой ARM-GCC.

Тестирование

Затем вернитесь в окно свойств проекта в разделе «Build, Settings, Compiler, Directories» и добавьте ссылку на папку includes libscpi.

Вам также нужно будет открыть файл scpi-def.c и добавить строку include для «dave.h», чтобы связать ваши функции ввода-вывода с файлом scpi-def.

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

При редактировании файла удалите все функции DMM и тестирования в блоке конфигурации команд, но сохраните код для команды TST и все последующие утверждения, вместе со стандартными командами SCPI, которые будет обрабатывать библиотека.

Вы можете определить информацию для идентификации тестовой установки в файле “scpi-def.h”, так что использование команды SCPI *IDN вернет полезную информацию в ответ на любой запрос идентификации.

Вы можете настроить команды SCPI в файле проекта “main.c”. Вам нужно будет добавить контекст SCPI в основную функцию, используя свойство user_context, чтобы передать ссылку на блок управления протоколом Lightweight IP, что позволит инициализировать библиотеку SCPI. Затем вам нужно добавить свои функции, чтобы обеспечить возможность коммуникации libscpi через сетевое соединение. В этом примере необходимо определить следующие функции:

  • Функция “SCPI_Write” позволяет libscpi отправлять данные через сетевое соединение.

  • Функция “SCPI_Flush” уведомляет стек Lightweight IP о необходимости немедленной отправки всех данных в буфере.

  • Функция “SCPI_Error” предоставляет средство для обработки ошибок SCPI. Для этого базового примера вы можете обойтись простым вызовом функции printf.

  • Функция “SCPI_Control” является необязательной и позволяет записывать в канал управления на TCP-порту 5026, который вам не потребуется для этого примера.

  • Функция “SCPI_Reset” вызывается в ответ на получение команды сброса, возвращая все тестовые приборы к их настройкам по умолчанию. Поскольку в этом базовом примере нет подключенного тестового оборудования, вы можете обойтись простым вызовом функции printf.

Тест

Наконец, user_context необходимо установить для нового клиентского соединения при подключении к стеку Lightweight IP. Это позволит передавать данные в библиотеку SCPI из буфера через функцию client_recv в “SCPI_Input” для обработки. Следует отметить, что данная реализация не будет обрабатывать несколько соединений одновременно, но представляет собой хорошую практику настройки сети.

Компиляция обновленного кода и его загрузка в микроконтроллер должны привести к тестовой системе, которая будет отвечать не только на пинги из консоли Windows, но и на команды SCPI.

Тестирование кода SCPI проекта

В этом примере проекта использовалось приложение Rohde & Schwarz VISA Tester для тестирования команд SCPI.

Тест

После подключения приложения к испытательному оборудованию первым тестом является запрос идентификации (IDN?). Это рекомендуемый первый шаг, и команда полностью обрабатывается библиотекой SCPI, что гарантирует работоспособность коммуникаций и правильность настройки библиотеки. Это означает, что любые проблемы, связанные с тестами, требующими ответа от периферийного устройства или испытательного оборудования, можно предположить, что коммуникации и библиотека не являются предметом поиска ошибок в процессе отладки.

Для тестирования периферийных устройств требуется добавление новых шаблонов в массив `scpi_commands` для реализации необходимых функций. Для отладки функциональности можно включить вызовы функции “printf”, что предоставляет простой метод проверки выполнения кода.

Тест

В примере код считывает состояние кнопки с помощью функции “scpi_result_t IO_Btn“ в приложении DAVE, ранее настроенном для обработчика кнопки, с отправкой состояния с помощью ответа “SCPI_ResultBool”. Возвращаемое значение инвертируется, поскольку эта кнопка является компонентом с активным низким уровнем.

Тест

Функция обработчика LED анализирует полученный параметр состояния кнопки и устанавливает соответствующее состояние LED. Если параметры отсутствуют, то в этом примере никаких действий не предпринимается. Для выполнения своей функции на этом этапе используется функция “scpi_result_t IO_Led”.

С программированным микроконтроллером вы можете тестировать код, используя вкладку Console в инструменте DAVE. Это продемонстрирует получение соединения и работу команды запроса идентификации.

Тест

Вы можете проверить состояние кнопки, отправив запрос SCPI, и тестировать функциональность, наблюдая за изменением возвращаемого состояния при нажатии на кнопку.

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

С правильно работающими кнопкой и LED у вас есть основа для полностью функционального инструмента, подключенного к сети. Подключение платформы автоматизации тестирования или написание вашего тестового кода позволит вам удаленно проверять состояние кнопки и управлять LED.

Заключение

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

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

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

Об авторе

Об авторе

Марк Харрис (Mark Harris) является квалифицированным инженером с более чем 12-летним опытом в различных областях электронной промышленности – от контрактов в области аэрокосмической и оборонной отрасли до небольших стартапов и хобби. До переезда в Великобританию Марк работал в одной из крупнейших исследовательских компаний в Канаде, где каждый день участвовал в различных проектах и решениях задач, связанных с электроникой, механикой и программным обеспечением. Он также опубликовал самую обширную открытую библиотеку компонентов Altium Designer, названную Celestial Database Library. Марк увлекается проектами аппаратного и программного обеспечения с открытым исходным кодом и инновационными решениями повседневных проблем, которые они предлагают. Электроника – его страсть, а наблюдение за тем как изделие из идеи воплощается в реальность и начинает взаимодействовать с миром – источник бесконечного удовольствия.
Вы можете связаться с Марком напрямую: mark@originalcircuit.com.

Связанная техническая документация

Вернуться на главную
Thank you, you are now subscribed to updates.