Русский
Русский
English
Статистика
Реклама

Megatec

Эмулятор ИБП с протоколами Megatec и Voltronic

11.05.2021 08:07:02 | Автор: admin

Ряд наших устройств имеет встроенный порт RS-232 для считывания данных с источников бесперебойного питания (ИБП) по двум наиболее распространённым протоколам обмена Megatec и Voltronic. Для облегчения тестирования устройств мы разработали небольшую программу-эмулятор. Именно о ней дальше и пойдёт речь.

Протоколы Megatec и Voltronic текстовые и довольно простые. Обмен данными ведётся на низкой скорости 2400 бит/сек, 8 бит данных, без контроля чётности по принципу запрос-ответ. Запросы представляют собой текстовые строки длиной от одного до трёх символов, оканчивающихся байтом перевода строки (код 0x0D). Ответы приходят также в текстовом виде с завершающим символом 0x0D. Значения в ответах разделяются пробелами. Числа могут передаваться либо с незначащими нулями в начале, либо с дополнительными пробелами.

В зависимости от конкретного ИБП таких команд может быть разное количество, но основную информацию можно получить при помощи четырёх из них. Рассмотрим их подробнее.

Q1 запрос текущего состояния
Ответ ИБП:
(MMM.M NNN.N PPP.P QQQ RR.R S.SS TT.T b7b6b5b4b3b2b1b0
( начальный символ.
MMM.M входное напряжение, В.
NNN.N напряжение, при котором последний раз был осуществлён переход на работу от батареи, В.
PPP.P выходное напряжение, В.
QQQ потребляемая мощность, %.
RR.R частота сети, Гц.
SS.S напряжение на батарее, В. Оно может передаваться в двух форматах: SS.S для линейно-интерактивных ИБП или S.SS для онлайн-ИБП (указывается напряжение на одном элементе).
TT.T температура ИБП, C.
b7...b0 статусные биты, которые могут принимать значение 0 или 1.
b7 1 : работа от АКБ, 0 : работа от сети.
b6 1 : низкий уровень заряда АКБ, 0 : АКБ в норме.
b5 1 : байпас включён, 0 : байпас выключен (только для онлайн-ИБП).
b4 1 : авария ИБП, 0 : ИБП в норме.
b3 1 : линейно-интерактивный ИБП, 0 : онлайн-ИБП.
b2 1 : запущен тест ИБП.
b1 1 : ИБП выключен, 0 : ИБП включён.
b0 1 : звуковой сигнал включён, 0 : выключен.

I запрос информации об ИБП
Ответ ИБП:
#CompanyName Model Version
# начальный символ.
CompanyName производитель ИБП.
Model название модели.
Version версия ИБП.

F запрос информации о номинальных параметрах ИБП
Ответ ИБП:
#MMM.M QQQ SS.SS RR.R
# начальный символ.
MMM.M номинальное выходное напряжение, В.
QQQ номинальный выходной ток, А.
SS.SS номинальное напряжение АКБ, В (может быть в форматах SS.SS или SSS.S).
RR.R номинальная частота выходного напряжения, Гц.

QBV запрос информации об АКБ
Ответ ИБП:
(RRR.R NN MM CCC TTT
( начальный символ.
RRR.R номинальное напряжение АКБ, В.
NN количество батарей в АКБ, шт.
MM количество параллельных групп батарей, шт.
CCC ёмкость АКБ, %.
TTT оставшееся время работы от АКБ, мин.

Помимо команд, которые считывают какие-либо параметры ИБП, есть ещё управляющие команды. Часто используются такие:
T запуск теста АКБ на 10 сек.
TL запуск теста АКБ до полного разряда.
T<n> запуск теста АКБ на заданное количество минут.
CT остановка теста АКБ.
Q включение/отключение звукового сигнала ИБП.

На первый взгляд вышеописанные команды очень простые, но дьявол, как обычно, кроется в мелочах. Например, некоторые ИБП вообще не выдают ответы на команды I и QBV. Примером может служить ряд моделей от Ippon.

Также замечено, что различные ИБП выполняют команду Q (управление звуковым сигналом) за совершенно разное время. То есть от момента выдачи команды Q и до момента смены бита b0 в ответе на команду Q1 может пройти до 30 сек!!! А так как включение и выключение осуществляется одной командой, то при автоматизированном управлении может начаться колебательный процесс. Например, контроллеру через Web-интерфейс задаётся выключенное состояние звукового сигнала. Он анализирует текущее состояние ИБП (по флагу b0), и если оно отличается от нужного, то подаёт команду Q. При следующем запросе Q1 контроллер опять проверяет флаг b0 и видит, что он не поменялся. В результате он опять подаёт команду Q. Но ИБП всё это время на самом деле что-то там у себя внутри обдумывал, поэтому не сразу среагировал на первую Q, а тут уже пришла и вторая. В результате звуковой сигнал может остаться включённым. И, более того, в некоторых ИБП при смене статуса звукового сигнала осуществляется короткий бип. А из-за такого колебательного процесса эти бипы могут издаваться много раз, пока наконец контроллер и ИБП не синхронизируются.

Мы решили эту проблему просто смену состояния звукового сигнала проводим только раз в минуту. За это время у ИБП внутри уже всё устаканится.

Ещё один интересный момент заключается в расчёте оставшейся ёмкости АКБ. Считается она по упрощённой формуле:

BatCap = \frac{U - U_{min}}{U_{max} - U_{min}}\times100\%

Здесь:
U текущее напряжение АКБ.
Umin минимально допустимое напряжение на АКБ (обычно около 10В).
Umax напряжение заряженной АКБ (обычно 13,8...14,2В).

Этого обычно достаточно для оценки оставшегося заряда.

Протокол Voltronic на множестве указанных выше команд отличается только одной из них вместо кода Q1 используется QS. При этом форматы ответов совпадают. В наших устройствах реализовано автоматическое определение протокола обмена как раз на основе данного отличия. Контроллер при включении пробует посылать по очереди команды Q1 и QS. На какую приходит ответ, тот протокол дальше и используется. Если в течение определённого тайм-аута на команду перестают приходить ответы (был подключён другой ИБП на горячую), то определение протокола автоматически запускается заново.

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

Она представляет из себя экран с настройками и выбором COM-порта, через который будет осуществляться обмен. Поддерживаются все указанные выше команды, в том числе и для запуска тестов:

Работа с программой нее вызовет затруднений. Менять любые параметры можно прямо в процессе работы, и тут же видеть результат:

Для оценки работы программы в динамике я записал небольшое видео:

Саму программу эмулятора можно скачать здесь.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru