[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發生的解法,並無特別再多做測試...僅供參考唷
日前客戶端回報:怎麼跑沒一百片,影像就開始花掉啦?
蝦毀!?花掉...
由於機台狀況,每次在取像前都必須依照他在第幾隻夾爪、要正向掃圖或是反向掃圖、設定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發生的解法,並無特別再多做測試...僅供參考唷