Передать файл через com порт
Есть два линукса. между ними связь только через com порт
нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
Здравствуйте, x-code, Вы писали:
XC>Есть два линукса. между ними связь только через com порт
XC>нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
XC>Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
sudo apt-get install lrzsz minicom
man sz
man minicom
Да, это работает. Программа minicom странная, но вот скрипты описанные по ссылке вполне нормально работают. А существует ли софт совместимый с lrzsz с GUI для линукс и для windows?
Здравствуйте, kov_serg, Вы писали:
А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт. На удаленной машине достаточно запустить программу, которая бы просто висела до Ctrl-С (т.е. даже сервис необязателен).
В общем такое и самому написать можно, но неужели нет готовых решений?
Здравствуйте, x-code, Вы писали:
XC>А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт.
Можно поднять полноценную IP сеть через COM порт, ключевые слова для поиска: SLIP, PPP over null modem / serial, pppd. А дальше например ssh/scp/ftp/sftp.
Кстати, помню раньше в Windows была программа (не HyperTerminal) для соединения двух компьютеров через нуль-модем, вот только я уже забыл что она давала — либо полноценную IP сеть, либо просто передачу файлов.
XC>А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт.
XC>На удаленной машине достаточно запустить программу, которая бы просто висела до Ctrl-С (т.е. даже сервис необязателен).
XC>В общем такое и самому написать можно, но неужели нет готовых решений?
Есть — Emacs.
В него встроен многопанельный файловый менеджер — Dired.
Плюс встроен убер-пакет TRAMP — Transparent Remote (file) Access, Multiple Protocol. Помимо традиционного ssh он поддерживает telnet-like соединения, в этом случае он сам под капотом посылает соответствующие команды cd/ls/etc на удалённый shell, сам кодирует/декодирует файлы поверх этого шелла и т.п.
Это будет выглядеть следующим образом:
1. на удалённой машине пускаешь терминал в COM порт: agetty ttyS0 115200 dumb
2. на локальной запускаешь Emacs, открываешь две панели
3. в одной из панелей открываешь локальный Dired
4. в другой удалённый Dired через COM порт (редирект через cat) — TRAMP+Dired — он спросит логин и пароль
В итоге получишь как раз то что требуется — две панели, одна удалённая, другая локальная. По обоим можно перемещаться, копировать/перемещать файлы между ними, и даже редактировать файлы в каждой из них (даже для удалённой будет тот же самый редактор, с подсветкой, авдополнением и прочими ништяками).
Сейчас проверил через виртуальный COM порт посредством socat — всё работает.
Здравствуйте, x-code, Вы писали:
XC>Есть два линукса. между ними связь только через com порт
XC>нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
XC>Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
1) Запускается cu, на другой машине в /etc/inittab разрешается логин через компорт.
Заходишь на другую машину, там запускаешь rz, у себя sz и передаёшь файл.
2) То же самое, но вместо cu -- minicom. Причём на второй машине тоже можно запустить
minicom (чтоб без логина). Да можно и даже cu с двух сторон (только по-моему
автомагического старта приёма файла по Z-modem не будет).
3) uucp. настроить его мороки много наверное.
4) поднять pppd на обоих машинах (или slip на худой конец, хотя уже не актуально),
поднять сетку и делать что угодно.
Давненько не кидали на старые компьютеры данные через дискеты, COM или LPT порты? А вот мне недавно пришлось этим заняться, и подробности этого опыта – под катом. Там же несколько графиков, табличка сравнения и пара десятков фото под вторым катом.
Итак, задача: передать данные на ноутбук, у которого есть исключительно COM и LPT порты, слот расширения PCMCIA, флоппик, модем. Ноутбук – IBM ThinkPad 760EL в отличном состоянии, подарен замечательным хабраюзером green_hippo. О нём (ноутбуке!) вскоре будет сделана отдельная статья.
Слот отпал сразу. Карточку в короткие сроки найти не удалось, а вот c COM и LPT-шнурками получилось лучше. COM-шнурок был подарен worst’ом, LPTшный – найден на городском форуме.
Файл: WOLF3D.zip.
Содержимое: Wolfenstein 3D от id Software. И даже не пытайтесь спросить, что же это такое.
Объем: 1101563 байта (1.04 мб.)
-
Для начала попробуем кидать данные дискетами. Время копирования – 43.5 сек., далее за 5-7 секунд перетыкаем её в ноутбук, ещё 43.2 секунды на копирования… Сумма – 1 минута 33.7 секунды. Средняя скорость – 11.4 килобайта в секунду. Ну ок, а если нам нужно передать бОльший файл? Ну скажем, архив quake 1 будет весить 21.7 мб.
Представляете, разбивать её на полтора десятка дискет, перетыкать эти дискеты… Мдааа. Процесс сомнительной радости.
Проверить, как на том же железе работается из под DOSом помешала моя лень, а точнее – ограничение времени – все диски компьютера отформатированы под NTFS, т.е. для теста нужно было подготовить загрузочный CD или дискету, причем с драйверами для чтения с NTFS, причем надежность того драйвера… позже проверю таки.
Файл 2: Quake.zip
Объем: 22809007 (21.7 мб.)
И что бы не тратить время — соберём результаты в табличку и симпатишные графики.
Копирование с диска: 43.2 сек.
Перетыкание дискеты: 7 сек.
1 час 7 минут 27 секунд
Передача Wolf3D
Передача Quake 1
Передача Wolf3D, исключительно LPT-передача под DOS
Передача Quake 1, исключительно LPT-передача под DOS
1) Norton Commander, передача файла со стороны master'а
2) Norton Commander, прием файла, вид со стороны slave'а
3) FastWire, вид со стороны master'а
4) FastWire, вид со стороны slave'а
5) FileMaven, со стороны клиента
6) FileMaven со стороны сервера:
7) LapLink Pro 4
8) Коннект через Interlink — на сервере
9) Interlink — на клиенте
На сегодняшний день существует много способов организовать обмен данными между Desktop-приложением и устройствами на микроконтроллерах: Wi-Fi, Bluetooth, RF, USB, преобразователи интерфейсов и т.д.
В большинстве из вышеперечисленных вариантов реализован пакетный обмен данными между хостом и устройством. Передаваемые данными с гарантией целостности и доставки будут переданы от передатчика к приемнику.
В случае использования интерфейсов RS-232, RS-485, RS-422 или чистого UART организация пакетного обмена данными ложится на программиста.
В данной статье я хотел бы рассказать о своей реализации обмена данными между устройствами
Постановка задачи
Требования к разрабатываемой библиотеки были следующие:
Фиксированная длинна пакета: количество байт, которые пользователь хочет передать не влияют на общую длину пакета, она остается фиксированной;
Минимальное количество внутренних буферов;
Наличие надежной, быстровычисляемой контрольной суммы;
Побайтного занесения данных;
Возможность работы в условиях поврежденных и потерянных байт в пакете;
Выполнение задачи
Принцип работы: определимся с понятием пакета. Пакет представляет собой стартовый байт, данные пользователя и два байта контрольной суммы CRC-16:
В начале использовался алгоритм контрольной суммы CRC8, однако в ходе тестов было выяснено, что при длине пакета в 8 байт количество коллизий было слишком высоким. Тест заключался в следующем: некоторые пакеты специально отправлялись битыми (менялись значения или вовсе удалялся байт из пакета). В итоге на каждый 50000й пакет происходила коллизия CRC и неправильный пакет передавался в бизнес-логику.
Первый случай коллизии происходил, когда значения байтов в пакете были изменены таким образом, что их контрольная сумма осталась прежней:
А во втором случае часть побитого пакета с частью целого пакета соединялись в один пакет, который проходил по контрольной сумме:
*Красной чертой обозначен пакет, последние байты которого не дошли до приемника. Зеленой чертой показан нормальный пакет. Синей чертой изображен пакет, который был отправлен в бизнес-логику.
Поэтому было принято решение перейти на CRC16. При запуске тоже теста было пройдено более 2млн пакетов без коллизий и тест был завершен удачно. Вычисление контрольной суммы происходит по табличному методу для ускорения работы.
В качестве StartByte используется значение 0x23. С помощью этого числа парсер делает предположение, что с этого места начинается пакет. Далее парсер проверяет количество байт в буфере и если их столько же или больше чем длинна пакета, то производится подсчет контрольной суммы. Если подсчитанная и принятая контрольные суммы совпадают, то пакет выдается и бизнес логику приложения.
При приеме байтов мы записываем их в циклический буфер, в основном я это делаю в обработчике прерывания принятого байта.
Работу всей библиотеки можно описать следующей схемой:
Данная библиотека реализована на Си и на C++. C++ версия предназначена в основном для Arduino.
Для проверки работы Sheller на микроконтроллере был написан ShellerTerminal:
*представляет собой обычный COM-port терминал с использованием алгоритма Sheller.
Информацию по использованию библиотеку вы можете найти на GitHub.
Реализация передачи файлов через Bluetooth и Wifi
Реализация Bluetooth. Мне нужно знать как с нуля реализовать возможности передачи файлов с.
Протокол передачи данных через последовательный порт
Ребят, всем добрый вечер! Предстоит следующая задача: нужно реализовать, например - в отдельном.
Проблема передачи показаний датчика BMP280 через HC-05 на порт rfcomm
Всем доброго здравия! коллеги, помогите в проблеме. пропала передача показаний от датчика BMP280.
Как менять скорость передачи через COM порт не меняя сигнал RTS
У меня некоторый девайс связан с компьютером по COM порту. Задействованы не только линии данных.
Поэтому я обычно не использую это событие, а читаю с порта побайтово в отдельном потоке, хотя форумчане и говорят, что это тот ещё велосипед. Однако для моих задач он прекрасно работаети зарекомендовал себя на 6 разных протоколах (в том числе с эхо).
Пишете свой класс-обёртку для COM-порта, наследуете его от BackgroundWorker и переопределяете метод OnDoWork:
Принимаете фактически по одному байту, проверяете последовательность на корректность согласно формату. Если что-то не так - возвращаетесь в начало цикла и пытаетесь читать снова. Исключается проблема рваных пакетов.
Для данного протокола формат пакета был следующий:
стартовый байт - 0xB5
адрес устройства - 1 байт
длина поля данных - 1 байт
команда - 1 байт
поле данных - len байт
контрольная сумма - 1 байт
Пишете свой класс-обёртку для COM-порта, наследуете его от BackgroundWorker и переопределяете метод OnDoWork:
Что такое класс-обертка? и как это применимо к ком-порту, и как этот класс наследовать от BackgroundWorker?
Для данного протокола формат пакета был следующий:
стартовый байт - 0xB5
адрес устройства - 1 байт
длина поля данных - 1 байт
команда - 1 байт
поле данных - len байт
контрольная сумма - 1 байт
Что за протокол такой. Что за байты, расскажите по подробнее? И нужно ли мне это вообще, если у меня пара виртуальных портов настроенных друг на друга?? С самим кодом, я думаю, после понимания этих моментов, я уже и сам разберусь. Спасибо
По теме: протокол в данном случае - некоторая договорённость в формате обмена данными. В данном примере это был протокол компании Сенсор. Если вы передаёте маленький файл и контроль на ошибки вам не нужен, то и без выдумывания протоколов можно обойтись.
Для начала вам следовало бы определиться с тем, как вы будете получать ответ. Если у вас есть два com-порта, замкнутых нульмодемным кабелем, то вам нужно две программы - первая посылающая файл и ожидающая ответа (в данном случае того же самого файла) и вторая ожидающая данных на порте, принимающая их и отправляющая обратно. Первая - master, вторая - slave. Исходя из этого их архитектура должна слегка различаться.
Имхо, если вы ещё не обладаете достаточным уровнем, нужно начинать с более простых задач. Как минимум вам необходимо изучить тему многопоточности, чтобы никаких вопросов в этом направлении не было.
Программа для передачи файлов через wifi
Здравствуйте,помогите пожалуйста хочу создать программу для передачи файлов через wifi но не знаю с.
Передача файлов на телефон через COM порт
Помогите пожалуста понять как можно осуществить передачу файлов на мобильный телефон через АТ.
Прием/передача текстовых файлов через 80 порт
Установил выделенную линию в инет и теперь хочу сделать что бы клиенты могли передавать файлы на.
Здравствуйте, x-code, Вы писали:
XC>Есть два линукса. между ними связь только через com порт
XC>нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
XC>Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
sudo apt-get install lrzsz minicom
man sz
man minicom
Здравствуйте, x-code, Вы писали:
XC>А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт.
Можно поднять полноценную IP сеть через COM порт, ключевые слова для поиска: SLIP, PPP over null modem / serial, pppd. А дальше например ssh/scp/ftp/sftp.
Кстати, помню раньше в Windows была программа (не HyperTerminal) для соединения двух компьютеров через нуль-модем, вот только я уже забыл что она давала — либо полноценную IP сеть, либо просто передачу файлов.
XC>А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт.
XC>На удаленной машине достаточно запустить программу, которая бы просто висела до Ctrl-С (т.е. даже сервис необязателен).
XC>В общем такое и самому написать можно, но неужели нет готовых решений?
Есть — Emacs.
В него встроен многопанельный файловый менеджер — Dired.
Плюс встроен убер-пакет TRAMP — Transparent Remote (file) Access, Multiple Protocol. Помимо традиционного ssh он поддерживает telnet-like соединения, в этом случае он сам под капотом посылает соответствующие команды cd/ls/etc на удалённый shell, сам кодирует/декодирует файлы поверх этого шелла и т.п.
Это будет выглядеть следующим образом:
1. на удалённой машине пускаешь терминал в COM порт: agetty ttyS0 115200 dumb
2. на локальной запускаешь Emacs, открываешь две панели
3. в одной из панелей открываешь локальный Dired
4. в другой удалённый Dired через COM порт (редирект через cat) — TRAMP+Dired — он спросит логин и пароль
В итоге получишь как раз то что требуется — две панели, одна удалённая, другая локальная. По обоим можно перемещаться, копировать/перемещать файлы между ними, и даже редактировать файлы в каждой из них (даже для удалённой будет тот же самый редактор, с подсветкой, авдополнением и прочими ништяками).
Сейчас проверил через виртуальный COM порт посредством socat — всё работает.
Есть два линукса. между ними связь только через com порт
нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
Да, это работает. Программа minicom странная, но вот скрипты описанные по ссылке вполне нормально работают. А существует ли софт совместимый с lrzsz с GUI для линукс и для windows?
Здравствуйте, kov_serg, Вы писали:
А есть что нибудь в виде двухпанельного менеждера? Это было бы идеальным решением — с одной стороны файловая система рабочей мшаины (или винда или линукс), а с другой — удаленной машины (линукс), подключенной через com порт. На удаленной машине достаточно запустить программу, которая бы просто висела до Ctrl-С (т.е. даже сервис необязателен).
В общем такое и самому написать можно, но неужели нет готовых решений?
Здравствуйте, x-code, Вы писали:
XC>Есть два линукса. между ними связь только через com порт
XC>нужно передавать между ними файлы (идеально иметь двухпанельный доступ как в winscp, но вполне можно и утилиту командной строки)
XC>Дайте пожалуйста пошаговое руководство как это сделать, или название программ которые нужно запускать на передающей и принимающей сторонах чтобы можно было так передавать файлы.
1) Запускается cu, на другой машине в /etc/inittab разрешается логин через компорт.
Заходишь на другую машину, там запускаешь rz, у себя sz и передаёшь файл.
2) То же самое, но вместо cu -- minicom. Причём на второй машине тоже можно запустить
minicom (чтоб без логина). Да можно и даже cu с двух сторон (только по-моему
автомагического старта приёма файла по Z-modem не будет).
3) uucp. настроить его мороки много наверное.
4) поднять pppd на обоих машинах (или slip на худой конец, хотя уже не актуально),
поднять сетку и делать что угодно.
Читайте также: