Tôi đã thiết lập một SerialDataReceivedEventHandler, với một biểu mẫu dựa trên chương trình trong VS2008 express. cổng nối tiếp của tôi được thiết lập như sau:C# .Net Serial DataReceived Phản hồi sự kiện quá chậm đối với dữ liệu tốc độ cao
115200, 8N1
DTR và RTS kích hoạt
ReceivedBytesThreshold = 1
Tôi có một thiết bị Tôi interfacing với hơn một BlueTooth, USB để nối tiếp . Thiết bị đầu cuối siêu nhận dữ liệu tốt ở bất kỳ tốc độ dữ liệu nào. Dữ liệu được gửi thường xuyên trong các gói dài 22 byte. Thiết bị này có tốc độ điều chỉnh dữ liệu được gửi. Ở tốc độ dữ liệu thấp, 10-20Hz, mã bên dưới hoạt động rất tốt, không có vấn đề gì. Tuy nhiên, khi tôi tăng tốc độ dữ liệu qua 25Hz, có bắt đầu nhận được các gói mulitple trên một cuộc gọi. Những gì tôi có nghĩa là bằng cách này là phải có một sự kiện kích hoạt cho mỗi gói tin đến. Với tốc độ đầu ra cao hơn, tôi đã kiểm tra kích thước bộ đệm (lệnh BytesToRead) ngay lập tức khi sự kiện được gọi và có nhiều gói trong bộ đệm sau đó. Tôi nghĩ rằng sự kiện cháy chậm và vào thời điểm nó đạt đến mã, nhiều gói hơn đã đạt đến bộ đệm. Một thử nghiệm tôi làm là xem có bao nhiêu thời gian sự kiện được kích hoạt mỗi giây. Tại 10Hz, tôi nhận được 10 trình kích hoạt sự kiện, tuyệt vời. Tại 100Hz, tôi nhận được một cái gì đó giống như 40 sự kiện gây nên, không tốt. Mục tiêu của tôi cho tốc độ dữ liệu là 100HZ là chấp nhận được, ưu tiên 200Hz và tối ưu 300Hz. Điều này sẽ làm việc bởi vì ngay cả ở 300Hz, đó là chỉ 52800bps, ít hơn một nửa của tốc độ truyền 115200 thiết lập. Bất cứ điều gì tôi đang tìm kiếm?
public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(Display_Results));
}
private void Display_Results(object s, EventArgs e)
{
serialPort1.Read(IMU, 0, serial_Port1.BytesToRead);
}
Tôi đã thử xóa cuộc gọi Invoke() và đọc dữ liệu trực tiếp trong sự kiện DataReceived() với cùng kết quả. Xin lỗi là một chút ngây thơ, nhưng bạn có thể cho tôi biết thêm về cách bạn thực hiện hàng đợi và tại sao nó hoạt động nhanh hơn. Cảm ơn đã giúp đỡ. – Matthew