2008-10-26 2 views
8

Я работаю с периферийным устройством, которое необходимо передавать через последовательный порт. Я могу отправить его с помощью HyperTerminal, но теперь мне нужно написать программы, которые позволят мне делать это без HyperTerminal. Может ли кто-нибудь указать мне на сайт и/или показать мне образец приветственной мировой программы, чтобы начать меня? Я просмотрел многие сайты, которые дают мне несовместимый/древний код VC6.Базовый пример последовательной связи с Windows XP/win32

ответ

6

Для взаимодействия с последовательным портом вы открываете файл с одним из специальных имен файлов «COM1» через «COM9». Для последовательных портов с более высокими номерами специальное имя файла начинается с \\? \, Который в коде C/C++ должен быть экранирован как «\\\\? \\ COM10» и т. Д.

http://msdn.microsoft.com/en-us/library/ms810467.aspx имеет действительно хорошее руководство по использованию последовательного порта. Обратите внимание, что вы должны использовать функции ввода-вывода файлов Windows, такие как CreateFile(), ReadFile() и WriteFile(). Я не уверен, будет ли работать стандартные функции ввода-вывода, такие как fopen(), fread() и fwrite().

+0

Считаете ли вы, что связанная статья по-прежнему актуальна? Есть ли лучший способ в наши дни? – baordog 2014-03-12 20:04:15

+0

@baordog связанная статья [не хороша вообще] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -если-не был-а-данные). – 2014-08-19 07:57:49

0

Я считаю, что вы найдете множество примеров кода для C#, если найдете VC6 слишком древним. Я думаю, что есть также куча «бесплатных» последовательных/COM-портов, но я просто написал свои собственные, когда я написал часть программного обеспечения контроллера RS232.

Google C# и последовательный порт или rs232

Я получил это:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

Вы не должны иметь никаких проблем с поиском подходящего кода с помощью поиска Google.

1

Boost:asio может быть в состоянии помочь в качестве последовательного устройства было добавлено в последнее время.

Справедливое предупреждение, хотя; документация по серийному порту light, предположительно, поскольку она довольно новая (она была добавлена ​​в asio 1.1.1, которая была включена в boost 1.36).

Но работая через asio, IMHO, лучшее решение, чем использование необработанного API Win32. Зачем? Это будет легче читать и поддерживать (это API более высокого уровня), и это будет кросс-платформенный (за исключением тех случаев, когда вам нужно указать имя устройства, специфичное для ОС).

Списки рассылки Boost - Users и asio.user являются довольно активными и дружелюбными и должны быть в состоянии помочь вам, если вы застряли.