smart ups
- Войдите на сайт для отправки комментариев
Втр, 18/02/2014 - 17:10
Добрый день!
Нужно управлять smart ups и снимать с него данные c помощью arduino. Имею smart ups 450 c com портом и такой переходник для arduino. Подключаю к RX и TX serial пинам 0 и 1 и не вижу вывода ups, к этим пинам пробовал подключать модуль sim 900 все отлично работает, могу ввести команды и получить ответ. Может быть я не понял и этот переходник не подходит?
rx tx поменяйте местами. питание подали?
если все правильно как минимум кашу из букв получите. дальше нужно узнать или подобрать скорость. и возможно поднастроить режим приема данных
2400 скорость, и питание есть и местами менял, один раз получил постоянный перевод строки
упс данные всегда шлет или по событию?
Тестировал я подобную штуку (RS232-TTL конвертер), например такую. Подключил к разъему DB9 этой штуки конвертер RS232-USB (например MasterKit BM8050), USB воткнул в комп (может драйвера потребуются, не помню уже), получается такая связка:
Arduino --- ваш RS232-TTL конвертер --- RS232-USB конвертер --- ПК
Простенький скетч на прием данных из Serial и оправки их обратно. На ПК запускаете любую терминальную программу на COM порт установленного RS232-USB конвертера. Проверяете работоспособность вашей штуковины, находите скорость передачи и т.д.
по событию и по команде, как пишут в этой статье http://www.networkupstools.org/ups-protocols/apcsmart.html
выключал его из сети, пищит но в порт ничего не шлет (
по событию и по команде, как пишут в этой статье http://www.networkupstools.org/ups-protocols/apcsmart.html
выключал его из сети, пищит но в порт ничего не шлет (
А обратили внимание на то, что есть отличие от стандартной распиновки разъема DB9 ? Посмотрите в самом начале описания по вашей ссылке абзац RS232 Differences. Там сказано, что TxD идет не на контакт 3 (как обычно), а на контакт 1 разъема DB9!
http://blog.marvins.ru/administrirovanie/monitorim-sostoyanie-apcups-v-f...
Да, конечно! Использую входящий в комплект кабель 940-0024C. Ну только пришлось еще дозаказать такой вот переходник
Serial RS232 DB9 9-Pin Male to Male, проверял и его методом прозвона,
Кабель и порт UPS проверял через компьютер на стандартном ПО которое шло к бесперебойнику.
Да, конечно! Использую входящий в комплект кабель 940-0024C.
Давайте разбираться ... Тут должно быть все очень просто.
Прозвоните кабель 940-0024C, получите такую картинку (интересует соответсвие номеров контактов трех верхних линий: Rx, Tx, GND собоих сторон)?
Serial RS232 DB9 9-Pin Male to Male, проверял и его методом прозвона,
Какую распиновку видите при прозвоне?
Похоже, что должна быть такая картина: 3 --- 3, 2 --- 2, 5 --- 5, это так?
Кабель и порт UPS проверял через компьютер на стандартном ПО которое шло к бесперебойнику.
Это хорошо.
Serial RS232 DB9 9-Pin Male to Male, проверял и его методом прозвона,
Какую распиновку видите при прозвоне?
Похоже, что должна быть такая картина: 3 --- 3, 2 --- 2, 5 --- 5, это так?
да, именно так!
А прозвонку 940-0024C делали, что там?
пока нет, вечером сделаю, но раз с компом по этому кабелю работало, думаю все в порядке, но сделаю, т.к. сам понимаю что все просто но не работает (
может быть в коде дело? у меня мега.
Код норм, но тут не в коде дело. Прояснить надо пару-тройку моментов:
1) Проверить зверька, который в первом посте с помощью 2-х терминалов на компе, но для этого нужен конвертер RS232-USB для подкючения зверька к компу, ну или комп с COM-портом. Тогда вы будете знать, что с ним все в порядке. Дайте ссылку на WiKi зверька или его схему, хочу понять как у него согласуются пины на DB9 и на TTL к Arduino.
2) Далее. Убедиться что оба сигнала (Tx, RX) проходят и правильно проходят от UPS до Arduino через кучу "перемычек". Тут и выяснится как правильно подать TTL Tx/Rx(зверька) на Tx/RX(Arduino), менять или не менять их местами.
3) А вот после этого надо курить матчасть по самому протоколу UPS. Меня, например, насторожила такая фраза из описания по вашей ссылке, может на этом этапе и косяки!?:
The Smart Protocol
Despite the lack of official information from APC, this table has been constructed. It's standard RS-232 serial communications at 2400 bps/8N1. Don't rush the UPS while transmitting or it may stop talking to you. This isn't a problem with the normal single character queries, but it really does matter for multi-char things like "@000". Sprinkle a few calls to usleep() in your code and everything will work a lot better.
Вот ссылка на подобную разработку. Может по программе что-то полезное найдете.
1) ну вот все что по нему есть, только у меня микросхема огромная и не впаяна а сидит в гнезде
http://dx.com/p/rs232-serial-port-to-ttl-converter-module-w-transmitting...
2) да я уже думал об этом, и так и так пробовал, менял и в кабеле и подключение к arduino
3) я так понимаю нужно передавать по символу? но вроде и так скорость порта низкая и UPS должен принимать данные.
Ну раз так написано и на это специально обращают внимание, то пробуйте по-символьно передавать с задержкой usleep() - я так понял в микросекундах.
ну он бы хоть один символ отправил сам
А прозвонку 940-0024C делали, что там?
сделал прозвонку, кабель в порядке, все по схеме.
Вот ссылка на подобную разработку. Может по программе что-то полезное найдете.
ну мне бы пока хоть какие данные получить с него, у меня тоже что-то похожее но arduino просто будет отсылать ответ от ups на сервер по udp. Вся эта двухсторонняя связь уже реализована на примере модуля sim 900 и отлично работает.
Собрал тестовый стенд: APC UPS --- кабель 940-0024С --- конвертер RS232-USB --- PC. Запустил на ПК терминал 2400/8/1, ответа на команды нет :( Пошел курить мануал по протоколу по вашей ссылке... а там написано следующее:
Выход из этого режима - символ 'R'.
Протестировал несколько команд - все работает. Но вот команды из двух символов не смог проверить, например самая первая - '^A', видимо это программным способом можно проверить с задержкой между символами usleep(), как описано в мануале.
Дерзайте!
И еще на заметку... я давал ссылку на подобную разработку, там даже код программы приведен, вы бы хоть глянули, может и сами разобрались с проблемой!
Только я бы написал иначе: Serial.print('Y'), т.к. UPS от нас ждет символа, а не строку.
Теперь разберитесь со своим зверьком (Tx/Rx к Arduino) и все у вас должно получиться!
Да, конечно я видел вход в режим smart, еще раз все проверил посылаю Y никакой реакции ((( в консоле пустота ((
А вы не пробовали без команд он что либо отправляет если выключить блок из сети 220? И какой символ на конце?
Странно. Опишите популярно ваш тестовый стенд. Всю связку железа, какой софт и где крутиться. Можете картунку нарисовать для наглядности, может и весь код для тестирования связи с UPS.
Включение не проверял, но у меня есть подозрение, что он не будет ничего посылать, если это не настоено в режиме Smart (проверю позже).
Ну кабель от смарта идет в переходник о котором я говорил выше, к нему идет питание 5v от блока питания и от этого блока питания идет питание на arduino mega, это не совсем тестовый стенд а рабочая система управления домом которая представляет из себя сеть из контроллеров uno, nano и mega, ну это не так важно т/к/ в ней успешно работает модуль sim900 на serial3, в serial2 на пины 16 и 17
вот верхний кусок кода на скрине подает команды на модуль sim900, берет он эти команды от udp запроса программы на delphi, она на скрине, а ответ получаем от контроллера тоже в виде udp запроса и смотрим его на консоле виртуальной машины где и запущен скрипт на php который принимает и отвечает контроллерам uno,nano и mega
на скрине отправка AT команды на модуль sim900 и прием ответа от него
http://i58.fastpic.ru/big/2014/0220/9e/6b8ac9e58f6759d97348fe21b7811a9e.png
Я про тестирование вашей проблемы спрашиваю, а вы мне рабочий проект, да еще и про код SIM, который к теме не относится.
Протестировал UPS своим стендом (выше):
Не передавая в упс символа 'Y' при отключении сети 220В, упс ничего не возвращает. Перехожу в режим Smart - символ 'Y', отключаю сеть 220В, упс пищит и раз в 30 секунд передает символ '!'. Штук 6 точно передал, потом перестал, дальше не разбирался.
Вы все это можете сами протестировать: и своего зверька подключенного к Arduino и PC, и UPS подлюченный к PC из терминала.
Спасибо! буду пробовать! Теперь хоть ясно что ничего ждать от него не войдя в режим не стоит(
Осталось найти необходимые переходники и тестировать, подозреваю что зверек бракованный(
Так если вы свой конвертер не проверяли правильным способом, как можно утверждать что он бракованный?
Я так понял, что в вашем конвертере микруха не запаяна, а сидит в гнезде, есть вариант поменять ее, после неудачной проверки.
Несколько советов по методике тестирования и настройке сериал устройств:
1) Вообще, я всегда при построении сложных комплексов из нескольких устройств проверяю/тестирую прием/передачу каждого устройства отдельно от остальных, это исключает наложение ошибок/проблем от других устройств в комплексе.
2) С учетом пункта (1): физически подключаю устройство к ПК напрямую по USB (без софтверных перемычек на MCU) (для этого обзавелся полезными конвертерами: RS232-TTL, USB-TTL, RS232-USB). Из терминальной программы на ПК проверяю правильность подключения интерфейсов передачи данных (Rx/Tx) устройства, скорость обмена информацией, анализирую возвращаемые данные в ответ на переданные в устройство и т.д. Поверьте, это сэкономит кучу времени при тестировани и в дальнейшем при написании рабочего кода под MCU и позволит избежать многих ошибок и недопониманий!
3) После обследования в пункте (2): теперь, зная все о новом устройстве, можно подключить его к MCU и разносторонне протестировать простыми программами (скетчами, я их отдельно по каждому устройству сохраняю, еще и несколько вариантов разных проверок - на будущее), тут опять ПК может прийти на подмогу для мониторинга интерфейсов приема/передачи из терминальных программ.
4) И только теперь новое утройство можно подключить в комплекс/проект, добавить в код проекта новый код.
Для вашего примера с подключением UPS (новое устройство) через ваш RS232-TTL конвертер (новое устройство) к Меге я бы тестирование провел так:
1) Проверяем RS232-TTL конвертер через такую связку (самый первый тест):
RS232-TTL (проверяемый) --- RS232-USB (если нет COM на ПК) --- ПК.
Подключаем стабилизированное питание к выводам V и GND на RS232-TTL (5В/3.3В - не знаю какая микруха в нем и как обвязана). Надежно замыкаем контакты Rx-Tx на RS232-TTL. На ПК с помощью одного терминала на виртуальном COM от RS232-USB (или физическом) посылаем данные и ловим эхо. Все! Если нет эхо-данных и при условии что не напутали с подключением, то вероятно ваш конвертер неисправен. Но можно заменить микруху на нем и снова проверить!
2) Проверяем RS232-TTL конвертер через такую связку:
Мега(UART2) --- RS232-TTL (проверяемый) --- RS232-USB (если нет COM на ПК) --- ПК.
На Меге: С Меги подключаем стабилизированное питание к выводам V и GND на RS232-TTL (5В/3.3В - не знаю какая микруха в нем и как обвязана). Подключаем TX/Rx RS232-TTL к Rx2/Tx2 на Меге (может потребуется поменять их местами!). Пишем "софтверную перемычку" - читаем Serial и посылаем в Serial2, читаем Serial2 и посылаем в Serial. На ПК с помощью двух терминалов (виртуальный COM от USB Меги и COM от RS232-USB (или физическом)) посылаем/принимаем данные (обмен данных между двумя терминалами).
Попробуйте эти варианты, отпишите.
Проверка связи с UPS аналогична:
UPS (проверяемый) + кабель 940-0024C --- RS232-USB (если нет COM на ПК) --- ПК. На ПК через терминал изучаем протокол APC UPS.
Нашел давний тест (вроде с arduino.cc взял) для изучения класса Serial и проверки зверька Iteaduino Mega 2560 (на комменты не обращайте внимание, я тогда только познакомился с арду-платформой, как ребенок млел от радости за каждую работающую строчку кода :):
Эту "софтверную перемычку" как раз и использовал потом для проверки дата-кабеля RS232-TTL от старой мобилы SIEMENS.
Сделал первый тест, но немного по другому. К сожалению сейчас нет под рукой контроллера RS232-USB и com порта в компе тоже нет (( поэтому залил в мегу перемычку опробовал вначале на модуле sim900 на serial1 в результате получаю эхо (немного не понятно почему только эхо а не ответ от контроллера), затем тестурую smart ups, посылаю Y в результате пустота (( Замыкаю RX и TX в кабеле к UPS передаю любой набор символов получаю эхо. Вывод. Неисправен порт UPS?
Конвертер или преобразователь RS232-USB, а не контроллер.
Про СИМ ничего не понял, не пользовал. А что СИМ должен в ответ передавать? Мой код правильно поменяли, проверьте еще раз.
Про УПС тут все понятно: ваш RS232-TTL модуль исправен (собственно микруха)! Т.к. вы замкнули Rx Tx на стороне RS232, то у вас данные из Меги (Tx) прошли через ваш конвертер, через ваше замыкание вернулись обратно в конвертер и пришли обратно в Мегу (Rx). Это не говорит о неисправности УПС, кстати, вы же проверяли связку УПС-ПК родным софтом и все работало!, вы это писали выше. И еще, ваше замыкание только подтверждает исправность конвертера, но ничего не говорит о правильности подключения Rx/Tx конвертера к SerialX Меги по отношению к пинам Rx/Tx на DB9. Поменяйте местми Rx/Tx конвертера при подключении к SerialX Меги и снова протестите 'Y' на УПС, замыкание на кабеле уберите! может и СИМ протестили с каким-нибудь замыканием :)
с сим разобрался, просто он ждал перевод строки
родным софтом UPS проверял пару лет назад ) сейчас нет компа с ком портом
да я понял что эхо не гарантирует правильность подключения RX и TX по отношению к DB9, менял местами, ответа нет(
похоже нужно опять проверять родным софтом и терминалом на ПК, пойду починять старый железный комп с ком портом))))
собрал комп с com портом, протестировал в терминале, все отлично работает как по мануалу.
Тогда я вообще ничего не понимаю, переходник TTL работает, кабель живой, UPS работает, все по отдельности работает вместе нет (
разобрался! нужно поменять местами RX и TX на RS232-TTL по отношению к DB9.
я это делал в самом начале с помощью трех перемычек но тогда не знал что нужно передавать Y чтобы получить ответы
в итоге нужно чтобы было так 2-3, 3-2, 5-5 в кабеле UPS - TTL конвертер (не зря у него разъем мама и мне пришлось заказать переходник папа-папа)
Тогда вам нужно купить NULL MODEM MINI ADAPTER (папа-папа) вместо вашего GENDER CHANGER и перемычек. NULL MODEM кроссирует линии Rx/Tx - 2-3, 3-2, 5-5. Все.
Для тестирования USART устройств нашел такой универсальный конвертер на DFRobot.
Тоже не получается считать данные контроллером.
Через COM-порт устройство откликается отлично.
Там для отправки или приема данных подозреваю нужн определенный формат?
Пока разбираюсь...
Вот как выглядит обмен.
Я использую Serial1 для чтения данных с UPS.
Сейчас хочу выводить данные в Serial.
последовал по стопам и сделал такой же обмен при этом у меня опрашиваются два UPS, использую переключалку для UART
самое подробное описание протокола здесь http://www.apcupsd.org/manual/#apc-smart-protocol
такой вопрос, вы реализовали свой проект?
К кому вопрос?
а если Вам? :) можно задать? Вы же говорили чуть выше что "последовал по стопам и сделал такой же обмен"
Может у Вас остался с тех времён скетч?
Вот это пинг - два года...
Вот это пинг - два года...
всмысле? меня этот вопрос заинтересовал всего дня три назад. Вчера я нашел эту ветку и спросил глянуть наработки, вдруг сделано более правильно, чем я тут наизобретал
Так показывайте, мы подскажем. Может быть. APC рулить -дело нехитрое, но не без нюансов. ...Ну или можете ждать, конечно, людей из 2016-го.
Так показывайте, мы подскажем. Может быть. APC рулить -дело нехитрое, но не без нюансов. ...Ну или можете ждать, конечно, людей из 2016-го.
как скажите ;) вечером, из дома, опишу свою задачу, что я сделал и какие у меня остались вопросы
Так показывайте, мы подскажем. Может быть. APC рулить -дело нехитрое, но не без нюансов. ...Ну или можете ждать, конечно, людей из 2016-го.
расказывать особо и нечего .. есть аппаратура стоящая в отдалённом безлюдном месте, и приехав туда можно обнаружить сдохший аккум на ИБП и ломится обратно за аккумом. Сама аппаратура имеет несколько входов для контроля дверей, дыма, датчика снижения температуры и тому подобного .. и их состояние можно видить удаленно. Все это работает на простом замыкании контактов релюхой. т.е задача подвязать еще идин вход на контроль аккума ИБП. Мое предложение "прилепить" на лампочку УПС-ки :) копеешный модуль с фотодатчиком и реле не вызвал восторга :) сказали такая залепуха не проканает :) Отстаётся брать с ИБП по RS232
В протоколе обмена нашел команду запроса статуса "Q". и таблицу ответов ... и сколько я ны пытался моделировать разные ситуации в ответ прилетает один и тот же код (не помню какой) ...
Ну и макс что даёт хоть какой то результат .. это посылка "Y" (smart mode) И при горящей лампочке "замените батарею" в ответе всегда присутстует "?" Ну его и ловим его посылая скажем раз в час "Y"
Ответы от упса зависят. У меня старый Smart-UPS 650I не выдает и десятой доли того, что Smart-UPS 2200 RM вываливает.
Обмен у вас не очень правильно написан. Нужно послать 'Y', получить 'SM', после этого команду уже слать и ответ ждать. Завершить сеанс через 'R' (команда без ответа).
В вашем же коде 'Y' отсылается, подтверждение перехода в SMART режим не контролируется, сразу чтение идет чего-то там и интерпретация.
Ждать строку можете через https://www.arduino.cc/en/Serial/ReadString, если по-простому. Между посылками в UPS надо паузы делать, APC не любит торопыг. Я 10 мс паузы ставлю после символа.
Ну, раз вы все решили и сделали, чего я вам советую тут. У меня всё читается нормально