李麗宏 王淑娟
(太原理工大學信息工程學院,太原 030024)
在高速公路計重收費系統中,車輛稱重數據是收費軟件計算通行費的主要依據。通常收費計算機通過串口獲取稱重儀表數據,但不同廠商、不同型號的稱重儀表采用不同的協議,導致計重收費軟件的通用性差和管理復雜[1]。因此本文設計了串口通信動態鏈接庫,它作為稱重儀表與收費軟件接口,使收費軟件可以通過訪問動態鏈接庫中的函數來獲取車輛稱重數據;同時,方便了收費軟件的管理,并實現不同協議的儀表共用統一收費軟件的目的。計重收費系統中稱重數據流圖如圖1所示。

圖1 計重收費系統中稱重數據流圖
動態鏈接庫的三個關鍵文件:*.cpp、*.h和*.def,其中“*.cpp”文件用來編寫函數主體[2];“*.h”文件用來定義動態鏈接庫的導出函數,在導出函數前使用_declspec (dllexport)關鍵字和extern "C"連接指示符來實現動態鏈接庫函數的導出[3];“*.def”文件用來設置導出函數名,當使用“_stdcall”調用約定時,若不通過此文件來設置導出函數名稱,則會發生函數命名改變的情況[4]。
本文設計的串口通信動態鏈接庫是在Microsoft Visual C++6.0環境下開發完成的,VC++6.0中對串口操作的流程為:打開串口、設置串口、讀串口、寫串口及關閉串口[5]。在實現串行通信的動態鏈接庫時,首先以重疊I/O方式打開串口并初始化,然后創建讀串口線程[6],此時讀串口線程函數開始在后臺實時讀取串口數據。當收到符合要求的數據后,該線程回應相應數據幀給稱重儀表,同時將數據保存在Temprecord.dat文件中,確保串口數據的掉電不丟失,從而達到數據完整的效果。……