LINUX.ORG.RU

Serial port, output выдает эхо input'а

 


0

1

Уже задавал этот вопрос ранее. Здесь более развернуто.

Имеется прибор управления кондиционерами (CoolMaster) с COM-портом.

Если общаться с ним через putty, то вывод строго следует спецификации: на ввод отправляем строку «stats all\n», на выходе получаем

«1005 ON  173C ,67C High      MJ 0»
OK


Если же общаться с этим прибором через bash (cat/printf) или в програме, через обычные функции работы с файлом, то вывод получается

stats all

1005 ON  173C ,67C High      MJ 0

OK


То есть, в начале вывода появляется строка ввода «stats all» и лишние переносы строк между строками. Возможно переносы появляются из-за того, что прибор оканчивает строки на «\r\n». А вот почему вылазиет «stats all» в начале понять не могу.

Причем это происходит при «stty -F /dev/ttyS0 -echo». Если эхо включено - прибор в бесконечном цикле выдает абракадабру - пытается выполнить части входных строк, жалуется на ошибку синтаксиса и так до бесконечности.

COM-порты пробовал USB и родной, встроенный в материнку. Результат один и тот же.

Почему в выводе появляется «stats all»? И почему его нет в putty?

★★★★★

На вскидку ответ старого фидошника 451/13 :)
Дай сперва ему ate0
Ну а если. То по спецификации твоего девайся. И не мучай ком строку.

hbars ★★★★★ ()
Ответ на: комментарий от hbars

У меня не было компьютера во времена расцвета fido поэтому ни слова не понял) К com-порту подключается по трем проводам - TX, RX, GND. В документации про AT-команды ни слова. Только стандартные слова про скорость, четность..

makoven ★★★★★ ()
Ответ на: комментарий от makoven

Судя по всему там совершенно свой dumb протокол.
Но устройству скорость, и прочие установки порта задавать можно.
Значит и включ выключ можно.
Непонятное поведение com-порта с bash
http://yandex.ru/clck/jsredir?from=yandex.by;yandsearch;web;;&text=CoolMa...
Как-то такъ.

hbars ★★★★★ ()
Ответ на: комментарий от hbars

Первая ссылка - это моя. А вторую как-раз читаю)

makoven ★★★★★ ()

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

Zubok ★★★★★ ()

отправляем строку «stats all\n»

Может, дело здесь?

"stats all\n"
          ^^

Раз твой прибор отвечает с \r\n, так, может быть, он и на вход такое требует?

Еще обрати внимание на эти опции stty:

       [-]icrnl
              translate carriage return to newline
       [-]igncr
              ignore carriage return
       [-]inlcr
              translate newline to carriage return

Выяснить текущую конфигурацию stty можно так:

stty -F /dev/ttyS0 --all 

То, что с минусом, то выключено; что без минуса - включено. Там еще всякие опции echo есть, если посмотришь man.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Через баш «cat /dev/ttyS0».

Через nodejs, создавая из ttyS0 потоки чтения и записи и слушая входящие данные.

И другой вариант, тоже через nodejs, используя готовый модуль node-serial.

Во всех трех случаях картина одна и та же

makoven ★★★★★ ()
Ответ на: комментарий от Zubok

сделал stty -F /dev/ttyS0 raw -echo -echoe. Теперь лишних переносов строки нет. Но эхо все-равно осталось.

Если отправить «stats\n», картина будет такая:

stats all
1005 ON  173C ,67C High      MJ 0
OK

А если отправить «stats\r\n», то картина будет такая:

stats all
1005 ON  173C ,67C High      MJ 0
OK


То есть в первом случае не хватает «>» в конце. Который должен быть в выводе, согласно документации

makoven ★★★★★ ()
Ответ на: комментарий от makoven

Во втором случае на следующей строке после OK, знак «больше». Типа приглашение командной строи. Парсер съел

makoven ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Tinyserial сейчас покурю. А что значит screen? Просто в screen-сессии то же самое сделать? Я это все в tmux делаю, если что )

makoven ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Ух-ты. Реально коннектится к ком-порту. Через screen все хорошо:

stats all
1005 ON  173C ,67C High      MJ 0
OK
ЗНАК_БОЛЬШЕ

«stats all» - это я ввел в данном случае и нажал ENTER

makoven ★★★★★ ()
Ответ на: комментарий от makoven

Так тоже выводит эхо

А ты уверен, что это из порта читается? Как ты строчку передаешь в порт из bash конкретно?

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

А откуда оно еще может читаться.. Не понимаю)

printf «stats all\r\n» > /dev/ttyUSB0

Кавычки, понятное дело, обычные двойные. Они отчегото сами тут заменяются даже в pre )

makoven ★★★★★ ()

У тебя есть еще два свободных СОМ-порта, хотя бы усбэшных, хотя бы на другом компе? На вход одного из них заводишь свой RX, на вход другого заводишь свой TX. Ну и GND разумеется соединяешь. Выходы этих двух портов оставляешь висячими. Смотришь на этих портах чем-нибудь простым, типа миникома.

Если какой-то мусор проходит между устройствами, ты его увидишь, как есть. Полезно еще НЕХ-суальный дамп посмотреть, на предмет непечатных символов.

Будь осторожен, не пожги порты.

anto215 ★★ ()
Ответ на: комментарий от makoven

Я тебе предлагаю сделать подсматривалку и подсмотреть, что же реально ходит по проводам, а вовсе не попробовать через USB и переходник и через COM-порт, встроенный в материнку.

anto215 ★★ ()
Ответ на: комментарий от makoven

Странно, смотрю на документацию на CoolMaster (CoolMaster 1000D CoolMaster 2000S CoolMaster 3000T CoolMaster 4000M CoolMaster 6000L CoolMaster 7000F CoolMaster 8000MH CoolMaster 9000H), а там нет команды stats all. Почему-то только stat есть, stat <UID> есть, а где stats all?

Zubok ★★★★★ ()

http://coolautomation.com/lib/doc/prm/PRM-CoolMaster/index.html?command_forma...

In case of wrong command CoolMaster response can be one of the following strings:

Unknown command  Unrecognized command name
Bad parameters   Command has missing or wrong parameters 

Предположение. Он у тебя, похоже, про stats all не знает и возвращает эту stats all. Видишь, что написано выше? Возвращает нераспознанную команду. А отвечает, потому что в нераспознанной команде stats all есть подстрока stat. Вот команды:

http://coolautomation.com/lib/doc/prm/PRM-CoolMaster/index.html?cool_master_c...

UPD. А, нет. Это он не команду возвращает, а строчку «Unrecognized command name», насколько я понимаю. Но все равно что-то stats all в списке нет.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 4)
Ответ на: комментарий от anto215

Боюсь оборудование пожечь. Потом не расплачусь)

makoven ★★★★★ ()
Ответ на: комментарий от Zubok

Странно. Раньше вроде была эта команда в документации. Тем не менее, c другими командами (например set) тоже выводится эхо(

А через screen нормально всё. Ничего не понимаю..

makoven ★★★★★ ()
Ответ на: комментарий от makoven

maxcom доколе нам мучатся с этими еб^Wлочками? Может быть уже пора тот злосчастный патч назад откатить? У нас ведь ресурс вроде как технический, а не литературоведческий.

trex6 ★★★★★ ()
Ответ на: комментарий от makoven

А через screen нормально всё. Ничего не понимаю..

А вот объясни, это опечатка была?

Serial port, output выдает эхо input'а (комментарий)

Ты подавал команду stats, а тебе вовзращалось stats all. Ты случайно не дописал all или так и было?

Zubok ★★★★★ ()
Ответ на: комментарий от makoven

Странно. Раньше вроде была эта команда в документации. Тем не менее, c другими командами (например set) тоже выводится эхо(

Кстати, посмотри в set повнимательнее.

http://coolautomation.com/lib/doc/prm/PRM-CoolMaster/index.html?set.htm

echo           R/W            0-Disable 1-Enable Commands echo
Zubok ★★★★★ ()
Ответ на: комментарий от makoven

Эта штука сделана для удобства. Приемник может работать как потоковый и независимо от передатчика. То есть приемнику для анализа ответов не надо знать, какую команду передавал передатчик. Просто тупо висишь на линии, а в ответе первая строчка - это команда, которую передавали. Просто можешь в лог складывать или в базу данных пихать, или какие-то сразу действия делать.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Хм, и правда. Зная что была за команда, упрощается обработка ответов

makoven ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.