roboforum.ru

Технический форум по робототехнике.

Прошу помощи linux-спецов по sh или awk

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

Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 19:12

Прошу помощи linux-спецов по sh или awk

Решаю задачу на OpenWRT (OR-WRT)
Лучше конечно на sh, т.к. сейчас скрипт на нём.

Нужно скинуть "на экран" или в файл или в переменную окружения содержимое входящего буфера /dev/ttyUSB0.

Просто копирование подвешивается навсегда, что и логично :)
Как скопировать до момента, пока там есть данные?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение hudbrog » 22 янв 2014, 19:27

stty чтобы установить параметры порта, cat чтобы читать с него
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 19:35

cat прервется, когда буфер будет пустой в последовательном порту?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение hudbrog » 22 янв 2014, 19:40

боюсь соврать, стоит проверить на настоящем железе..
есть подозрение что cat может висеть бесконечно (или пока не прийдет SIGHUP).. вполне можно сделать poor man's timeout что-нить типа:
cat /dev/ttyUSB0 > /tmp/somefile &
pid=$!
sleep 5
kill -9 $pid

Ну или можно попробовать какой-нить read с параметром -t... там много вариантом, стоит экспериментировать.. head тоже интересный вариант, если надо прочитать строку
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 19:45

Вот какое-то такое увидел в группах гугл, может это чем-то помочь?
Код: Выделить всёРазвернуть
#!/bin/bash

# Port setting
stty -F /dev/ttyS1 raw speed 9600

# Loop
while [ 1 ]; do
        READ=`dd if=/dev/ttyS1 count=1`
        echo $READ
done
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение elmot » 22 янв 2014, 20:17

=DeaD= писал(а):Вот какое-то такое увидел в группах гугл, может это чем-то помочь?
Код: Выделить всёРазвернуть
#!/bin/bash

# Port setting
stty -F /dev/ttyS1 raw speed 9600

# Loop
while [ 1 ]; do
        READ=`dd if=/dev/ttyS1 count=1`
        echo $READ
done

Не думаю.
Вообще ты неправильно к делу подходишь. Читать уарт надо либо до какого-либо символа завершения либо до таймаута. Иначе это все костыли и рейс-кондишены.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 20:27

Да мне бы в STDOUT выплюнуть всё что там есть в буфере и больше пока ничего не надо :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение setar » 22 янв 2014, 20:39

там нет буфера, это поток (в терминах линукса это character device)
разные программы могут по разному этот поток разбивать для анализа (буфферизация внутри обработчика потока),
например по символу перевода строки
Следовательно признак окончания передачи нужно придумать (или сделать процесс цикличным)
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Прошу помощи linux-спецов по sh или awk

Сообщение elmot » 22 янв 2014, 20:48

именно. Dead, придумай другой алгоритм.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 21:38

С буфером ясно, спасибо! Это была моя главная ошибка! Сейчас почти получил то, что нужно. Ответ уже получаю.
Только не пойму, почему у меня после ответа контролер сыплет ERR - вроде ничего лишнего ему не высылаю.

Добавлено спустя 10 минут 36 секунд:
Сейчас делаю так:

Код: Выделить всёРазвернуть
#!/bin/sh

echo "Content-type: text/html"
echo
echo "OK"
echo -n "["
cat /dev/ttyUSB0 &
pid=$!
echo "$QUERY_STRING" > "/dev/ttyUSB0"
sleep 1
kill -9 $pid
echo -n "]"


Выдаёт вот что:
Код: Выделить всёРазвернуть
OK
[Drv(100,0)

ERR09 in Drv cmd

ERR09 in Drv cmd

ERR09 in Drv cmd

]


Только "ERR09 in Drv cmd" не 3 раза выводит, а 200 раз :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение elmot » 22 янв 2014, 21:43

цепляй другой USB-UART и смотри что туда летит
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 22:54

Такое ощущение, что роутер после закрытия порта гадит в /dev/ttyUSB0 :)

Добавлено спустя 1 час 11 минут 3 секунды:
Подцепил второй USB-UART - ничего подобного.
Много думаю, что за ерунда.

Телнетом отправляю команты контроллеру - всё отлично.
Слушаю что пишет роутер - всё отлично.
Связываю их друг с другом - сплошные ошибки :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение hudbrog » 22 янв 2014, 23:00

Я бы все же выставил настройки порта с помощью stty... Не из эфира вселенной же он скорость и контроль четности берет...
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

Re: Прошу помощи linux-спецов по sh или awk

Сообщение =DeaD= » 22 янв 2014, 23:49

Как и ожидалось - настройки порта не помогли.

Добавлено спустя 22 минуты 44 секунды:
Буду менять подход к задаче, как-то коряво, действительно.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Прошу помощи linux-спецов по sh или awk

Сообщение linvinus » 23 янв 2014, 10:41

=DeaD=,
мы с dccharacter'ом вот тут forum87/topic10646-960.html#p289779
аналогичную задачу решали

Я лично таким образом дамплю логи с контроллера в файл чтобы потом обработать в gnuplot

В общем случае сначала нужно корректно настроить порт командой stty,
потом синхронизировать буфер, например посылать команду ping и ждать правильного ответа,
потом передавать команды

Ещё можно использовать команду expect

Для отладки можно использовать команду script (http://manpages.ubuntu.com/manpages/har ... ipt.1.html)
пожалуй это тут мало пригодно.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

След.

Вернуться в Компьютеры в роботостроении

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4