1. Анализ UART протокола материнской платы MX-U209M2DB ИБП Энергия ПН-750.
Подключение происходит на скорости 2400 бит/с. В процессе работы инвертор может передать текущее состояние, если на его Rx порт отправить символ "Y", строка должна заканчиваться символом CR+LF. Ответ состоит из восьми байт, пример: 00000000 10010000 10001101 01100100 00000000 01001010 00110010 11101110 Далее информацию можно представить в десятичном виде: 0 144 141 100 0 74 50 238
Расшифровка некоторых значений (Dec): Первый байт сообщает состояние работы ИБП. 0 - нормальная работа; 1 - перегрузка; 2 - выключен выход; работа от сети; 10 зарядка АКБ, выключен выход; 192 - работа от АКБ. Это только часть возможных значений. Второй байт - вольтметр входного напряжения. Чтоб получить значение в вольтах, нужно перемножить (в нашем примере) 144 на некий коэффициент (эмпирически подобрано значение 1,515). Т.е. получаем 218,16 вольт. Третий байт - вольтметр выходного напряжения. Используем тот же коэффициент 1,515. 141*1.515=213,615 вольт. Четвертый байт - процент заряда АКБ. Информация не проверена, предположительно изменяется от 0 до 100 и означает % заряда. Полностью заряжен - выдает значение 100. Пятый байт - отображает нагрузку на инвертор, предположительно в процентах. Может быть выше 100, тогда на экране ИБП появляется надпись Overload (перегрузка). Измеренные значения: 1 = 32 вт; 12 = 129 вт; 69 - 530 вт;, 163 - 1022 вт. Шестой байт - предположительно напряжение батареи, 74 означает ~13 вольт. Седьмой байт - предположительно частота сети. Восьмой байт - неизвестно. Иногда мой UART переходник начинал получать еще и 9-тый байт, с задержкой после восьмого.
2. Анализ UART протокола COM порта.
Цитата
Самое главное: можно напрямую подпаяться к ногам PIC микроконтроллера, до оптронов, тогда данные можно получить не по COM порту, а через обычный UART, работающий с пятивольтовыми сигналами.
Подключение происходит на скорости 2400 бит/с. PIC контроллер отвечает на команды I, F, Q1. Первые две - бесполезны. По запросу I выдается фейковая модель ИБП #GERMANY SIN 800S Z170 Запрос F возвращает константы: 220.0 2.7 12.00 50.0 (напряжение сети, ток (чего?), напряжение акб, частота сети). Действительно полезный запрос - Q1, Пример ответа ИБП: (222.7 222.7 218.1 000 50.0 2.22 48.0 00000001 С этим протоколом работает программа UPSilion, UPSMonitor, название протокола Mega Tec или Megatec. Детальное описание доступно в интернетах. Описание значений: «Входное напряжение»: 222.7, «Входное аварийное напряжение»: 222.7, // Что еще за аварийное напряжение? «Выходное напряжение»: 218.1, «Выходная нагрузка»: 0, «Входная частота»: 50.0, «Напряжение аккумулятора»: 2,22, //Значение полностью заряженной АКБ «Температура»: 48,0, //Всегда статично, так как нет датчика «Ошибка»: 0, «Батарея разряжена»: 0, «Байпас активен»: 0, «ИБП Failed»: 0, «Тип ИБП - резервный»: 0, «Выполняется тест»: 0, «Активное выключение»: 0, «Звуковой сигнал включен»: 1
Скорее всего бинарные значения 00000001 выдаются PIC контроллером на основе первого байта данных, которые выдает MX-U209M2DB.
Команды UPSilion, запрашиваемые вручную: T - самотестирование, выполняется, ничего не возвращает. T01 - тестирование 1 минуту, игнорируется инвертором, ничего не возвращает. TL - тестирование до определенного процента заряда, игнорируется инвертором, ничего не возвращает. CT - отмена самотестированияе, выполняется, ничего не возвращает. Q - выключение сигнала (зуммера), может не работать на некоторых ревизиях платы MX-U209M2DB, ничего не возвращает. S02R9999 - требование выключить ПК, сразу после команды ничего не возвращает, но при дальнейших запросах Q1 последнее значение меняется с 00000001 на 00000011. По факту выключение не выполняется, для сброса 00000011 до 00000001 нужно перезагрузить ИБП.