#c# #serial-port #virtual-serial-port #socat
#c# #последовательный порт #виртуальный последовательный порт #socat
Вопрос:
в целях тестирования я пытаюсь написать простую программу, которая подключается к виртуальному последовательному порту, созданному с помощью socat.
Я создаю последовательный порт с помощью этой команды:
socat -d -d PTY,b9600 PTY,link=ttyVS1,b9600
получение этого вывода:
2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/1
2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/2
2011/11/08 18:26:31 socat[32708] N starting data transfer loop with FDs [3,3] and [5,5]
Когда я пытаюсь подключиться таким образом:
System.IO.Ports.SerialPort _port;
_port = new SerialPort("/dev/pts/1", 9600);
_port.Open();
Я получаю «имя файла неизвестно» System.IO.IOException
.
Мне не хватает битов данных, стоп-битов или других параметров? Как я могу узнать свойства, установленные socat? Или что не так с этим кодом?
Комментарии:
1. Ничего общего, но просто упомяну, что на моем родном языке Socat означает «Отсталый» =)
Ответ №1:
Что здесь не так, так это наверняка название устройства. Можете ли вы проверить в / dev, существует ли /dev / pts / 1? Может быть, у него есть другое имя, например /dev / pts1?
Комментарии:
1. Я проверю и опубликую здесь… На данный момент я могу сказать, что я провел еще один тест с Windows, используя com0com (программное обеспечение для виртуального последовательного порта). Я смог запустить два экземпляра одного и того же программного обеспечения (подключение без скорости передачи данных, только порт) и обменяться данными! Я хочу сделать то же самое с Ubuntu Linux (а также с Mac OS X)…
2. В Linux проблема заключается в том, что также, если оба / dev / pts / 1 (и 2) существуют, когда я вызываю Serial. GetPortNames() Я не вижу в списке /dev / pts / * . Вероятно, среда выполнения Mono действует следующим образом . СЕТЕВАЯ среда выполнения не может подключиться к порту без имени COM * (для Linux может быть / dev / tty *, я не знаю!). Звучит правильно? (Могу ли я использовать символическую ссылку для решения проблемы?)
3. Что вы получаете при вызове GetPortNames()?
4. /dev/ttyS0 /dev /ttyS1 /dev/ttyS10 /dev /ttyS11 /dev/ttyS12 /dev /ttyS13 /dev /ttyS14 /dev/ ttyS15 /dev /ttyS16 /dev /ttyS17 /dev/ttyS18 /dev /ttyS19 /dev /ttyS2 /dev/ttyS20 /dev /ttyS21 /dev /ttyS22 /dev/ ttyS23 /dev /ttyS24 /dev/ ttyS25 /dev/ttyS26 /dev/ttyS27 /dev /ttyS28 /dev/ttyS29 /dev/ttyS3 /dev/ttyS30 /dev/ttyS31 /dev/ttyS4 /dev/ttyS5 /dev /ttyS6 /dev /ttyS7 /dev /ttyS8 /dev/ttyS9
5. Хорошо, итак, нам нужно проверить 2 вещи. Или реализация последовательного порта Mono поддерживает только порты, начинающиеся с /dev /ttySx, или в методе ошибка (ммм … Я не знаю, как код сможет узнать, что / dev / pts / 1 в любом случае является последовательным портом …). Можете ли вы изменить порт, который создает socat, на tty-имя? или ссылка? или что-то в этом роде? Вы поняли идею… Я не эксперт по Linux…