国产一区二区免费精品无码精品亚洲中文免费_不卡无码免费视频一_国产精品无码色一区二涩欲区三区_亚洲欧洲成人精品一区二区综合精品区_2024无码视频中文字幕_又爽又大欧美视频_亚洲性色AV片在线播放_伦理片日本韩国电影三级在线观看_久久无码西西人体_91麻豆视频观看

您當(dāng)前的位置:首頁>>新聞中心>>行業(yè)動態(tài)

VB編程技術(shù)在汽車衡管理軟件上的應(yīng)用

時間:2017-06-27 03:34:23   點擊數(shù):

本文通過對一個汽車衡管理系統(tǒng)軟件的編程過程,介紹了用VB6.0編程軟件在汽車衡管理系統(tǒng)中的技術(shù)應(yīng)用

1.引言

Visual Basic (簡稱VB)Win- dows環(huán)境下簡單、易學(xué)、高效的編 程語言開發(fā)系統(tǒng),以其所見即所得 的可視化界面設(shè)計風(fēng)格和32位面向 對象的程序設(shè)計等特點,已廣泛地應(yīng) 用于各個領(lǐng)域,是很多計算機軟件開 發(fā)人員采用的開發(fā)工具。VB提供了良 好的界面設(shè)計能力,提供了強大的 數(shù)據(jù)庫訪問功能和微機串口通信功 能。完全能夠滿足汽車衡管理系統(tǒng) 的數(shù)據(jù)采集、處理和存儲要求。下 面以SCS微機汽車衡稱重軟件為例敘述VB軟件對系統(tǒng)中幾個重要功能 程序的設(shè)計。

2.管理軟件功能需求

SCS微機汽車衡稱重系統(tǒng)主要 通過計算機串口連接汽車衡稱重儀 表,處理儀表所獲取的汽車重量信 息,達到管理汽車稱重數(shù)據(jù)的目的。 系統(tǒng)軟件要求達到的功能主要有:

1設(shè)置管理權(quán)限,達到操作 人員分級登錄操作。

2記錄、貯存并打印每一次 稱重結(jié)果。包括車號、貨物名稱、運 貨單位、駕駛員、毛皮重、凈重、進 出廠過磅時間、司磅員等內(nèi)容。

3查詢打印功能??砂窜?/span> 號、時間范圍、司磅員、貨物種類、 駕駛員等或任意組合查詢過去稱重 記錄,并可打印輸出。

4統(tǒng)計打印功能??蓪ΨQ重 結(jié)果自動進行統(tǒng)計,并打印各種報 表,如月報、年報、分類報表等。

5數(shù)據(jù)維護功能。包括記錄

限制修改和刪除,數(shù)據(jù)備份和導(dǎo)出。

在這個系統(tǒng)軟件中,重點是編寫數(shù)據(jù)采集的串口通信模塊和數(shù)據(jù)庫 操作訪問功能程序。用Visual Ba- sic編程語言來編制這些程序,也就 要充分理解串口通信和數(shù)據(jù)庫訪問 相關(guān)的控件特點和應(yīng)用技術(shù)。

3.數(shù)據(jù)采集程序模塊的設(shè)計

3.1選擇MSComm控件實現(xiàn)串口 通信

VB開發(fā)串口通信程序常用兩 種方法,一種是利用WINDOWS的通 API函數(shù)實現(xiàn),另一種是采用VB 內(nèi)集成的MSComm通信控件實現(xiàn)。在 實例中選用MSComm控件實現(xiàn)串口通 信的編程,該控件具有豐富的與串 口通信密切相關(guān)的屬性和事件,提 供了對串口的各種操作。在通信過 程中,當(dāng)發(fā)送數(shù)據(jù)、收到數(shù)據(jù)或產(chǎn) 生傳輸錯誤時,觸發(fā)MSComm控件的 OnComm事件,然后可以通過判斷 CommEvent屬性值獲得事件類型,再 根據(jù)事件類型進行相應(yīng)數(shù)據(jù)處理。 因此用其實現(xiàn)微機串口的數(shù)據(jù)通信 相當(dāng)簡單,以很少的程序代碼就可 以輕松實現(xiàn)串口的訪問和數(shù)據(jù)通信。

3.2儀表參數(shù)及其數(shù)據(jù)通信協(xié)議 以微機管理系統(tǒng)連接汽車衡XK3 190-A9稱重顯示器為例。該儀表可 連接8350 012700 0的高精度稱 重傳感器,用于測量汽車重量數(shù)據(jù)。 儀表測量準(zhǔn)確度為IIIN=3000) 按顯示分度值設(shè)置不同,測量范圍 最大值100噸。該儀表具有RS-232/ RS422 (選配串行通訊接口,能與 微機進行串口數(shù)據(jù)通信,實時傳送 檢測數(shù)據(jù)。

該儀表串口數(shù)據(jù)通信協(xié)議是:數(shù) 據(jù)傳輸速率為600/1200/2400/9600bps (可選,數(shù)據(jù)格式10位):1 開始位,8位數(shù)據(jù)位ASCII編碼1位停止位,無奇偶校驗位。通訊方 式有連續(xù)方式和指令方式兩種,這里 只列舉連續(xù)通訊方式中的格式。

所傳送的數(shù)據(jù)為儀表顯示的當(dāng) 前稱量(毛重或凈重)。每幀數(shù)據(jù)由 10組數(shù)據(jù)組成。格式如表1。

云網(wǎng)客1.jpg

3.3部分參數(shù)的技術(shù)說明

1為滿足各種儀表參數(shù)和計 算機不同運行環(huán)境的需要,把串口 通信的一些參數(shù)用數(shù)據(jù)庫的表進行 存放,程序通過讀取表數(shù)據(jù)來進行 通信環(huán)境參數(shù)的設(shè)置。這樣做用戶 可以修改數(shù)據(jù)表的數(shù)據(jù)來改變運行 參數(shù),以滿足實際需要。

2為了提高接收數(shù)據(jù)的讀 取速度,實現(xiàn)實時監(jiān)測功能,設(shè)置 MSComm1的屬性RThreshold=4, 收緩沖區(qū)收到四個字節(jié)產(chǎn)生OnComm 事件;InputLen=1,每次讀取一個 字節(jié)。設(shè)置接收數(shù)據(jù)模式采用二進制形式,即InputMode=comInputM odeBinary。設(shè)置InBufferSize=50 (設(shè)置接收緩沖區(qū)為50字節(jié)), OutBufferSize=2 (設(shè)置發(fā)送緩沖區(qū) 為2字節(jié))。

(3)定義一個Byte類型數(shù)組變 量來存放重量數(shù)據(jù)值。注意用Input 屬性讀取數(shù)據(jù)時,還要看儀表輸出 數(shù)據(jù)位格式的編碼方式。壓縮的BCD 碼存入Byte類型變量,VB系統(tǒng)只按 十進制數(shù)處理,這要通過一個簡單 算法換算,解壓BCD碼才能還原成十 進制表示數(shù)值。本例ASCII編碼直接 賦值給數(shù)組Byte類型變量。

3.4源程序代碼 系統(tǒng)數(shù)據(jù)庫dbl. mdb建立一個名 ‘‘串口的表,字段分別為串口、 波特率、校驗、停止位、數(shù)據(jù)位、 流控制,記錄串口運行參數(shù)設(shè)置信 息。在窗體中添加名為MSComml MSComm控件,名為Label7顯示重量 數(shù)據(jù)的標(biāo)簽控件,名為Text3Text4存貯毛重、皮重的文本框控件等。 串口初始化模塊:

云網(wǎng)客2.jpg

Private Sub Form—Load() MSComml.CommPort = rec(“ 賦值串口端口號,本例為COM1 MSComml.Settings = rec(“ 特率)& ",n, 8,1" ‘無奇偶校 驗,8位數(shù)據(jù)位,1位停止位 MSComml.InputLen = 1 MSComml.RThreshold = 4 If MSComml.PortOpen = False Then ‘判斷串口端口是否打開 MSComml.PortOpen = True ‘打開端口 Else

MsgBox ‘‘串行端口號已被占用, 請選擇其它端口!”, vbCritical + vbOKOnly, 系統(tǒng)信息

Exit Sub

數(shù)據(jù)讀取、轉(zhuǎn)換及顯示模塊: Private Sub MSComml_OnComm() Dim buf() As Byte ‘定義一個數(shù)據(jù)變量 If MSComml. CommEvent = 2 Then ‘判斷接收緩沖區(qū)內(nèi)字符數(shù) 達到Rthreshold指定的值 buf = MSComml.Input ‘讀取一個字節(jié) If buf(0) = 2 Then 判斷是否為開02(XON)開始 c2 = buf

‘以下讀取各位重量數(shù)據(jù)分別賦值 c3 = bufc4 = bufc5 = buf(4) c6 = buf(5) c7 = buf(6) c8 = buf(7)

以下為對各位字節(jié)數(shù)據(jù)進行轉(zhuǎn) 換和組合顯示

shuju = Chr (c2) + Chr (c3) + Chr(c4) + Chr (c5) + Chr (c6) + Chr (c7) + Chr (c8) Label7. Caption =shuju ‘賦值顯示

If Optionl.Value=True Then ‘Optionl為毛重選項。判斷是 Optionl被選中

Text3. Text = Val(Label7. Caption) ‘賦值給毛重文本控件 End If

I f Opti on2 . Val ue = True Then ‘Option2l為皮重選

項。判斷是否Option2被選中

Text4. Text = Val(Label7. Caption) ‘賦值給皮重文本控件 End If

LabellO. Caption= 數(shù)據(jù)穩(wěn)定!Else

LabellO. Caption = “連接正 常,但數(shù)據(jù)不穩(wěn)定...!〃

MSComml. PortOpen = False ‘重新關(guān)閉和開啟串口端口 MSComml.PortOpen = True

End If End If End Sub

4.數(shù)據(jù)庫程序模塊設(shè)計

4.1數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計 本例以Microsoft Access數(shù)據(jù) 庫進行稱重數(shù)據(jù)的管理,建立db1. mdb數(shù)據(jù)庫。汽車衡完成一個稱重過 程一般是某車號汽車稱毛重,再過皮 重(或者稱重順序反調(diào)得出凈重 后,數(shù)據(jù)存入數(shù)據(jù)表,打印報表。在 實際稱重中稱毛重和過皮重的過程并 不連續(xù),有時要連續(xù)稱幾臺汽車的毛 重或皮重,因此必須建立一個用于存 貯稱重暫存數(shù)據(jù)的表。在db1.mdb數(shù) 據(jù)庫中建立報頭、帳戶、本地表、稱 重、單位設(shè)置、歷史皮重、串口、物 質(zhì)類別等數(shù)據(jù)表。本地表”用于存 貯歷史稱重數(shù)據(jù),稱重”表存貯 稱重暫存數(shù)據(jù),本例重點介紹“本 地表稱重”兩個關(guān)鍵表的結(jié) 構(gòu)設(shè)計,如表2,表3所示

4.2數(shù)據(jù)庫編程

系統(tǒng)登錄、稱重管理”、“報 表管理等多個窗體,都涉及到對 db1.mdb數(shù)據(jù)庫的編程,主要應(yīng)用了 Visual BasicAccess數(shù)據(jù)庫操作 的編程語言。如:

dim conn as new adodb. connec-tion

dim rs as new adodb. recordset

連接數(shù)據(jù)庫

with conn

If . StateOadstateclosed Then .Close

.ConnectionString = “pro -vider=Microsoft.Jet.0LEDB.4.0; Data Source=” & App.path & 數(shù)據(jù)庫名.mdb;Mode=ReadWrite; Persist Security Info=False” .Open End With 查詢記錄

if rs. stateOadstateclosed then rs.close

rs.open “select * from ,conn,adopenkeysetadlockre adonly

set mshflexgrid1.datasource

=rs

rs.close 新增記錄

conn. execute “insert into 表名...values(...)”

修改記錄

conn. execute “update 表名 set ... where ...”

刪除記錄

conn. execute “delete from where... 等等,鑒于論文篇幅 的限制本例數(shù)據(jù)庫編程源代碼略