.Net SerialPort條碼槍接收數據換行不完全斷斷續續異常

 
諸多公司通常會有所謂倉儲
有些則會導入條碼掃描取代手動輸入的E化
節省keyin耗時 



近期由於移植過來的母公司早期寫的方式透過VB6的code based過舊不合適
要再另外寫一個.net 版本的barcode scanner 擴充程式接收來做不同業務邏輯

此時才發覺使用的條碼槍為rs232串口接收
需要透過 serial port 做讀取接收

https://www.posdata.eu/product/2874/datalogic-powerscan-pm9501-2d-hp-barcode-scanner-rs232-kit.html


只能說時常跟serial port接觸阿....
其實也不難用.net 可能C#或是vb.net寫的
通常不外乎自己拉一個SerialPort控制項
或是程式初始物件
//create a Serial Port object
SerialPort sp = new SerialPort ();





再去做DataReceivedHandler的事件註冊撰寫
這次發現在call SerialPort.ReadExisting方法從緩衝區讀出資料時候有時會是完整一行
有時則是會給我拆行
由於接收當下立馬有子字串拆接地幾個字元處裡
就會時常拆解錯
https://learn.microsoft.com/en-us/dotnet/api/system.io.ports.serialport.readexisting?view=net-8.0

建議在call SerialPort.ReadExisting方法之前
去call Thread.Sleep 方法 讓其延遲0.2~0.5秒 避免掃刷過程過快導致緩衝區資料來不及存入就被不完整讀取出來


另外補充說明 
一般掃條碼如果用的是USB接口的就不是透過serialport而是藉由文字框監聽事件
相當於滑鼠鍵盤keyin

如果是透過rs232這類接口則無法藉由文字框監聽事件來讀取喔
如果不能進庫房現場確認user電腦的時候
可以請user先打開notepad嘗試請他測試能否打印進去就可以區別出來了

另外一維條碼還會有空間限制,你如果字串封裝成barcode,字串內文愈長則barcode就會長愈長,而二維條碼不會有此問題但相關字型和既定硬體設備就需要評估哪種變革較合適。


留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題