smart ups

Forvad
Offline
Зарегистрирован: 09.02.2016

Ну, раз вы все решили и сделали,

ээх ... да чего я решил?  что накопал от того и пляшу 

кстати .. помоему эта 8-ка и прилетала в ответ на Q ... я и ЛАТР-ом упску вгонял на повышенное и пониженное напряжение и перегруз давал кучей лампочек .. эфекта ноль .. возвращается 8ка и всё... реакция была только на отключение питания. Тут да, ответ менялся (помоему на "10" если и соврал то не суть) 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Питание не буду дергать для проверки статуса - оборудование казенное. Алгоритм, которым пользуюсь, написал. Быть или не быть - решайте сами.

Forvad
Offline
Зарегистрирован: 09.02.2016

sadman41 пишет:

Питание не буду дергать для проверки статуса - оборудование казенное. 

изначально просьба была просто показать скетч .. ;) 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Так смотрите, мне не жалко - https://github.com/zbx-sadman/zabbuino/blob/master/src/uart_apcsmart.cpp

kolko
Offline
Зарегистрирован: 12.06.2018

lhassa пишет:

Добрый день!

Нужно управлять smart ups  и снимать с него данные c помощью arduino. Имею smart ups 450 c com портом и такой переходник для arduino. Подключаю к RX и TX serial пинам 0 и 1 и не вижу вывода ups, к этим пинам пробовал подключать модуль sim 900 все отлично работает, могу ввести команды и получить ответ. Может быть я не понял и этот переходник не подходит?

 

 

 

 

а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины? И если нет то почему? Заранее благодарю за ответ

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

kolko пишет:

а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины?

Нет, нельзя.

kolko пишет:

И если нет то почему?

Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.

Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.

kolko
Offline
Зарегистрирован: 12.06.2018

Jeka_M пишет:

Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.

Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.

спаял преобразователь уровней на двух транзюках, работает. Собственно заморочка то моя в том чтобы выводить на lcd_16, 2 с обновлением в 1000 мкс четыре переменных:

напряжение батарей,

текущую нагрузку в ваттах,

напряжение на выходе,

заряд батарей

Есть ардуино с самопальной RS232-UART, lcd_16, 2 и UPS APC-Smart-UPS-RT-2000. Как это сделать? С чего стартануть следует?

Forvad
Offline
Зарегистрирован: 09.02.2016

Jeka_M пишет:

Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.

Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.

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

kolko
Offline
Зарегистрирован: 12.06.2018

Forvad пишет:

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

да, это он самый

kolko
Offline
Зарегистрирован: 12.06.2018

получилось, надо использовать SoftwareSerial

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kolko пишет:

получилось, надо использовать SoftwareSerial

код будет?

kolko
Offline
Зарегистрирован: 12.06.2018
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

Serial.begin(2400);
mySerial.begin(2400);
mySerial.write("Y");
delay(150);

opros();
 if (!mySerial.available())mySerial.write("Y");
}

void opros(){
mySerial.write("O");
  delay(5);
  lcd.setCursor(0, 1);
  float outvolt = mySerial.parseFloat();
  lcd.print("Out ");
  lcd.print(outvolt,0);
  lcd.print("v");
}
в этом варианте вывод на дисплей выходного напряжения 
дальше додумаете какие данные вытянуть

 

selan61
Offline
Зарегистрирован: 15.12.2017

Подниму тему. Хочу снимать параметры ИБП Powerman Online 1000 Plus по порту RS232 вместо штатной UPSilon2000. Подключил переходник RS232-UART, как в посте 55, к нему обычный USB-UART на чипе CP2102. Поставил снифер Serial Port Monitor  и запустил UPSilon2000. Посмотрел, что приходит в порт. Протокол тут другой, чем у APS. Для запуска обмена отправляется F\r, потом Q1\r. После чего приходит строка с данными. 

Подключился через Pytti, 8N1 2400, вручную отправляю F\r, потом Q1\r, получаю данные.

Написал по предыдущему примеру такой скетч

[code]
#include <SimpleTimer.h>
#include <SoftwareSerial.h>

#define t1_interval   2000
byte n;
unsigned int timer0,timer1; 
//------------------------------------------------------
SoftwareSerial mySerial(2, 3); // RX, TX
SimpleTimer timer;
//------------------------------------------------------
void setup(){
    Serial.begin(9600);
    mySerial.begin(2400);
    timer1 = timer.setInterval(t1_interval, send_Q1);
}
//------------------------------------------------------
void loop(){
     timer.run();
} 
//------------------------------------------------------
void send_Q1(){
  n++;
  if(!mySerial.available()){
     if(n == 5){n = 0;mySerial.write("F\r");Serial.println("F");}
     else      {mySerial.write("Q1\r");Serial.println("Q1");}
  }
    opros();
}
//------------------------------------------------------
void opros(){
  if(Serial.available() > 0){
   String str = Serial.readString();
       Serial.println(str);
  }
}
//END---------------------------------------------------
[/code]

Проверил между 2 ардуинами, работает. А ИБП ничего не отправляет. Может кто подскажет, что я делаю не так? В коде на один F отправляю 4 Q1.

 

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

Добрый день!

Не знаю что и как вы там тестировали между двумя ардуинками, но посмотрите внимательно на свой опрос(), не с того порта читаете!

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

Send() выполняйте интервально, а вот чтение и обработку ответа Recv() (у вас это опрос()) надо делать оперативно -> убрать в цикл loop без всяких дополнительных проверок и ограничений, просто проверять mySerial.available(), читать и обрабатывать дальше.