2011-10-10 33 views
6

Tôi đang cố gắng nói chuyện với thiết bị phần cứng thông qua cổng COM ảo. Máy tính chủ là PC Windows OS PC. Thiết bị đang hoạt động với tốc độ truyền 921600. Mã này hoạt động:Tốc độ truyền tùy chỉnh

 
DCB dcb; 
... 
dcb.BaudRate = CBR_115200; 
SetCommState(hPort, &dcb); 

Khi tôi thay đổi tốc độ truyền:

 
dcb.BaudRate = 921600; 

SetCommState thất bại với lỗi cuối cùng 0x57 (tham số là không chính xác). Điều này có nghĩa là Windows API ngăn chặn bất kỳ tốc độ truyền nào ngoại trừ các giá trị được xác định trước? Hoặc có thể, cổng COM ảo có thể được cấu hình để cho phép tốc độ truyền này?

Cổng COM ảo là một phần của kết nối CameraLink. Tôi đang nói chuyện với nhà cung cấp bảng CameraLink. Nhưng tôi cần biết liệu API giao tiếp nối tiếp của Windows có hỗ trợ tốc độ truyền tùy chỉnh hay không.

+2

Nếu đây là một cổng COM ảo, thường tốc độ truyền được cấu hình không quan trọng.Nếu bạn hạ thấp tốc độ xuống 9600 hoặc 4800 hoặc hơn, bạn có thấy tốc độ đó chậm lại không? Tôi nghi ngờ nó sẽ không. – Brad

+1

từ trải nghiệm của tôi với CameraLink: cổng COM chỉ được cung cấp để định cấu hình máy ảnh và phải hoạt động với tốc độ dữ liệu thấp chuẩn (thường là 9600baud). CameraLink chính nó nhanh hơn nhiều nhưng không đi qua cổng COM. triển khai khác là không chuẩn. (xem [đặc tả CameraLink] (http://www.lord-ing.com/web/IMG/pdf/Camera_Link-2.pdf)) –

+0

@Adrien Plisson: Theo đặc điểm kỹ thuật của Cameralink, máy ảnh và khung grabbers nên hỗ trợ tại ít nhất 9600 baud. Trên thực tế, khung grabbers Tôi đang làm việc với hỗ trợ 115200. Có vẻ như khung grabber dừng lại cho tôi, và không Windows. –

Trả lời

6

Iv'e vừa có một chuyến đi nhanh đến các tài liệu MSDN cho việc này, và đây là những gì được nói về thuộc tính BaudRate trong cấu trúc DCB.

BaudRate Tốc độ truyền mà thiết bị liên lạc hoạt động. Thành viên này có thể là giá trị tốc độ truyền thực tế hoặc một trong các chỉ mục sau. CBR_110. CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_57600, CBR_115200, CBR_128000, CBR_256000

Vì vậy, về mặt lý thuyết ít nhất bạn nên không có vấn đề thiết lập các cổng nối tiếp tốc độ yêu cầu của bạn.

Nó cũng khẳng định tiếp tục xuống rằng có một số sự kết hợp đó là không hợp lệ (Cụ thể khi lập trình 8250 con chip nối tiếp)

chú Khi một cấu trúc DCB được sử dụng để cấu hình 8250, các hạn chế sau đây áp dụng với các giá trị được chỉ định cho các thành viên ByteSize và StopBits: Số bit dữ liệu phải từ 5 đến 8 bit. Việc sử dụng 5 bit dữ liệu với 2 bit dừng là kết hợp không hợp lệ, như là 6, 7 hoặc 8 bit dữ liệu với 1,5 bit dừng.

Điều này làm tôi băn khoăn liệu sự cố bạn có là kết hợp nhất định là điều gây ra sự việc, thay vì chỉ thiết lập tỷ lệ truyền chẳng hạn.

Có thể baudrate của bạn là tốt, nhưng bằng cách chọn baudrate của bạn làm mất hiệu lực số bit dừng, hoặc chiều dài chẵn lẻ, mà khi baudrate được đặt trở lại một thiết lập tiêu chuẩn sau đó trở thành hợp lệ một lần nữa.

Tôi không biết phần cứng giao dịch của bạn nên tôi không thể nói 100% nếu đây là trường hợp, tôi chỉ biết lập trình cổng nối tiếp nói chung, nhưng cá nhân, bước tiếp theo của tôi là đặt baudrate thành những gì tôi cần sau đó rời khỏi đó như là, hãy thử tất cả các kết hợp khác nhau của lá cờ khác trong khối.

Trang MSDN chính thức cho cấu trúc DCB có thể được tìm thấy ở đây:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs.85).aspx

Bạn cũng có thể tìm thấy chức năng BuildCommDCB giúp đỡ một số quá:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363143(v=vs.85).aspx

+0

Cài đặt cổng của tôi khá chuẩn: kích thước byte 8, chẵn lẻ Không, điều khiển luồng Không, dừng bit 1. Trong khi đó, tôi nhận thông tin từ nhà cung cấp bảng Cameralink, rằng tốc độ truyền này không được hỗ trợ. Cảm ơn bạn đã liên kết BuildCommDCB :) –

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