發表文章

目前顯示的是有「BugsRecord」標籤的文章

[Tips] Serial Port 異常?

由於機台上有安裝CCD,在每次取像時,都需要依照需求去調整、設定參數。 日前客戶端回報:怎麼跑沒一百片,影像就開始花掉啦? 蝦毀!?花掉... 由於機台狀況,每次在取像前都必須依照他在第幾隻夾爪、要正向掃圖或是反向掃圖、設定Trigger Source、Encoder Source等等...此次花掉的情形就是因為正向或反向掃圖的參數沒設定到所導致。 那怎會沒設定到? 以下是其中一種可能的理由...並不代表每個人都這樣,但是可以試試無妨唷! //------------------------------------------------------- 在Visual Studio使用Serial Port,我會使用下列類別: System.IO.Ports.SerialPort 在類別建立時,依照建構子來說,可以給他指定的連接 埠名稱、 傳輸速率、同位檢查位元、資料位元和停止位元等。 建構好Serial Port物件後,就可開始使用他來接收資料、傳送資訊等等,這些動作都會透過 Buffer當做暫存緩衝區域 。 MSDN中,可以看到有 ReadBufferSize 跟 WriteBufferSize 的 屬性,可用此屬性來設定或取得當前Serial Port輸出入的緩衝區域大小。 當每次對此Serial Port去讀取/ 寫入時,會有許多寫入或讀取到的位元組放置在Buffer區域中,久而久之,當Buffer中裝 滿 了,可能就寫不進去了。所以就導致寫入參數,但是卻沒反應或者其他的狀況發生。(我是發生在只是寫入,未讀取的狀況) 如果要解決此問題,就得要定時的清空緩衝區內的資料。 有同事建議可添加 DataReceived 事件,每當取得資料時,就利用 ReadExisting 方法去讀取緩衝區中的值,每次讀取完後,物件似乎會自己將已經讀取的資訊給清理掉。 就事件的話,可利用 DiscarcOutBuffer / DiscardInBuffer 來清空傳輸/ 接收暫存緩衝區內的資料。 就是那麼奇妙...添加事件去讀取存在的值之後,問題就消失了呢... P.S. 此篇文章主要記錄自己BUG發生的解法,並無特別再多做測試...僅供參考唷