Автоматизация Аппаратного Тестирования Встраиваемых Систем

Продолжим серию статей об автоматизации тестирования Embedded систем.

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

Итак, что мы имеем:

  1. Десятки Встроенных устройств, в которых необходимо тестировать новую версию FirmWare (точнее - ежедневную сборку прошивок)
  2. Из-за особенностей процедуры загрузки прошивки может потребоваться сброс питания (так называемый режим загрузки прошивки в режиме Power On Capture)
  3. Я хотел бы имитировать нажатие механических кнопок, расположенных на плате разработки встроенной системы, в определенные моменты времени во время выполнения тестового сценария.

Зачем может понадобиться пункт 3? В моем случае задача следующая - в случае критического Exception при выполнении кода система "встает" в полуживое состояние из которого не выйдет до сброса питания (еще одна причина отключения питания управление).

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

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

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

Небольшое лирическое отступление - иногда за этим Исключением будешь бежать неделями, потому что.

оно возникает лишь иногда, когда все звезды сошлись и выполняется куча неизвестных условий.

Поэтому каждый такой журнал отладки очень важен и нужен.

Анализ схемы отладочной платы показал, что кнопка просто замыкает линию GPIO, подтянутую к +3,3 В к GND. Это значит, что если «припаять» кнопку и с помощью реле замкнуть линию GPIO на землю, то у вас будет то, что нужно.

Далее встал вопрос о выборе устройства/модуля управления, к которому были выдвинуты следующие требования:

  • Максимальное количество реле (нужно по 2 на каждое устройство, а устройств десятки)
  • Доступ к Ethernet
  • Управление командами URL
  • Возможность копирования и масштабирования системы.

По традиции мы остановились на релейном модуле Laurent-128 Etherent:

Автоматизация аппаратного тестирования встраиваемых систем

Модуль нас полностью устроил по всем параметрам: можно управлять сразу 14 устройствами (одно реле на питание, другое на нажатие кнопки) с помощью URL-команд (очень удобно для скриптовых языков, на которых написана автоматизация тестирования).

Схема подключения и связи отладочной платы тестируемого устройства и модуля управления представлена на рисунке ниже:

Автоматизация аппаратного тестирования встраиваемых систем

«Припайка» к контактам механической кнопки на примере одного из тестируемых устройств выглядит так:

Автоматизация аппаратного тестирования встраиваемых систем

Ура! Механическая часть готова.

Остаётся только добавить код процедур тестирования, чтобы в случае необходимости (загрузка образа прошивки после сброса по питанию или запись отладки по нажатию кнопки) подать команду на включение/выключение нужного реле .

Синтаксис URL-адресов команд управления прост и понятен.

Например, чтобы включить реле №4, вам необходимо использовать следующий HTTP-адрес:

  
   

http://192.168.0.101/cmd.cgiЭpsw=Laurent&cmd=REL,4,1

А вот простая функция Perl, которая вызывается из основной процедуры тестирования, если вам нужно «выдернуть» реле:

#---------------------------------------------------------------# # FUNCTION:: click rele # PARAM1: Laurent IP adress # PARAM2: RELE ID # PARAM3: 0 / 1 - what to do with rele #---------------------------------------------------------------# sub func_click_pwr_rele { my ( $_IN_IP, $_IN_RELE, $_IN_VALUE ) = @_; my $url; $url = " http://".

$_IN_IP."/cmd.cgiЭcmd=REL,".

$_IN_RELE.",".

$_IN_VALUE ; my $content = get $url; if( defined $content ) { } else { func_put_reslog( "ERROR! Can't manage RELE at adress $url", "BAD" ); } }

Отмечу, что система работает очень надежно, без сбоев и зависаний.

Лоран-128 и ранее использовавшийся Лоран-112 (с 12 реле) проработали по пару лет без сбоев и остановок, с учетом ежедневной работы.

А вот пример такого Исключения, которое было выявлено при выполнении тестов при внеочередной ежедневной сборке прошивки.

После того, как тестовому сценарию стало ясно, что по последовательному порту от устройства нет ответа (т.е.

оно «умерло»), была предпринята попытка нажать аварийную механическую кнопку для записи отладки и это сработало – сформировался итоговый отчет о тестировании самим тестовым скриптом была заполнена полезная информация о месте возможного сбоя системы для последующего анализа командой разработчиков:

Автоматизация аппаратного тестирования встраиваемых систем

Теги: #Сделай сам или Сделай сам #Тестирование ИТ-систем #Промышленное программирование #автоматизация тестирования #отладка #perl #Ретранслятор Ethernet #Тестирование встраиваемых систем

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.