2008-10-26 31 views
8

Tôi đang làm việc với thiết bị ngoại vi cần được truyền thông qua nối tiếp. Tôi có thể gửi các lệnh bằng HyperTerminal, nhưng bây giờ tôi cần viết các chương trình cho phép tôi thực hiện nó mà không cần HyperTerminal. Ai đó có thể chỉ cho tôi một trang web và/hoặc chỉ cho tôi một chương trình xin chào thế giới mẫu để giúp tôi bắt đầu không? Tôi đã tìm kiếm thông qua nhiều trang web cung cấp cho tôi mã VC6 không thể giải mã/cổ.Ví dụ cơ bản về giao tiếp nối tiếp với Windows XP/win32

Trả lời

6

Để giao tiếp với cổng nối tiếp, bạn mở tệp có một trong các tên tệp đặc biệt "COM1" đến "COM9". Đối với các cổng nối tiếp có số cao hơn, tên tệp đặc biệt bắt đầu bằng \\? \, Trong mã C/C++ phải được thoát là "\\\\? \\ COM10", v.v.

http://msdn.microsoft.com/en-us/library/ms810467.aspx có thực sự tốt hướng dẫn về cách sử dụng cổng nối tiếp. Lưu ý rằng bạn nên sử dụng các chức năng I/O của tệp Windows chẳng hạn như CreateFile(), ReadFile()WriteFile(). Tôi không chắc liệu nó có hoạt động hay không để sử dụng các hàm I/O tiêu chuẩn như fopen(), fread()fwrite().

+0

Bạn có nghĩ rằng bài viết được liên kết vẫn có liên quan không? Có cách nào tốt hơn trong những ngày này không? – baordog

+0

@baordog bài viết được liên kết [không tốt chút nào] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -if-wasnt-a-data). –

0

Tôi tin rằng bạn cũng sẽ tìm thấy nhiều mã mẫu cho C# nếu bạn thấy VC6 quá cổ. Tôi nghĩ rằng cũng có một bó "miễn phí" nối tiếp/cổng COM wrappers nhưng tôi chỉ viết của riêng tôi khi tôi đã viết một phần điều khiển thiết bị RS232 của phần mềm.

google C# và cổng nối tiếp hoặc RS232

Tôi đã nhận những:

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

Bạn nên không có vấn đề tìm mã phù hợp với một tìm kiếm google.

1

Boost:asio có thể trợ giúp khi thiết bị nối tiếp được thêm gần đây.

Cảnh báo công bằng; tài liệu cổng nối tiếp là ánh sáng, có lẽ vì nó khá mới (nó đã được thêm vào trong asio 1.1.1 được bao gồm trong tăng 1,36).

Nhưng làm việc theo cách của bạn thông qua asio là, IMHO, một giải pháp tốt hơn so với sử dụng API Win32 thô. Tại sao? Nó sẽ dễ đọc và duy trì hơn (đó là một API cấp cao hơn) và nó sẽ là nền tảng chéo (trừ khi bạn cần chỉ định tên thiết bị cụ thể cho hệ điều hành).

Boost - Usersasio.user danh sách gửi thư khá tích cực và thân thiện và có thể giúp bạn nếu bạn gặp khó khăn.

+0

Boost thực hiện một công việc khủng khiếp trong việc kiểm tra lỗi Win32 trong các chương trình đa luồng. Nó hoàn toàn bỏ qua các giá trị trả về cho 'WaitForSingleObject'. Sử dụng sự nguy hiểm của riêng bạn, nếu bạn không nhớ cố gắng để theo dõi lỗi của họ trong một chương trình luồng. – jww

1

Nếu sử dụng .NET 2.0, hãy xem System.IO.Ports và this article sẽ hữu ích. Nếu trực tiếp Win32, thì Adam's answer là tốt nhất.

Các vấn đề liên quan