Я работаю с периферийным устройством, которое необходимо передавать через последовательный порт. Я могу отправить его с помощью HyperTerminal, но теперь мне нужно написать программы, которые позволят мне делать это без HyperTerminal. Может ли кто-нибудь указать мне на сайт и/или показать мне образец приветственной мировой программы, чтобы начать меня? Я просмотрел многие сайты, которые дают мне несовместимый/древний код VC6.Базовый пример последовательной связи с Windows XP/win32
ответ
Для взаимодействия с последовательным портом вы открываете файл с одним из специальных имен файлов «COM1» через «COM9». Для последовательных портов с более высокими номерами специальное имя файла начинается с \\? \, Который в коде C/C++ должен быть экранирован как «\\\\? \\ COM10» и т. Д.
http://msdn.microsoft.com/en-us/library/ms810467.aspx имеет действительно хорошее руководство по использованию последовательного порта. Обратите внимание, что вы должны использовать функции ввода-вывода файлов Windows, такие как CreateFile()
, ReadFile()
и WriteFile()
. Я не уверен, будет ли работать стандартные функции ввода-вывода, такие как fopen()
, fread()
и fwrite()
.
Корпорация Майкрософт предоставляет an article with sample code, описывающие, как это сделать под Win32.
Я считаю, что вы найдете множество примеров кода для C#, если найдете VC6 слишком древним. Я думаю, что есть также куча «бесплатных» последовательных/COM-портов, но я просто написал свои собственные, когда я написал часть программного обеспечения контроллера RS232.
Google C# и последовательный порт или rs232
Я получил это:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
Вы не должны иметь никаких проблем с поиском подходящего кода с помощью поиска Google.
Boost:asio может быть в состоянии помочь в качестве последовательного устройства было добавлено в последнее время.
Справедливое предупреждение, хотя; документация по серийному порту light, предположительно, поскольку она довольно новая (она была добавлена в asio 1.1.1, которая была включена в boost 1.36).
Но работая через asio, IMHO, лучшее решение, чем использование необработанного API Win32. Зачем? Это будет легче читать и поддерживать (это API более высокого уровня), и это будет кросс-платформенный (за исключением тех случаев, когда вам нужно указать имя устройства, специфичное для ОС).
Списки рассылки Boost - Users и asio.user являются довольно активными и дружелюбными и должны быть в состоянии помочь вам, если вы застряли.
При использовании .NET 2.0 см. System.IO.Ports и this article должно быть полезно. Если прямой Win32, то лучше Adam's answer.
Считаете ли вы, что связанная статья по-прежнему актуальна? Есть ли лучший способ в наши дни? – baordog 2014-03-12 20:04:15
@baordog связанная статья [не хороша вообще] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -если-не был-а-данные). – 2014-08-19 07:57:49