Подключение весов по RS232 к Arduino Mega + MAX3232 - нет ответа

reallord
Offline
Зарегистрирован: 09.10.2015
 
 

Добрый день!
Подскажите пожалуйста, насколько реализация Arduino + COM порт на MAX3232 является 100% COM портом.
Ситуация такая, есть весы, которые хотим подключить по RS232. CAS DB-2

2) Весы + компьютер = OK. Беру терминал, руками отправляю в порт 0х05, получаю ответ 0х06, отправляю 0х12 - ПРОФИТ. Штатный тестер весов делает то же самое.

3) Arduino + компьютер = OK.  Беру терминал, из Ардуино отправляю в порт 0х05, пишу ответ 0х06, отправляю из Ардуино 0х12 - ПРОФИТ.
Сравненение лога обмена между: комп+весы и комп + ардуино = отличий нет.

4) Весы + Ардуино = НИЧЕГО. Просто при отправке в порт, ничего не приходит. Serial.read() всегда дает -1. Serial.available()>0 не срабатывает. Весы ничего не отвечают. Переключаю СРАЗУ кабель на комп и все есть.

Все тесты с одним и тем же кабелем, компом, весами и Ардуино.
Просто уже не знаю куда дальше копать.

Помогите пожалуйста, кто в теме!

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

Весы могут использовать еще и другие ноги. Если вы использутете полноценный провод (то есть со всеми 9-ю линиями) посмотрите в настройках весов нет ли там выбора аппаратного/программного управления потоком (DTR, DSR, RTS, CTS). Если таких настроек нет, то возможно, что на вашем преобразователе данные линии как то между собой соединины, если так перережте дорожки или используйте провод только с 3-мя линиями (GND, RX, TX).

reallord
Offline
Зарегистрирован: 09.10.2015

Провод собран именно с 3-ми линиями. На Ардуино не увидел никаких настроек Serial кроме скорости. Аппаратного управления потоком там нет точно. DTR, DSR, RTS, CTS = off

 

Radjah
Offline
Зарегистрирован: 06.08.2014

А если небольшую задержку после отправки вставить? Весы могут и не сразу ответить.

reallord
Offline
Зарегистрирован: 09.10.2015

Думал об этом, поставил delay(5), но возможно надо побольше. Сегодня проверю.

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

Вы лучше код покажите, который в дуину заливаете.

reallord
Offline
Зарегистрирован: 09.10.2015
 
 
 
 
void setup() {
  Serial.begin(9600);
}

void loop() {
  int CasStartMsg = 0x05;
  int CasRequestMsg = 0x12;
  int CasReadyMsg = 0x06;
  int SerialAnswerByte;
  
  Serial1.begin(9600);
  Serial1.write(CasStartMsg);
  delay(50);
  if (Serial1.available() > 0) {
    SerialAnswerByte = Serial1.read();
    Serial.println(SerialAnswerByte, DEC);
  }
  else {Serial.println(100);}

  Serial1.write(CasRequestMsg);
  delay(50);
  if (Serial1.available() > 0) {
    SerialAnswerByte = Serial1.read();
    Serial.println(SerialAnswerByte, DEC);
  }
  else {Serial.println(200);}

  Serial1.end();
  delay(3000);
}

Судя по логу обмена КОМП <-> Весы, ответ происходит за 15-20мс.

Добавление задержки в 30мс не помогло. От весов не ответа.

Перетыкаю этот кабель в комп - все есть. Мистика.

 
 
maksim
Offline
Зарегистрирован: 12.02.2012
byte CasStartMsg = 0x05;
byte CasRequestMsg = 0x12;
byte CasReadyMsg = 0x06;
byte SerialAnswerByte = 0;


void setup() 
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() 
{
  Serial1.write(CasStartMsg);
  while(!Serial1.available());
  SerialAnswerByte = Serial1.read();
  Serial.println(SerialAnswerByte, DEC);

  Serial1.write(CasRequestMsg);
  while(!Serial1.available());
  SerialAnswerByte = Serial1.read();
  Serial.println(SerialAnswerByte, DEC);
  delay(3000);
}

Для проверки замыкаете на конце провода (который втыкаете в весы) RX с TX и жмете ресет на дуине. Должно приходить то же что и отправляется.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Чем дело кончилось ?

reallord
Offline
Зарегистрирован: 09.10.2015

Вопрос решил, но аппаратно. 
Как выяснилось, все весы требуют существенно БОЛЬШЕГО напряжения на RS-232 порту.
Более-менее заработало, когда подняли напряжение до 12 V на проводе питания. 
COM порт на компе, как оказалось, по умолчанию выдает 12 V на проводе питания, а ардуино только 5 V.

Из-за этого весы не видят сигнал. Похоже там либо отсечка как несущественный сигнал, либо просто такая плата сопряжения RS-232 в весах, что она требует внешнего питания и не работает без него.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Я сам сейчас работаю с CAS PDI, однако мне нужен только вес, поэтому команда не 0x12, а 0x11 и считываю только 15 символов.

Оба кода (см. выше ) в плане приема не работают, они читают отлько один символ и стартуют снова -  цикл loop.

Не совсем понял где Вы поднимали питание.  На Serial1 ? У COM порта питание отдельно не выводится.

Вы http://ru.aliexpress.com/item/10pcs-lot-MAX3232-RS232-to-TTL-Serial-Port-Converter-Module-DB9-Connector-MAX232/32275851510.html?isOrigTitle=true&isOrig=true#extend применяли ?

Вот рабочий код + плата RS232-to-TTL. Все работает штатно. Ардуино от USB шнурка, CAS PDI включен, и все :).

byte CasStartMsg = 0x05;
byte CasRequestMsg = 0x11 ;
byte CasReadyMsg = 0x06;
byte SerialAnswerByte = 0;


void setup()
{
  Serial.begin(115200);
  Serial1.begin(9600);

  Serial.println("start");
}

void loop()
{
  Serial1.write(CasStartMsg);
  while (!Serial1.available());
  SerialAnswerByte = Serial1.read();
  Serial.print(SerialAnswerByte, HEX);
  Serial.print(" ");
  Serial1.write(CasRequestMsg);


  for (int i = 1; i <= 2; i++)
  {
    while (!Serial1.available());
    SerialAnswerByte = Serial1.read();
    Serial.print(SerialAnswerByte, HEX);
  }

  Serial.print("[");

  for (int i = 3; i <= 12; i++)
  {
    while (!Serial1.available());
    SerialAnswerByte = Serial1.read();
    Serial.write(SerialAnswerByte );
  }

  Serial.print("]");

  for (int i = 13; i <= 15; i++)
  {
    while (!Serial1.available());
    SerialAnswerByte = Serial1.read();
    Serial.print(SerialAnswerByte, HEX);
  }

  Serial.println(" ");
  delay(500);
}

Старт и прием 15 символов, прием разбит на 3 цикла, 1-й это прием и печать стартовых байтов 0х01 и 0х02 и их вывод в формате Нех, 2-й это показания весов в символьном формате, 3-й это прием и печать контрольной суммы и стоповых байтов 0х03 и 0х04 и их вывод в формате Нех. Скобки для выделения.

6 12[S- 1.635kg]7D34
6 12[S- 1.635kg]7D34
6 12[S- 1.635kg]7D34
6 12[S- 1.635kg]7D34
 
 
kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Забыл :)

Еще конечно переходной шнурок папа-папа, между мамой шнурка CAS и мамой платы RS232-to-TTL.

Шнур перекресный 2на 3, и 3 на 2, ну и 5 на 5.

Чтобы его убрать в дальнейшем есть платы с разъемом папа https://ru.aliexpress.com/item/MAX3232-RS232-to-TTL-Serial-Port-Converter-Module-DB9-Contor-MAX232/1859067184.html?spm=2114.13010608.0.0.cs0kY1.

Levkrss
Offline
Зарегистрирован: 14.03.2019

Получилось ли подключить весы к arduino ?

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Да все работает уже 2 год.

Основная проблема в соглосовании уровней сигнала. RS232-to-TTL

 

У весов CAS честный RS232 с уровнями -12v и +12v.

У Ардуино уровни TTL 0v и +2,4-5v.

Ну и прикол от CAS - не стандартное расположение нуля в разъеме.

в RS232 разъеме ноль на 7 ноге, у CAS на 5 :)

Levkrss
Offline
Зарегистрирован: 14.03.2019

Ну все что выше ты написал я понял, а как с разностью 12 и 5 вольт проблему решил ? Будь добр на почту напиши плз 

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Нажмите на ссылку RS232-to-TTL

На плате 2 разьема

 

Первый блочный разъем RS232 - 9 пин это для кабеля COM9.

на 2  платном  разьеме  штырьки 4 шт они идут на Ардуинку (ниже название пинов)

5V

Ноль

TX

RX

 

Соединяем 

весы -> кабель RS232 -> плата согласования уровней RS232-to-TTL -> Ардуино

 

 

 

Levkrss
Offline
Зарегистрирован: 14.03.2019

kez63 пишет:

Нажмите на ссылку RS232-to-TTL

На плате 2 разьема

 

Первый блочный разъем RS232 - 9 пин это для кабеля COM9.

на 2  платном  разьеме  штырьки 4 шт они идут на Ардуинку (ниже название пинов)

5V

Ноль

TX

RX

 

Соединяем 

весы -> кабель RS232 -> плата согласования уровней RS232-to-TTL -> Ардуино

 

 

 

глупый вопрос, но конвертор с ардуино соединять rx - Rx или rx - tx ??

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

Накрест соединяй. Если не заработает, то прямо.

Levkrss
Offline
Зарегистрирован: 14.03.2019

Я так сегодня уже делал. Подключаю в обратном направлении  и вставляю штекер с Выключеными весами и начинаю получать просто нон-стоп ерунду. В когда подключаю напрямую - тишина. Вот и решил узнать. ))

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

Может весы в активном режиме работают - постоянно данные стримят? Или провод (со стороны RS232) в воздухе болтается и ловит радио Маяк.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

sadman41 пишет:

глупый вопрос, но конвертор с ардуино соединять rx - Rx или rx - tx ??

 

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

ТХ - ТХ

RX-RX

Хотя ?! :)

Замкните TX на RX на выходе конвектора и прогоните с гипертерминала прохождение сигнала.

Что бы убедиться в работе конвектора

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Levkrss пишет:

Я так сегодня уже делал. Подключаю в обратном направлении  и вставляю штекер с Выключеными весами и начинаю получать просто нон-стоп ерунду. В когда подключаю напрямую - тишина. Вот и решил узнать. ))

 

Марка весов ?

"начинаю получать просто нон-стоп ерунду"  - скорости совпадают ?

Levkrss
Offline
Зарегистрирован: 14.03.2019

Масса-к, скорости пробовал.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Програмный протокол весов знаете ?

 

скорости пробовал - и как ? Вкусно ? :)  подробнее :)

Levkrss
Offline
Зарегистрирован: 14.03.2019

Программный протокол описан в документации, так как я с rs232 общаюсь первый раз, вот и узнаю что и как )

Levkrss
Offline
Зарегистрирован: 14.03.2019

Я так понимаю max3232 подключать к ардуино накрест? 

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

Подключать-то вы можете правильно. Выходы на модуле могут быть подписаны неверно.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

У Вас max3232 как отдельная микросхема или плата ?

Levkrss
Offline
Зарегистрирован: 14.03.2019

Плата

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Самое простое - в цикле шлите с ардуинки или 1 символ или группу "012345678901234567890"

Только проверяйте готовность регистра передачи

или с интервало 200-300 мс

 

ТХ разъема платы на RX компьютера

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

Levkrss
Offline
Зарегистрирован: 14.03.2019

Эмммм.... Ладно, буду завтра продолжать курить дзен.

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Тоже самое с весами

дайте стабильный вес на весы

и подбирайте скорость

очень редко когда передача двоичная, как правило при совпадении скоростей видны символы как на дисплее весов

 

если они шлют поток без запроса

 

если есть мануал ПРОГРАМНОГО обмена т.е. шлем команду птакую  - то и получаем ответ такой то 

вышлете гляну

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Levkrss пишет:

Эмммм.... Ладно, буду завтра продолжать курить дзен.

https://massa.ru/upload/iblock/ff8/massa-k-scales-connection-to-pc.pdf - шикарное описание на весы.

 

Курите с 3 главы :)

Levkrss
Offline
Зарегистрирован: 14.03.2019

kez63 пишет:

Levkrss пишет:

Эмммм.... Ладно, буду завтра продолжать курить дзен.

https://massa.ru/upload/iblock/ff8/massa-k-scales-connection-to-pc.pdf - шикарное описание на весы.

 

Курите с 3 главы :)

Проверили получение на компьютер данных через usb - ttl, все работает нормально.

Мне же не нужен max3232 для получения данных на UNO? если напрямую подключу? 

Вставляя стандартный пример с SoftwareSerial и подключая Rx - Tx и следовательно обратно, не получаю ничего в ответ. Что я делаю не так? Есть идеи ?

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

Если считаете, что не нужен - не используйте. Это же ваш проект, Вы в нём инженер и ведущий разработчик. 

strarbit
Offline
Зарегистрирован: 12.06.2016

Levkrss пишет:

Проверили получение на компьютер данных через usb - ttl, все работает нормально.

Мне же не нужен max3232 для получения данных на UNO? если напрямую подключу?

нужен max3232 stogo UNO 5V and  scales 12V

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Levkrss пишет:

Проверили получение на компьютер данных через usb - ttl, все работает нормально.

Что проверили , чем проверили, что подключали ?

Levkrss пишет:

Мне же не нужен max3232 для получения данных на UNO? если напрямую подключу? 

Что к чему подключите ?

Levkrss пишет:

Вставляя стандартный пример с SoftwareSerial и подключая Rx - Tx и следовательно обратно, не получаю ничего в ответ. Что я делаю не так? Есть идеи ?

Откуда не получаете? А что хотите получить? В ответ на что ?

 

Все вопросы не для того чтобы подколоть :( Вы ставите вопросы так что я должен догадаться, о чем Вы говорите, а не ответить на конкретный вопрос.

Пишите подробно. Тогда и ответить можно точно и главное в тему.

 

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

strarbit пишет:

нужен max3232 stogo UNO 5V and  scales 12V

 

А шо такое - stogo ??? :)

Levkrss
Offline
Зарегистрирован: 14.03.2019

Покдлючаю следующее: 

Разьем от весов по документации нахожу Tx и подключаю к Rx на Uno.

Rx - подключаю к Tx на Uno.

Подключаю земслю с весов на GND ардуины. 

Заливаю в UNO скетч:

#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(10, 11); // RX, TX
 
void setup()  
{
  // Инициализируем последовательный интерфейс и ждем открытия порта:
  Serial.begin(19200);
  
 
 
  Serial.println("Goodnight moon!");
 
  // устанавливаем скорость передачи данных для последовательного порта, созданного 
  // библиотекой SoftwareSerial
  mySerial.begin(19200);

}
 
void loop() // выполняется циклически
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

После чего любое мое сообщение в мониторе порта не дает никаких отклюков от весов.

 

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Как вы думаете ?

Что произойдет если включить прибор расчитаный на 220 в сеть 110 ?

И наоборот ?

Levkrss
Offline
Зарегистрирован: 14.03.2019

Так если я не ошибаюсь, то с rs232 с весов выходит 5V ? Или я ошибаюсь ?

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

http://ua.nauchebe.net/i/a/electronics/RadiolubitelSovety2012_image707.jpg

Верхния диаграмма - это сигнал (и его уровни-напряжение) с/на микропроцессор

Нижняя - такой сигнал и его уровни в стандарте RS232

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Levkrss пишет:

Так если я не ошибаюсь, то с rs232 с весов выходит 5V ? Или я ошибаюсь ?

 

Почему Вы так думаете ?

А почему к компу через конвертер подключали ?

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Если RS232  это +/- 12 вольт

Если пишут RS232  TTL то тогда 0 ---> +5 вольт

 

И задача ковертера изменить диапазон напряжения в одну и другую стороны.

 

-12 с RS232 может выбить вход микропроцессора.

 

Можете тестером глянуть вольтаж на выходе весов TX. Как правило он в минусе.

Levkrss
Offline
Зарегистрирован: 14.03.2019

Я так понимаю тогда собираю делитель напряжения и погнали ?

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Нет

конвертер на MAX3232.

+12 в +5 можно делителем,

а +5 в +12 чем ?

еще интереснее 0 в -12

 

Для согласования приборов на 110 и 220 есть прибор - ТРАНСФОРМАТОР.

он и с 110 на 220 , и с 220 на 110 поможет 

Для Вас трансформатор - конвертер на MAX3232

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

kez63 пишет:

http://ua.nauchebe.net/i/a/electronics/RadiolubitelSovety2012_image707.jpg

Верхния диаграмма - это сигнал (и его уровни-напряжение) с/на микропроцессор

Нижняя - такой сигнал и его уровни в стандарте RS232

 

Разберитьесь с диаграмой !

Весы передают и принимают по нижней

а процессор по верхней.

между устройствами MAX3232 он и выполняет сдвижку напряжений. Чем он вам не нравиться ?

 

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

Кстате в каком протоколе у Вас работают весы ? см. стр. 12 https://massa.ru/upload/iblock/ff8/massa-k-scales-connection-to-pc.pdf  

 

20 void loop() // выполняется циклически
21 {
22   if (mySerial.available())
23     Serial.write(mySerial.read());
24   if (Serial.available())
25     mySerial.write(Serial.read());
26 }

В этом куске вы ждете 1 символ от весов , и когда он придет -  посылаете его на монитор порта

затем ждете ввода символа с монитора для отправки на весы.

Это не верно

Вы не читали или не поняли как весы ведут обмен.

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

а затем принять СЕРИЮ символов.

Кстати весы дают ДВОИЧНЫЙ сигнал. на экране хрень будет. и это при условии правильного старта весов.

 

В каком городе живете ?

Levkrss
Offline
Зарегистрирован: 14.03.2019

...

kez63
kez63 аватар
Offline
Зарегистрирован: 09.04.2013

kez63 пишет:

sadman41 пишет:

глупый вопрос, но конвертор с ардуино соединять rx - Rx или rx - tx ??

 

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

ТХ - ТХ

RX-RX

Хотя ?! :)

Замкните TX на RX на выходе конвектора и прогоните с гипертерминала прохождение сигнала.

Что бы убедиться в работе конвектора

 

Сегодня проверил в живую 

ТХ - ТХ

RX - RX

конвертер и ардуинка соединены одноименными контактами.