運(yùn)輸場(chǎng)地磅稱量系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
地磅稱量系統(tǒng)通過RS232串口實(shí)現(xiàn)地磅稱量設(shè)備與計(jì)算機(jī)之間的數(shù)據(jù)通信.利用Win-dows API函數(shù)實(shí)現(xiàn)串口編程,完成稱量數(shù)據(jù)采集.與后臺(tái)數(shù)據(jù)庫交換數(shù)據(jù),實(shí)現(xiàn)對(duì)地磅稱量數(shù) 據(jù)的實(shí)時(shí)顯示、自動(dòng)采集、安全存儲(chǔ)、多方式查詢、統(tǒng)計(jì)匯總和打印輸出等工作,最大限度地防 止舞弊行為的發(fā)生.
安置在地面以下稱量較大噸位的稱叫地磅, 專用于稱量汽車的地磅又稱為汽車衡.地鎊屬于 衡器的一種,是廠礦、商家等用于大宗貨物計(jì)量的 主要稱重設(shè)備,廣泛應(yīng)用于林業(yè)、煤炭、冶金、電 力、港口、倉儲(chǔ)等行業(yè)[1—2].黑龍江省鶴北林業(yè)局 使用電子汽車衡稱量系統(tǒng)進(jìn)行木材檢驗(yàn)控制,不 僅保證了檢驗(yàn)質(zhì)量及檢驗(yàn)速度,減少了人為檢驗(yàn) 誤差,還提高了勞動(dòng)生產(chǎn)率,獲得了顯著的經(jīng)濟(jì)效 益[3].在我國(guó),許多運(yùn)輸場(chǎng)采用地磅儀表顯示計(jì)量 數(shù)據(jù),司磅員手工填寫單據(jù)、報(bào)表的人工操作,工 作安全性差,容易出錯(cuò),效率低,難以快速統(tǒng)計(jì),不 能滿足生產(chǎn)經(jīng)營(yíng)的要求.當(dāng)前,用戶對(duì)用衡器完成 測(cè)管控稱一體化功能的要求日益高漲,稱重技術(shù) 得以與控制系統(tǒng)和信息管理系統(tǒng)同步發(fā)展,實(shí)現(xiàn) 了衡器管理的計(jì)算機(jī)化、網(wǎng)絡(luò)化和智能化.
針對(duì)國(guó)內(nèi)地鎊系統(tǒng)自動(dòng)化程度應(yīng)用不高的現(xiàn)狀, 通過開發(fā)一套地磅稱量計(jì)算機(jī)管理系統(tǒng),將稱量設(shè) 備、if賓機(jī)、數(shù)據(jù)庫有效地結(jié)合起來,實(shí)現(xiàn)稱量信息的 自動(dòng)采集、自動(dòng)處理,最大限度地防止舞弊行為的發(fā) 生,為企業(yè)的現(xiàn)代化管理提供有力的幫助.
1.系統(tǒng)目標(biāo)
通過項(xiàng)目實(shí)施使地磅稱量設(shè)備與計(jì)算機(jī)連 接,通過計(jì)算機(jī)軟件編程讀取稱量設(shè)備數(shù)據(jù),與后 臺(tái)數(shù)據(jù)庫交換數(shù)據(jù),實(shí)現(xiàn)對(duì)稱量數(shù)據(jù)的實(shí)時(shí)顯示、 自動(dòng)采集、安全存儲(chǔ)、多方式查詢、匯總統(tǒng)計(jì)和打印 輸出等工作.根據(jù)企業(yè)管理上的要求,所設(shè)計(jì)的稱 量管理軟件需達(dá)到以下幾個(gè)目標(biāo):符合運(yùn)輸場(chǎng)的業(yè) 務(wù)流程和要求,程序流程清晰、嚴(yán)密;獲取稱重?cái)?shù)據(jù) 快速、準(zhǔn)確;操作簡(jiǎn)便,自動(dòng)化程度高,能有效防止舞 弊行為;數(shù)據(jù)查詢、報(bào)表制作方便快捷;系統(tǒng)長(zhǎng)時(shí)間 運(yùn)行穩(wěn)定可靠;數(shù)據(jù)安全性和可靠性高.
2.需求分析
2.1運(yùn)輸場(chǎng)硬件條件
運(yùn)輸場(chǎng)硬件要求:1臺(tái)地磅;1臺(tái)計(jì)算機(jī)(能流 暢運(yùn)行Win98及其以上操作系統(tǒng),100 M以上硬盤 剩余空間);1個(gè)條碼閱讀器;1臺(tái)打印機(jī).
2.2運(yùn)輸場(chǎng)稱量業(yè)務(wù)流程
運(yùn)輸場(chǎng)稱量業(yè)務(wù)流程:重車上磅,記錄重車質(zhì) 量;重車下鎊,到指定地點(diǎn)卸貨并領(lǐng)取回執(zhí)單;空車 上磅,交回回執(zhí)單并記錄空車質(zhì)量;空車下磅,結(jié)束.
2.3功能分析
根據(jù)運(yùn)輸場(chǎng)的條件和要求,項(xiàng)目開發(fā)的地磅 稱量系統(tǒng)主要功能包含:稱量數(shù)據(jù)自動(dòng)采集;歷史 稱量數(shù)據(jù)維護(hù);多方式查詢;報(bào)表統(tǒng)計(jì)及打印;代 碼維護(hù);系統(tǒng)參數(shù)設(shè)置;用戶權(quán)限設(shè)置;數(shù)據(jù)備份 與恢復(fù).同時(shí),為將來網(wǎng)絡(luò)化環(huán)境中實(shí)現(xiàn)數(shù)據(jù)共享 預(yù)留接口.
2.4系統(tǒng)功能詳細(xì)設(shè)計(jì)
根據(jù)功能分析,地磅稱量系統(tǒng)主要包含稱量數(shù) 據(jù)管理、系統(tǒng)設(shè)置兩大模塊,系統(tǒng)總體結(jié)構(gòu)見圖1.
稱量數(shù)據(jù)管理:主要是對(duì)稱量數(shù)據(jù)進(jìn)行管理,包 含“稱量數(shù)據(jù)采集”、“稱量數(shù)據(jù)維護(hù)”、“報(bào)表打印”、 “數(shù)據(jù)備份”、“數(shù)據(jù)恢復(fù)”5個(gè)子模塊.
“稱量數(shù)據(jù)采集”用于自動(dòng)采集車輛稱量數(shù)據(jù)-
“稱量數(shù)據(jù)維護(hù)”用于維護(hù)車輛稱量歷史數(shù) 據(jù),可以對(duì)稱量數(shù)據(jù)進(jìn)行添加、修改、刪除、査詢、統(tǒng)計(jì) 等操作.
“報(bào)表打印”用于打印年報(bào)表、月報(bào)表、臨時(shí) 報(bào)表和回執(zhí)卡.
“數(shù)據(jù)備份”用于將系統(tǒng)數(shù)據(jù)備份到指定的 文餘
“數(shù)據(jù)恢復(fù)”用于從指定文件夾恢復(fù)系統(tǒng)數(shù)
據(jù).
系統(tǒng)設(shè)置:主要用于維護(hù)系統(tǒng),包含“員工信息 維護(hù)”、“車輛信息維護(hù)”、“系統(tǒng)參數(shù)設(shè)置”、“通信參 數(shù)設(shè)置”、“操作員管理”、“更改密碼”等6個(gè)模塊.
“員工信息維護(hù)”用于維護(hù)員工信息,可以 對(duì)員工信息進(jìn)行添加、修改、刪除等操作’
“車輛信息維護(hù)”用于維護(hù)車輛信息,可以 對(duì)車輛信息進(jìn)行添加、修改、刪除等操作?
“系統(tǒng)參數(shù)設(shè)置”用于設(shè)置系統(tǒng)參數(shù),如地 磅無車的判定質(zhì)量、月報(bào)表的開始和結(jié)束時(shí)間等.
“通信參數(shù)設(shè)置”用于設(shè)置地磅的通信參數(shù) 和稱量數(shù)據(jù)格式,如串口號(hào)、波特率等.
“操作員管理”用于系統(tǒng)操作員的管理,包 括添加、刪除操作員,授予操作員權(quán)限等.
“更改密碼”用于更改當(dāng)前用戶的登錄密碼.
3.數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫設(shè)計(jì)(Database Design)包括數(shù)據(jù)庫設(shè) 計(jì)和數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計(jì)兩個(gè)方面,在設(shè)計(jì)過程 中,應(yīng)把數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)和數(shù)據(jù)處理的操作設(shè) 計(jì)緊密結(jié)合起來,相互參照和相互補(bǔ)充地磅稱
量系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)按以下步驟進(jìn)行:
根據(jù)已收集的原始數(shù)據(jù)和系統(tǒng)設(shè)計(jì)需 要,確定系統(tǒng)應(yīng)包含的數(shù)據(jù)表.
確定數(shù)據(jù)表應(yīng)包含的數(shù)據(jù)項(xiàng)和這些數(shù)據(jù) 項(xiàng)的定義,如內(nèi)容、長(zhǎng)度、類型等.
按照 3NF(Third Normal Form)標(biāo)準(zhǔn)對(duì)數(shù) 據(jù)表進(jìn)行標(biāo)準(zhǔn)化,即表內(nèi)的每一個(gè)值都只能被表 達(dá)一次.表內(nèi)的每一行都應(yīng)該被唯一標(biāo)識(shí)(有唯一 鍵).表內(nèi)不應(yīng)該存儲(chǔ)依賴于其他鍵的非鍵信息.
由于標(biāo)準(zhǔn)化可能給數(shù)據(jù)庫引人太高的復(fù) 雜性,降低系統(tǒng)效率,因此需要對(duì)數(shù)據(jù)表結(jié)構(gòu)進(jìn)行 調(diào)整,允許數(shù)據(jù)適量冗余,使其在性能、擴(kuò)展性和 數(shù)據(jù)完整性方面達(dá)到最好的平衡.
建立數(shù)據(jù)字典.數(shù)據(jù)字典是數(shù)據(jù)庫應(yīng)用 設(shè)計(jì)的重要內(nèi)容,它是描述數(shù)據(jù)庫中各數(shù)據(jù)屬性 與組成的數(shù)據(jù)集合,在數(shù)據(jù)庫的整個(gè)生命周期里 都起著重要的作用.
地磅稱量系統(tǒng)包含的主要數(shù)據(jù)表及其用途見 表1,系統(tǒng)實(shí)體-聯(lián)系圖(E-R圖)見圖2.
4.系統(tǒng)實(shí)現(xiàn)
地磅稱量系統(tǒng)包括稱量設(shè)備與計(jì)算機(jī)的通信 和稱量數(shù)據(jù)管理的MIS系統(tǒng)兩部分.稱量設(shè)備通 過RS232串口與計(jì)算機(jī)的串口連接,并向計(jì)算機(jī) 的串口發(fā)送數(shù)據(jù);MIS系統(tǒng)定時(shí)掃描串口獲取數(shù) 據(jù),經(jīng)格式轉(zhuǎn)換后通過事件驅(qū)動(dòng)調(diào)用相關(guān)模塊對(duì) 數(shù)據(jù)進(jìn)行處理.
4.1硬件組成
系統(tǒng)硬件組成框圖見圖3.
4.2開發(fā)工具與數(shù)據(jù)庫管理系統(tǒng)選擇
前端開發(fā)工具采用PowerBuilder;后臺(tái)數(shù)據(jù)庫 管理系統(tǒng)采用 ASA 7.0 ( Adaptive Server Any-where). 當(dāng)局域網(wǎng)建成后,可采用SQLServer2000 等大中型數(shù)據(jù)庫管理系統(tǒng)作為后臺(tái)數(shù)據(jù)庫管理系 統(tǒng),以獲得更高的數(shù)據(jù)安全性和實(shí)現(xiàn)網(wǎng)絡(luò)環(huán)境中 的數(shù)據(jù)共享.
4.3關(guān)鍵技術(shù)
數(shù)據(jù)通信與采集的實(shí)現(xiàn)是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵. 串行通信因其線路簡(jiǎn)單,開發(fā)相對(duì)比較容易,所以 經(jīng)常應(yīng)用于各種監(jiān)控、測(cè)試和自動(dòng)化設(shè)備中.系統(tǒng) 中,稱量設(shè)備與計(jì)算機(jī)之間通過RS232串口連接, 數(shù)據(jù)通信的核心就是如何實(shí)現(xiàn)串口編程,通過串 口進(jìn)行數(shù)據(jù)通信,從而實(shí)現(xiàn)數(shù)據(jù)的采集.在Win-dows 環(huán)境下,不能直接對(duì)硬件進(jìn)行讀寫,實(shí)現(xiàn)串口 編程一般采用以下兩種方法:一是利用Windows 本身提供的通信API函數(shù);二是利用微軟公司提 供的通信控件MSComm.關(guān)于利用MSComm控件 實(shí)現(xiàn)串口編程的方法前人做了很多研究Ue-14’16], 本文給出了對(duì)串口進(jìn)行讀寫的一種簡(jiǎn)化步驟,降 低了程序的復(fù)雜性.下面是利用Windows API函數(shù) 實(shí)現(xiàn)串口編程的程序?qū)崿F(xiàn)U5-17].
外部函數(shù)定義
Windows API函數(shù)在PowerBuilder中使用之前 必須先聲明為外部函數(shù),下面是系統(tǒng)中用到的 Windows API函數(shù)的聲明:
Function Boolean CloseHandle (ulong hOb- ject ) Library "kemel32.dll" //關(guān)閉串口
FUNCTION Boolean ReadFile(ulong fhand, ref blob lpbuffer, ulong numbyte, ref ulong bytes- read, ulong lpover) LIBRARY ” kemel32, dll" //讀 取串口數(shù)據(jù)
(3 ) FUNCTION ulong CreateFileA ( ref stringfname, ulong f一access,ulong f—share,ulong f_sec, ulong f一create,ulong f_flag, ulong f_attrib) LI-BRARY "kemel32.dll" //打開串口
Function Boolean WriteFile(uLong handle, ref blob lpbuffer, ulong numbytes, ref ulong bytes- read, ulong lpOverLaped) Library M Kemel32. dll” //寫人串口數(shù)據(jù)
Function Boolean GetCommProperties(ulong hFile,ref COMMPROP lpCommProp ) Library " Ker- neB2. dll” //返回COMM設(shè)備屬性
(6 ) Function Boolean BuildCommDCBA ( ref string lpDef,ref DCB lpDCB ) Library " Kemel32. dll" //向DCB中傳送設(shè)備定義字符串
(7 ) Function Boolean SetCommState ( ulong hCommDev, ref DCB lpdcb ) Library "Kemel32. dll” //設(shè)置串口狀態(tài)
(8 ) Function Boolean GetCommState ( ulong hCommDev,ref DCB lpdcb ) Library "Kemel32, dll” //讀取顯示設(shè)置參數(shù)
(9 ) Function ulong GetLastError ( ) Library "Kemel32.dll" //返回?cái)U(kuò)充出錯(cuò)代碼
(10) Function Boolean SetCommTimeouts ( ulong hCommDev, ref COMMTIMEOUTS lpctmo ) Library M Kemel32. dll" //設(shè)置通信讀寫時(shí)間范圍
(11 ) Function Boolean PurgeComm ( ulong hCommDev,ulong fdwAction ) Library ?? Keme!32. dll” //消除通信隊(duì)列
Windows API通信函數(shù)的串口通信程序?qū)?/span> 現(xiàn)方法在Windows系統(tǒng)中,串行通信是作為文 件讀寫來處理的,其串口讀寫的一般過程為:
配置串口 ■—?串口讀寫—關(guān)閉串口
打開串口.在Windows環(huán)境下,使用Cre-ateFileA 函數(shù)打開串口,若成功打開則串口通信端 口即可使用,并返回一個(gè)Handle值,程序中將使用 此Handle值進(jìn)行相關(guān)的串口操作.
配置串口.包括初始化端口、設(shè)置DCB結(jié) 構(gòu)和設(shè)置超時(shí)值.使用SetCommState函數(shù)設(shè)置串 口狀態(tài),包括波特率、字節(jié)長(zhǎng)度、校驗(yàn)位、停止位亭;使用SetCommTimeouts函數(shù)設(shè)置超時(shí)值.
串口讀寫.Windows環(huán)境下對(duì)串口的讀寫 長(zhǎng)用ReadFile函數(shù)和WriteFile函數(shù).讀寫方式有 兩種:重疊模式和非重疊模式(或稱為異步模式和 司步模式).
串口關(guān)閉?串口使用完畢,應(yīng)使用Close- landle函數(shù)關(guān)閉串口,釋放串口資源.
根據(jù)運(yùn)輸場(chǎng)稱量業(yè)務(wù)流程,稱量數(shù)據(jù)采集模 弁主要程
系統(tǒng)設(shè)置了自助査詢功能.當(dāng)?shù)匕跎蠠o車時(shí), 吾工在稱量數(shù)舍采集窗口中輸入員工編號(hào)(使用 君工卡,通過條碼閱讀器輸人),“已完成數(shù)據(jù)”欄 戶只顯示該員工當(dāng)天的所有記錄,方便員工查閱? 為了防止作弊行為發(fā)生,系統(tǒng)在程序流程中 3;置了一些檢查。
iD稱重時(shí),必須是前 >,妁質(zhì)量值小于設(shè)定的稱—備 (缸系統(tǒng)參數(shù)設(shè)置模塊設(shè)置)時(shí),下 上地磅,否則系統(tǒng)會(huì)認(rèn)為員工企#重復(fù) 數(shù)據(jù)而拒絕接受數(shù)據(jù).
$防止員工通過各種手段增,重 或減少空★量來提高凈質(zhì)值,系統(tǒng)通過¥ 工信息表和#信息表,查詢?cè)撥囆偷?/span>_ 限和空車上下與稱量數(shù)據(jù)比較,判斷車^ 于重車狀態(tài)還是#狀態(tài).系統(tǒng)拒絕接收不: 的稱量數(shù)據(jù),并顯示栩應(yīng)信息提示員工.
系統(tǒng)設(shè)置了兩次稱重車的間隔時(shí)間?機(jī) 果兩次稱重車的時(shí)間間陶、小于設(shè)定的間隔時(shí)間 (在系統(tǒng)參數(shù)設(shè)置模塊設(shè)置系統(tǒng)拒絕接受后一 次稱量的數(shù)據(jù),并顯示相應(yīng)信¥示員工?
員工在稱量空車時(shí),員工編號(hào)后,還 需要輸入卸貨時(shí)獲得的回執(zhí)卡卡重車數(shù)據(jù)、空 車數(shù)據(jù)和回執(zhí)卡號(hào)齊全,記錄才會(huì)~加到稱量 信息表中,并參與統(tǒng)計(jì)匯總(計(jì)算工作夂?
5.結(jié)束語
地磅稱量系統(tǒng)將稱量設(shè)備、計(jì)算機(jī)、數(shù)據(jù)¥ 效地結(jié)合起來,實(shí)現(xiàn)了對(duì)稱量數(shù)據(jù)的實(shí)時(shí)顯示、 動(dòng)采集、安全存儲(chǔ)、多方式查詢、匯總統(tǒng)計(jì)和打印 輸出等工作,為運(yùn)輸場(chǎng)運(yùn)力調(diào)節(jié)提供科學(xué)、準(zhǔn)確、 及時(shí)的數(shù)據(jù).同時(shí)還減輕了工作人員的勞動(dòng)強(qiáng)度, 提高了工作效率和經(jīng)濟(jì)效益,最大限度地防止舞 弊行為的發(fā)生,在企業(yè)的生產(chǎn)和管理中發(fā)揮了積 極作用.
地磅稱量系統(tǒng)從硬件、軟件和通信等方面進(jìn) 行了研究設(shè)計(jì),其結(jié)構(gòu)簡(jiǎn)單實(shí)用,操作簡(jiǎn)便,安全 可靠,具有較好的通用性、開放性、擴(kuò)展性、可維護(hù) 性,充分保護(hù)企業(yè)的投資.系統(tǒng)已在昆明市五華區(qū) 環(huán)衛(wèi)處廢棄物運(yùn)輸場(chǎng)運(yùn)行1年多,性能穩(wěn)定可靠, 效果良好,有顯著的經(jīng)濟(jì)效益和社會(huì)效益,具有一 定的推廣價(jià)值