none
visual C# RS232 撰寫問題 RRS feed

  • 問題

  • 各位先進好:

         我最近在寫一個C#的RS232接收程式,目前採用DataReceived的事件來接收資料,方法是一個byte一個byte接收,直到判斷到結束字元為止。

         但由於設備一次回傳的字元有2000 bytes,目前測出來一次接收最快也要400多ms,但我的設備回傳速率為75 Hz,不知道有無方法能提升RS232接收的速度? 謝謝各位~

    LEAFA


    • 已編輯 LEAFA 2015年1月23日 上午 02:28
    2015年1月23日 上午 02:27

解答

  • 這要看設備的 baud rate 吧 ? 如果 baud rate 是 9600, 除以 8 , 每秒頂多傳 1200 bytes.

    另外, ReadExisting 只適用於傳回的資料內容全部都能轉成可見 ASCII 字元的情境, 如果資料裡有甚麼 0x00,0x01,0x02,0x03的, 用 ReadExisting 是沒轍的.

    而 ReadLine 的條件是結尾必須是換行符號才有用

    所以常寫序列埠通訊的人, 要不是用 Read, 就是用ReadByte
    如果你覺得 ReadByte 有可能是影響效率的因素, 不妨試試這篇文章的方式 

    Serial Port 系列(14) 基本篇 -- 完整接收資料(三)

     

    另外, 在快速接收的狀況下, 少用DataReceived, 你可以看以下兩篇文章, 有問題的說明與簡單的解決方案

    Serial Port 系列(9) 基本篇 -- The Dark Side of the DataReceived Event

    Serial Port 系列(11) 基本篇 -- 利用執行緒讀取資料

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2015年1月23日 下午 02:00
    版主
  • SerialPort 的緩衝記憶體預設 4kb

    善加利用緩衝區、計算適當的休眠時間,減少讀取次數,有利於你的加速。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年1月23日 下午 02:55

所有回覆