Чтение данных со счётчиков Меркурий

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Здравствуйте.

Помогите пожалуйста с кодом. Я имею команды которыми можно управлять счётчик они в HEX формате но я незнаю как их отправить через Arduino на счётчик отправляю одно а на PuTTy вижу другое

 

char code1 = {0x00, 0xE4, 0x9A, 0xE0, 0x71, 0xAA, 0xFB, 0x0C};
 
void setup() {
        Serial.begin(9600);     // открываем последовательный порт 
                                //и задаем скорость обмена 9600 бод
}
 
void loop() {
 
        // отправляем данные

                Serial.print(code1, HEX);
               
}

 

maksim
Offline
Зарегистрирован: 12.02.2012
byte code1[8] = {0x00, 0xE4, 0x9A, 0xE0, 0x71, 0xAA, 0xFB, 0x0C};

void setup() {
  Serial.begin(9600);       // открываем последовательный порт 
  Serial.write(code1, 8);   // отправляем данные
}

void loop() {}

 

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Максим Спасибо за ответ но проблемма в том что когда я заливаю Arduino вашем кодом в мониторинге я вмжу слеедушее 

 

37 99 E8 AB 02 1E

 

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Например с помошью программы DockLight v2 я отправляю команду 00 E4 9A E0 71 AA FB 0C и счётчик отвечает на него и отключает внутреннее реле.

А тепер я хочу отправить этуже команду с Arduino Mega но у меня чтото не получается помогите пожалуйста буду очень благодарен 

boban_
Offline
Зарегистрирован: 09.10.2013

А если не программно формировать строку, отправляемую в порт?

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

А как сделать можете подсказать пожалуйста?

boban_
Offline
Зарегистрирован: 09.10.2013

Или так:

int b = 79;
Serial.print(b, HEX)

maksim
Offline
Зарегистрирован: 12.02.2012

mr-Ayaz пишет:

Например с помошью программы DockLight v2 я отправляю команду 00 E4 9A E0 71 AA FB 0C и счётчик отвечает на него и отключает внутреннее реле.

Сделайте скриншор программы как отправили и что получили в ответ.

UDP: И как вообще у вас подключен счетчик к дуине и как вы его подключаете к компу?

boban_
Offline
Зарегистрирован: 09.10.2013

Числа в массив вводятся в десятичной системе.

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

У счётчика есть порт RS232 подключаю счётчик к компу обычным USB to COM кабелем всё работает нормально тоесть отправляю данные и счётчик отвечает...

А когда отправляю с Ардуино то в мониторенге порта вижу другие байты

 

Скриншот

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

У вас в настройках порта 2 стоповых бита (9600, None, 8, 2), по умолчанию UART у дуины настроен один стоповый бит (SERIAL_8N1).

http://arduino.cc/en/Serial/Begin

Serial.begin(9600, SERIAL_8N2);

И еще раз:

maksim пишет:

И как вообще у вас подключен счетчик к дуине?

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Счётчик к Ардуине подключон по схеме ниже...

 

Arduino TX0 - Счётчик RX

Arduino RX0 - Счётчик TX

и плюс через конвертор RS232 to RS485

 

RS232 на Ардуине а RS485 на Счётчике

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Максим если у вас есть Скайп мы можем поговорить пожалуйста мне нужна ваша помошь заранее спасибо

boban_
Offline
Зарегистрирован: 09.10.2013

Надо ардуино -> rs232-rs485 -> счетчик.

maksim
Offline
Зарегистрирован: 12.02.2012

У дуины нет RS-232, у дуины есть UART. Подключив RS-232 к дуине напрямую ничего не зарабртает, а в некоторых случаях такое подключение может сжечь дуину.

http://easyelectronics.ru/svyaz-mikrokontrollera-s-kompyuterom-cherez-rs232.html

UDP: так что если еще не сдох UART дуины, то собирайте/покупайте преобразователь.

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

если я куплю  как вы думаете сработает. Навернека из за этого биты не правильно отправлялись так может быть

maksim
Offline
Зарегистрирован: 12.02.2012

Если вы вручную отправляете через DockLight в счетчик команды и они работаю корректно, то если указав в DockLight порт, на котором висит дуина (тот порт, который вы указываете в ArduinoIDE) получаете от дуины те же команды, то с преобразователем все должно завестись. Так же как вариант можно купить UART TTL -> RS-485 преобразователь или шилд на дуину.

Snubist
Offline
Зарегистрирован: 18.02.2013

Зачем тебе городить? Бери сразу   такой преобразователь

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

с программы DockLight я отправляю одно но приходит другое тогда так выходит что это из за переобразавателя Большое вам спасибо

maksim
Offline
Зарегистрирован: 12.02.2012

mr-Ayaz пишет:

с программы DockLight я отправляю одно но приходит другое тогда так выходит что это из за переобразавателя

Еще раз - не тот порт, на котором висит преобразователь, а тот на котором висит дуина.

maksim пишет:

указав в DockLight порт, на котором висит дуина (тот порт, который вы указываете в ArduinoIDE)

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Ниже схема подключения

 

Ардуино у нас на порте COM17

и есть переоброзователь USB to COM а она на порте COM13

 

для мониторинга я подключаю

Arduino (RX0) - USB to COM (TX) 

Arduino (TX0) - USB to COM (RX) 

 

открываю DockLight  выбираю порт COM13 (USB to COM) и отправляю что нибудь например в HEX-е 79

а в мониторинге у Ардуино вижу другое

Я так думаю что это из за UART как вы сказали мне нужен переоброзователь  

maksim
Offline
Зарегистрирован: 12.02.2012

И еще разок:

Укажите в DockLight COM17 и посмотрите что отправляет дуина. Если команды приходят от дуины те же, то останется только купить преобразователь.

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

на скриншоте посмотрите Дуина отправлет одно а DockLight показывает другое и плюс с PuTTy тоже пробовал тоже самое показывает другое???

maksim
Offline
Зарегистрирован: 12.02.2012

И в четвертый раз - на скриншоте указан СОМ13 - порт на котором преобразователь

maksim пишет:

Еще раз - не тот порт, на котором висит преобразователь, а тот на котором висит дуина.

В общем, разговор зашел в тупик, я уже не знаю как еще объяснять, перечитывайте ветку пока не поймете смысл написанного...

Molvik
Offline
Зарегистрирован: 15.05.2013

mr-Ayaz пишет:

Ниже схема подключения

 

Ардуино у нас на порте COM17

и есть переоброзователь USB to COM а она на порте COM13

 

для мониторинга я подключаю

Arduino (RX0) - USB to COM (TX) 

Arduino (TX0) - USB to COM (RX) 

 

mr-Ayaz что у вас за Ардуино?

Если на основе ATmega328 то как вы ее подключили через два порта(фото или схемку) - родной на COM17 и вторй COM13? ;)

Уберите с нее все подключения от  переоброзователя USB to COM13, и мониторьте через ее родной порт  COM17. Проверте настройки СОМ17 (почему на СОМ13 2 стоповых бита (9600, None, 8, 2)), может и на СОМ17 что-то в этом роде ;) .

Ардуину к счетчику подключайте через переходник UART TTL -> RS-485 .

Если есть возможность залезть внутрь счетчика ;) то наверно можно подключиться к его UART (TTL-уровня) без всяких преобразователей.

 Код предложеный 

maksim пишет:

byte code1[8] = {0x00, 0xE4, 0x9A, 0xE0, 0x71, 0xAA, 0xFB, 0x0C};

void setup() {
  Serial.begin(9600);       // открываем последовательный порт 
  Serial.write(code1, 8);   // отправляем данные
}

void loop() {}

 

прекрасно работает. 

byte code1[8] = {0x00, 0xE4, 0x9A, 0xE0, 0x71, 0xAA, 0xFB, 0x0C};
int inByte = 0;         // incoming serial byte

void setup() {
  Serial.begin(9600);       // открываем последовательный порт 
  //Serial.write(code1, 8);   // отправляем данные
}

void loop() 
{
  if (Serial.available() > 0) 
  {
    inByte = Serial.read();
    //Serial.write(inByte);
    Serial.write(code1, 8);
  }
}

Попробовал в Proteuse - скрин ниже

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Спасибо большое за ответ. У меня Ардуиино Мега с 2560 я кажется не сделал чтота не так.

Я прочитал что если я подключаю UART к RS232 то данные будут отправляться но не так как вы отправляете. а RS232 будет принемать данные по другому из за какогота уровня. Большое спасибо Максиму он подсказал что можно использовать MAX232 для переоброзования. Я сегодня проверю что будет и напишу вам ответ.

 

и к сати схема подключения таков на верху я ошибся

для мониторинга я подключаю

Arduino (COM17) - USB to COM (COM13)

Arduino (RX0) - USB to COM (TX) 

Arduino (TX0) - USB to COM (RX)

 

и ешё это один проект имееться 10 000 счётчиков Я знаю алгоритм работы счётчиков и команды в HEX формате для получения данных и управления счётчиком. но мало знаю про Ардуино кто хочет помочь и работать за хорошие реальные деньги пишите мне на мейл (mr-Ayaz@mail.ru)  и плюс после этого есть  другие проекты жду ваших ответов Я думаю что у нас чтота получится

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

mr-Ayaz пишет:

Я прочитал что если я подключаю UART к RS232 то данные будут отправляться но не так как вы отправляете,

а RS232 будет принемать данные по другому из за какогота уровня.

Может быть Вам по-английски будет более понятно: http://en.wikipedia.org/wiki/MAX232

Цитата:
"The drivers provide RS-232 voltage level outputs ( approx. ± 7.5V ) from a single + 5 V supply via on-chip charge pumps and external capacitors."

Причем в больших компьютерах RS-232 имеет напряжения ± 12V, а вот ардуино выше +5V напряжение не любит.

flashman
Offline
Зарегистрирован: 04.02.2014

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



for (i=0; i<m; i++)
    for (j=2; j<=k; j++)
       {
         Serial.write(myarray[i][j]);
         {

Заранее СПАСИБО!!!

maksim
Offline
Зарегистрирован: 12.02.2012

Что в массиве лежит то и выводится. 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Для этого нужно выводить через функцию Serial.print

flashman
Offline
Зарегистрирован: 04.02.2014

для примера забил массив единицами, а выводяться квадратики (какой-то символ наверное)

for (i=0; i<m; i++)
    for (j=2; j<=k; j++)
    {
      myarray[i][j]=1;

    }

сам массив определен как int

int myarray[4][53];

 

flashman
Offline
Зарегистрирован: 04.02.2014

Просто основная задача (в будующем) не просто выводить значения а передавать их в программу. Функция Serial.print с этим справиться?

mr-Ayaz
Offline
Зарегистрирован: 03.02.2014

Максим помогите пожалуйста

 

От чего это может быть???

maksim
Offline
Зарегистрирован: 12.02.2012

От незнания что такое тип данных и что показывает монитор. Монитор дуины показывает только символы кодов ASCII.

maksim
Offline
Зарегистрирован: 12.02.2012

Вы так и не понимаете самой главной и простой вещи - что такое представление данных. Например есть байт данных, в двоичном виде (BIN) его можно представить так 00001010, в десятичном виде (DEC) это будет число 10, в шеснадцетиричном (HEX) байт будет выглядеть как 0А, в кодах ASCII это символ перехода на новую строку. Но это все один и тот же байт данных, в каком виде вы бы его не предстасвляли это все равно все теже 8 бит - 00001010.

Так вот монитор дуины показывает принятые байты только как символы из таблицы кодов ASCII, вы же смотрите на одни и те же данные из DockLight в шеснадцетиричном виде (HEX), переключитесь в DockLight на вкладку ASCII и получите то же самое что и в мониторе дуины.

Sirocco
Offline
Зарегистрирован: 28.09.2013

Может глупость пишу, Но: а на ардуино нельзя никак эмулировать\поднять rs485? Вроде есть библиотеки для модбас. Вроде модбас и rs485 похожи.