接下來我會整理一些做過的專案, 並將其中有通用性的**開源出來, 如果有誰碰巧有這樣的需求, 可以拿過去用就行了.
工人使用加工中心(數控工具機)加工工件時, 需要根據工件的型號, 然後在使用者介面上瀏覽找到對應的nc檔案, 然後加工中心載入這個nc檔案, 完成工件加工. 該加工中心的作業系統是windows.
問題是: 在加工中心上找檔案, 因為鍵盤的緣故很不方便, 同時nc檔案又特別多, 容易找錯檔案.
我給出的方案是: 使用掃瞄槍, 條碼為工件的型號, 通過型號和nc檔案的對映關係, 可以得到nc檔名, 然後控制原有加工程式載入指定的nc檔案.
難點是: 加工中心作業系統是那種深度定製的windows程式, 同時只能有乙個視窗程式執行, 所以不能再做乙個window form來接收條碼值. 所以我開發了乙個後台程式, 既然是後台程式, 即需要在後台監控掃瞄槍, 就有了下面這個barcodescanmonitor原始碼了.
文件介紹見:
監控掃瞄槍的掃瞄動作.即使我們的程式不是windows的當前活動程式, 也可以監控到.
採用keyboard hook的方式實現監控. 其實掃瞄槍掃瞄的過程相當於鍵盤快速輸入一段文字, 最後的回車相當於掃瞄結束
如果沒有掃瞄槍, 可使用大鍵盤模擬, 但不能使用小鍵盤.
由於採用了訊息hook機制, 監控的結果並不會百分百準確, 表現為: 數字有時會錯位, 有時會重複, 有時會丟掉一位,
如果準確度要求高, 有兩種方法: 1.[已實現]為掃瞄槍設定掃瞄字首和字尾, 用作驗證, 如果監控的結果不包含這對字首/字尾, 即捨棄監控結果. 2.[未實現]根據條碼本身的驗證演算法, 對監控的結果進行驗證
初始化 tbarcodescanmonitor 例項, 然後設定必要的屬性, 比如barcode的可能長度, barcode掃瞄最大耗時; 然後為掃瞄結束動作繫結乙個事件; 最後啟動掃瞄監控. 在你的掃瞄結束事件中, 就可以取到barcode值了.
fbarreader:=tbarcodescanmonitor
.getinstance
();fbarreader
.relaykeypress
:=true
;//按鍵**獲後, 是否要繼續將按鍵顯示出來
fbarreader
.barcodelengths:='
3,4'
;//條碼可能的長度
fbarreader
.scanmaxdurationsecond
:=10
;//掃瞄條碼的最大耗時
fbarreader
.alwaysduplicatedread
:=false
;//防止條碼值重複
fbarreader
.checkprefixstr
:=''
;//字首驗證碼
fbarreader
.checksuffixstr
:=''
;//字尾驗證碼
fbarreader
.autoremovecheckstr
:=true
;fbarreader
.hookedthreadid:=0
;//0為os級別的鍵盤hook
fbarreader
.onscanfinished
:=self
.onscanfinished1
;//繫結乙個掃瞄結束的事件
iffbarreader
.startlistenscan()=
false
then
//開始監聽鍵盤
begin
msg:='
barcode
scanner
failed
tolisten';
.messagebox
(pchar
(msg),'
init
failure',
mb_ok
+mb_iconstop
);end
;
原始碼和文件分享 基於Python的智慧型監控平台
檔案結構介紹 templates 資料夾中是網頁模版 static 資料夾中是一些靜態檔案js和css檔案 res 資料夾中是 object detection 需要的訓練好的模型和標籤和其他的資源檔案 output 資料夾中放置的是 object detection 分析的結果 camera.py...
TKeed原始碼分析之新增listen監聽事件
前面初始化監聽套接字listen fd後,現在把它加入到epoll核心事件表當中。初始化套接字開始監聽 int listen fd socket bind listen conf.port 設定為socket非阻塞 int rc make socket non blocking listen fd ...
Memcached原始碼分析之資源分享
facebook對memcached的提公升 memcached原始碼分析之記憶體管理篇 the time is passing iteye技術 memcached原始碼分析之記憶體管理篇之item結構圖及slab結構圖 yxnyxnyxnyxnyxn的專欄 關於memcache記憶體管理模型的理解...