Счетчик эл.энергии + IR port

Fantick
Offline
Зарегистрирован: 09.12.2011

Добрый день! Прошу помощи!

Извините если эта тема уже была, но я ее не нашел.

У меня есть счетчик электроэнергии Landis&Gyr ZMD410CT44.0607

На счетчике на лицевой стороне есть оптический IR порт RX/TX.

C помощью программы Advanced Port Terminal и USB optical port, я могу общаться со счетчиком электроэнергии. посылаю запрос например 2F 3F 21 0D 0A или (/!?<CR><NL>), получаю ответ в виде типа счетчика и данных с регистров счетчика. Общение происходит на скорости 300 бод, 7e1.

Я решил подключить к этому дело ардуино и с помощью него посылать запрос и получать данные.

погуглив в интернете я нашел, что общение происходит по стандарту IEC 62056-21, и с такой схемой подключения IR приемника и передатчика, все должно работать.

Собрал на мокетке эту схему.
IR приемник и передатчик у меня такой
Использовал такой скетч
#define ir Serial1
byte cmd[] = {0x2F,0x3F,0x21,0x0D,0x0A};//  /?! <CR> <NL>


void setup()
{
  Serial.begin(9600);
  ir.begin(300);
}
void loop()
{
    if (ir.available())
    {
    char response = ir.read();
    response &= 0x7F;// convert 8N1 to 7E1
    Serial.print(response);
    }
    ir.write (cmd,5);
 }
 

При помощи этого кода и Меги, предварительно запрос делая с USB оптического порта я принимаю данные с электросчетчика, они отображаются корректно, но запрос на счетчик с Arduino Mega

2F 3F 21 0D 0A

не проходит корректно, счетчик его не воспринимает.

Направив IR передатчик на приемник, в сериал мониторе получаю кракозябру в виде =ek!=ek!=ek!=ek!, подскажите что я делаю не так, как мне добится корректного запроса от меги, куда копать, что прочитать, а то глаза уже замылились.

И еще одно осталось непонятно почему когда я устанавливаю скорость порта Serial.begin(300); и в сериал мониторе стоит 300 бод, со счетчика приходят кракозябры, но если я делаю так

Serial.begin(9600);
ir.begin(300);

то все хорошо.

Заранее благодарю за ответы.

 

 

 

 

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а как ты в терминале ардуины выставил скорость 300?

если испльзовать отдельную программу терминал еще есть вероятность что все будет корректно

да и зачем выставлять 300 для uart. какой практический смысл?

Fantick
Offline
Зарегистрирован: 09.12.2011

Да суть вопроса не в этом, главное что мне не удается послать, то что я хочу, а пытаюсь послать /?!, а на выходе из IR получаю, кроказябру, и естественно счетчик не воспринимает этот запрос.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

посмотрел получше. может всякие биты дополнительные нужны?

Fantick
Offline
Зарегистрирован: 09.12.2011

Но ведь данные со счетчика через ардуину приходят корректные.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Software serial работает в режиме 8n1 : 8 бит данных, четность none, 1 стоповый бит.

А нужен 7e1:7 бит данных, четность even, 1 стоповый бит.

данные должны быть проверены как то так, чтобы не учитывать бит четности

byte data = ir.read() & B01111111;

 

Fantick
Offline
Зарегистрирован: 09.12.2011

Если я снимаю сигнал запроса с USB оптического выхода , используя мегу, я вижу в сериал мониторе, все как надо /?!.

Fantick
Offline
Зарегистрирован: 09.12.2011

Да наверное, но я пытался преобразовать запрос в 7e1, но тоже кракозябра на выходе получается.

Fantick
Offline
Зарегистрирован: 09.12.2011

Software serial работает в режиме 8n1

А нужен 7e1

И как быть? Программный использовать?

Fantick
Offline
Зарегистрирован: 09.12.2011

Надо уходить, спасибо за подсказку!

slid83
Offline
Зарегистрирован: 23.11.2014

Коллеги, а может быть кто-то работал с оптическим портом электросчётчика Энергомера? Сейчас заказал оригинальную оптическую головку, которая подключается к USB. Схема у неё простая и доступная. Думаю с её помощью отловить команды запроса показаний, чтобы потом их отправлять уже с arduino. В правильном ли я направлении двигаюсь, или есть уже наработки?

edgi
Offline
Зарегистрирован: 02.09.2014

Добрый день!

У Вас получилось или нет считать и записать данные в счетчик?