|
Serial-over-Ethernet, (существует ли общепринятый стандарт?) |
|
|
|
Jun 18 2017, 23:57
|
Профессионал
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439
|
Я бы сделал так. 1. Посылать сериальные пакеты через UDP на хост. Ну и обратно также. 2. На хосте ставится драйвер, создающий повторитель порта. Это такая фигня, что у нее возникают два сериальных устройства в системе. Они соединены между собой. Что посылается в одно из них мгновенно появляется на выходе второго. Надо поискать в интернете и скачать. Вот навскидку. Я не проверял, но похоже оно. Сделайте поиск сами. https://freevirtualserialports.com/https://sourceforge.net/projects/com0com/http://kc.flexradio.com/knowledgebasearticle50062.aspx3. Пишете простую апликацию, соединяющую сериальный порт с UDP портом. Здесь написано как сделать на TCP, но UDP сериальному соединению больше подходит. Я советую сделать на UDP. com0com.sourceforge.net/doc/UsingCom0com.pdf Идея понятна?
|
|
|
|
|
Dec 26 2017, 18:25
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-15
Из: Украина, exSU
Пользователь №: 88 529
|
Нужна помощь!
Есть Raspberry Pi 3, на нём pppd через GPRS-модем (скорость приёма-передачи - хорошо если 30-40 килобод), преобразователь USB-COM (подключен к некоему устройству на скорости 115200) и ser2net. На другом конце TCP-соединения - комп под Windows, на нём HW VSP (бесплатный однопортовый) и программа, которая умеет обмениваться пакетами с упомянутым устройством через COM-порт. Проблема: как только размер отправляемого c компа пакета превышает три-четыре десятка байт, как в связке HWVSP-TCP-ser2net начинаются неприятности - пакет принимается на другом конце в два приёма: приходит начало пакета, а после паузы в три-четыре сотни миллисекунд - остальное. Устройство, натурально, расценивает этот таймаут как недопустимо большой и отбрасывает обе половинки пакета. Опытным путём удалось установить, что допустимый интервал между байтами пакета - в пределах 20-30 миллисекунд, максимальный размер пакета - 255 байт, а программа не отправляет следующий пакет, пока не получит ответ на предыдущий либо пока не истечёт таймаут (а у программы он довольно длительный - десятки секунд). Соответственно, вопрос: либо что можно сделать, чтобы пакеты не рвались при их передаче через TCP, либо какую софтинку применить на Windows-стороне, чтобы изображала из себя COM-порт и передавала данные UDP-пакетами?
|
|
|
|
|
Dec 27 2017, 17:35
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-15
Из: Украина, exSU
Пользователь №: 88 529
|
Студент заборстроительного, ситуация ещё хуже - уже всё купили: и станок с микроскопическим таймаутом, и прогу к нему, и raspberry, и даже модем GPRS'ный. Больше начальство ни копейки не даст. А запустить всё это надо до конца позапрошлой недели. :-( Поэтому максимум, что могу позволить себе (или кому-то) до конца года наваять, это .ini-файл или конфигу к готовой софтинке; в особо крайнем случае - взять софтинку опен-сорсную и дописать кусочек к ней. Пока упёрся в катастрофическое незнание - какую именно софтинку курочить. :-(
|
|
|
|
|
Dec 27 2017, 18:52
|
Местный
Группа: Участник
Сообщений: 317
Регистрация: 16-09-17
Пользователь №: 99 334
|
Цитата(Рыжий Тигра @ Dec 27 2017, 20:35) Студент заборстроительного, ситуация ещё хуже - уже всё купили: и станок с микроскопическим таймаутом, и прогу к нему, и raspberry, и даже модем GPRS'ный. Больше начальство ни копейки не даст. А запустить всё это надо до конца позапрошлой недели. :-( Поэтому максимум, что могу позволить себе (или кому-то) до конца года наваять, это .ini-файл или конфигу к готовой софтинке; в особо крайнем случае - взять софтинку опен-сорсную и дописать кусочек к ней. Пока упёрся в катастрофическое незнание - какую именно софтинку курочить. :-( "Плохо когда пироги начинает печь сапожник, а сапоги точать - пирожник"© Рекомендую Вам выбросить на помойку всё Вами перечисленное и поменять специальность
|
|
|
|
|
Dec 27 2017, 20:58
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-15
Из: Украина, exSU
Пользователь №: 88 529
|
Студент заборстроительного, взаимно. Торгуй лучше гербалайфом. Или вискасом. Программы продавать - явно не твоё. :-(
|
|
|
|
|
Jan 6 2018, 06:14
|
Профессионал
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439
|
Цитата(Рыжий Тигра @ Dec 26 2017, 21:25) Нужна помощь!
Есть Raspberry Pi 3, на нём pppd через GPRS-модем (скорость приёма-передачи - хорошо если 30-40 килобод), преобразователь USB-COM (подключен к некоему устройству на скорости 115200) и ser2net. На другом конце TCP-соединения - комп под Windows, на нём HW VSP (бесплатный однопортовый) и программа, которая умеет обмениваться пакетами с упомянутым устройством через COM-порт. Проблема: как только размер отправляемого c компа пакета превышает три-четыре десятка байт, как в связке HWVSP-TCP-ser2net начинаются неприятности - пакет принимается на другом конце в два приёма: приходит начало пакета, а после паузы в три-четыре сотни миллисекунд - остальное. Устройство, натурально, расценивает этот таймаут как недопустимо большой и отбрасывает обе половинки пакета. Опытным путём удалось установить, что допустимый интервал между байтами пакета - в пределах 20-30 миллисекунд, максимальный размер пакета - 255 байт, а программа не отправляет следующий пакет, пока не получит ответ на предыдущий либо пока не истечёт таймаут (а у программы он довольно длительный - десятки секунд). Соответственно, вопрос: либо что можно сделать, чтобы пакеты не рвались при их передаче через TCP, либо какую софтинку применить на Windows-стороне, чтобы изображала из себя COM-порт и передавала данные UDP-пакетами? Вы собрали из готовых кусков или что-то сами писали? Условие, стимулирующее начало передачи пакета настолько неоднозначное и есть много взаимоисключающих критериев, что надо в каждом случае индивидуально отлаживать. Если сами писали код, то не помешает после записи сделать вызов int fsync(int fd);
|
|
|
|
|
Jan 8 2018, 13:30
|
Группа: Участник
Сообщений: 8
Регистрация: 31-12-17
Из: Праворулёвск, город у моря
Пользователь №: 100 906
|
Цитата(Рыжий Тигра @ Dec 26 2017, 19:25) Соответственно, вопрос: либо что можно сделать, чтобы пакеты не рвались при их передаче через TCP, либо какую софтинку применить на Windows-стороне, чтобы изображала из себя COM-порт и передавала данные UDP-пакетами? Если не можете разобраться / настроить / нет желания ковыряться с багами "вашей" виндовой программы - то стоит взять какой-либо одноплатный компьютер с линуксом, прокидывать сериал туда по сети, а с одноплатника уже в к комп с виндой - либо через USB Device / OTG + g_serial, либо через USB-Serial мост. В общем случае у вас контроля над фрагментацияй пакетов по сети нет.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|