Добрый день! Прошу помощи!
Извините если эта тема уже была, но я ее не нашел.
У меня есть счетчик электроэнергии 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);
то все хорошо.
Заранее благодарю за ответы.
а как ты в терминале ардуины выставил скорость 300?
если испльзовать отдельную программу терминал еще есть вероятность что все будет корректно
да и зачем выставлять 300 для uart. какой практический смысл?
Да суть вопроса не в этом, главное что мне не удается послать, то что я хочу, а пытаюсь послать /?!, а на выходе из IR получаю, кроказябру, и естественно счетчик не воспринимает этот запрос.
посмотрел получше. может всякие биты дополнительные нужны?
Но ведь данные со счетчика через ардуину приходят корректные.
Software serial работает в режиме 8n1 : 8 бит данных, четность none, 1 стоповый бит.
А нужен 7e1:7 бит данных, четность even, 1 стоповый бит.
данные должны быть проверены как то так, чтобы не учитывать бит четности
Если я снимаю сигнал запроса с USB оптического выхода , используя мегу, я вижу в сериал мониторе, все как надо /?!.
Да наверное, но я пытался преобразовать запрос в 7e1, но тоже кракозябра на выходе получается.
Software serial работает в режиме 8n1
А нужен 7e1
И как быть? Программный использовать?
Надо уходить, спасибо за подсказку!
Коллеги, а может быть кто-то работал с оптическим портом электросчётчика Энергомера? Сейчас заказал оригинальную оптическую головку, которая подключается к USB. Схема у неё простая и доступная. Думаю с её помощью отловить команды запроса показаний, чтобы потом их отправлять уже с arduino. В правильном ли я направлении двигаюсь, или есть уже наработки?
Добрый день!
У Вас получилось или нет считать и записать данные в счетчик?