none
關於通訊埠(RS232) RRS feed

  • 問題

  • 之前看某本書上提及,SerialPort的讀和寫是不一樣的緩衝區,如次是否可以說明如下情況:

    我有兩個執行緒各自負責寫和讀,讀是不間斷的讀,寫是當使用者下指令後才會開始,

    如上述是不同緩衝區是否可以讀寫同時進行(系統會自行控制),還是得考慮控制讀寫執行緒(因為線路唯一)??

    2010年7月20日 下午 01:36

解答

所有回覆

  • Serialport提供了對串列埠的操作,當你去產生Serialport的實體之後,將Port開啟,這時也無法再去開啟第二次,這是第一個部分;而第二個部分跟你實際使用的串列通訊方式也有連帶關係,以RS232來說,RS232是全雙工,在線路上同時可以跑傳送/接收的訊號,而RS485是半雙工,同一時間上只能處理傳送或是接收。整體來說,在同一個串列埠的操作上,我個人認為用MutilThread去做是沒有幫助的,除了還是得去同步處理Read/Write動作,將Port開開關關的過程中也可能會造成資料的遺失。
    請注意討論區相關規則,良好的討論環境需要大家共同努力、遵守
    • 已標示為解答 小見光二 2010年7月23日 下午 04:10
    2010年7月22日 上午 10:26
    版主
  • 謝謝Bauann回答,可以再請問一個問題,如果我的情況

    電腦 --- RS232 ---(轉) --- RS485 --- 設備

    那樣的話我的連線算全雙工或半雙工呢??

    2010年7月22日 下午 04:04
  • 在485那一段一定是半雙工. 以比較糟的那個為準.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年7月22日 下午 04:18
    版主
  • 所以我的情況:有個執行續負責不間斷的從機器讀回資料,

    當使用者按下某個按鈕需要與機器溝通時,例如呼叫機器暫停的指令,

    我是否得先將執行緒先關閉(暫停),等按鈕事件處理完成.再開啟持續讀的執行緒,

    來避免傳輸間的資料會錯亂??

    或者最糟情況下呼叫機器暫停的指令將不知道何時會傳送(時間不確定性)??

    2010年7月23日 上午 07:33
  • 用佇列(先進先出)的方式來解決這個問題

    類似像以下這一篇的做法

    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/ff2dc8bb-f555-4d23-bc8f-0d1ef5ccba52


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 小見光二 2010年7月23日 下午 04:10
    2010年7月23日 上午 10:52
    版主