Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
4 / 4 / 2
Регистрация: 15.09.2013
Сообщений: 46

Прочитать данные из порта и преобразовать в читаемый вид

08.06.2014, 00:40. Показов 5704. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, решить проблему. Уже второй день бьюсь, перегуглил все, но ответ так и не нашел.

В общем ситуация такая: посылаю устройству команду, нужно считать ответ и показать в нормальном читаемом виде. Все осложняется еще тем, что у меня shell старый и много команд, которые предлагает гугл отсутствуют, например bc, od, xxd и т.д.

пока получается только вот что:
Bash
1
2
3
4
5
6
7
8
9
echo -en "\x00\x09\x25\xdd\x63\x2f\x2e" > /dev/ttyUSB1 #отправляю команду в порт
 
until [ $eol -eq 1 ]; do
    echo -n .
    read -r -n 2 -t 2 OneByte < /dev/ttyUSB1
    eol=$?
    InStr=$InStr$OneByte
done
echo $InStr  | hexdump -C -v
выводит
....00000000 23 10 10 44 10 44 0a |#..D.D.|
00000007

а должно бы так: 00 09 25 DD 63 2F 2E 00 09 25 DD 63 23 10 04 98 00 10 44 1B 8D

т.е. цифры частично совпадают, но не совсем.

с устройствами все в порядке. Если запускаю не через шелл а из php то все отлично работает:
PHP
1
2
3
exec('echo -en "\x00\x09\x25\xdd\x63\x2f\x2e" > /dev/ttyUSB1');
$result=fread($f,18);
echo bin2hex($result);
а вот с шелом не выходит. Всю голову сломал
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2014, 00:40
Ответы с готовыми решениями:

Как прочитать данные с Game-порта
Здравствуйте сейчас я программирую термометр. Подключил теморизетор к game-порту. Но как программно считывать данные с game-порта ...

Как на с++ прочитать данные из СОМ порта?
Мне нужно под MS-DOS 6.22 прочитать несколько слов через СОМ порт (в пределах 2х десятков и потом эти слова проанализировать). Какое...

Быстро записать и прочитать данные из порта
Здравствуйте! Возник вопрос, как быстро записать и прочитать данные из порта в цикле? Вот мой код: for (int i = 0; i...

3
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
08.06.2014, 01:49
Типа так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tty=/dev/ttyUSB1
ans=ans.dat
 
# Сброс параметров.
stty -F $tty 4:0:18b2:0:0:0:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
 
# Настройка.
stty -F $tty raw 9600 cs8
 
# Выполняем запрос.
printf "\x00\x09\x25\xdd\x63\x2f\x2e" > $tty
 
# Принимаем ответ.
( dd if=$tty of=$ans count=256 2> /dev/null ) & sleep 1; kill $!
 
echo "[`hexdump -e '1/1 "%d,"' $ans | sed 's/\(.*\),/\1/'`]"
Командный интерпретатор не поддерживает работу с нулевыми байтами. Это больше утилита для работы с текстом, поэтому вряд ли возможно использовать каким-то образом read или что-то в этом роде.

Добавлено через 26 минут
Я работу по протоколу modbus так реализовал: Описание протокола "Умный дом". Правда пока только с симулятором.

Строчка ( dd if=$tty of=$ans count=256 2> /dev/null ) & sleep 1; kill $! означает выполнение команды с таймаутом в 1 секунду. При этом dd сбрасывает в файл то, что успел за это время принять, но не более 256 байт. Длительность таймаута, максимальное количество принимаемых байт можно изменить. Если по окончании таймаута пришло меньшее количество байт, то в файле будут только они.

Таким образом можно не только бинарные протоколы реализовывать, но и upload файлов делать средствами shell'а.

echo "[`hexdump -e '1/1 "%d,"' $ans | sed 's/\(.*\),/\1/'`]"

Такое форматирование нужно для того, чтобы использовать в html приём и обработку массива байт. JSON.parse() для результата (строки) вернёт массив байт, который уже можно разбирать средствами js.
1
4 / 4 / 2
Регистрация: 15.09.2013
Сообщений: 46
08.06.2014, 16:54  [ТС]
Спасибо большое! Про dd не знал. Очень для меня ценная информация. Так же не знал о том, что интерпретатор не работает с нулевыми байтами.

В общем спасибо! Все получилось
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
08.06.2014, 17:53
Да, кстати, побайтный вывод правильно делать с опцией -v: echo "[`hexdump -ve '1/1 "%d,"' $ans | sed 's/\(.*\),/\1/'`]"
Иначе повторяющиеся байты будут заменяться на звёздочку.

Возможно нулевое значение зарезервировано под что-то поэтому его нельзя использовать. Из-за такого ограничения нельзя crc в скрипте для бинарных данных посчитать.

Я себе модуль для тестирования сделал: CyberWrt модуль "Modbus". Там можно скачать архив и посмотреть как у меня скрипты построены.
Миниатюры
Прочитать данные из порта и преобразовать в читаемый вид  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2014, 17:53
Помогаю со студенческими работами здесь

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

читаемый вид числа
Извиняюсь если уже было. Просто не нашел. У меня есть число. Ну к примеру 10676, мне нужно чтобы оно преобразовалась в более понятный...

\uXXX в читаемый вид
Опуская все подробности... Получаю информацию такого вида %u043A или \u0438\u043B\u0438\u0446 Нужно ее привести в читаемый...

Конвертирование Unicode в читаемый вид
Всем привет! Есть два richTextBox(са) и button когда я пишу в первом richTextBox \u0410, то во втором richTextBox должна вывестись буква...

Преобразование в читаемый вид из word
Всем привет, помогите решить проблему: как преобразовать &lt;docx.text.paragraph.Paragraph object at 0x00012AB0 в читаемый вид?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru