欧美日韩久久伊人精品亚洲|亚洲欧美日韩精品久久3|亚洲国产精品日韩在线观看|秒播欧美一区二区三区在线观看

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

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

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

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

1.引言

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

2.管理軟件功能需求

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

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

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

3查詢打印功能。可按車 號(hào)、時(shí)間范圍、司磅員、貨物種類、 駕駛員等或任意組合查詢過去稱重 記錄,并可打印輸出。

4統(tǒng)計(jì)打印功能。可對(duì)稱重 結(jié)果自動(dòng)進(jìn)行統(tǒng)計(jì),并打印各種報(bào) 表,如月報(bào)、年報(bào)、分類報(bào)表等。

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

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

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

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

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

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

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

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

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

云網(wǎng)客1.jpg

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

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

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

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

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

云網(wǎng)客2.jpg

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

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

Exit Sub

數(shù)據(jù)讀取、轉(zhuǎn)換及顯示模塊: Private Sub MSComml_OnComm() Dim buf() As Byte ‘定義一個(gè)數(shù)據(jù)變量 If MSComml. CommEvent = 2 Then ‘判斷接收緩沖區(qū)內(nèi)字符數(shù) 達(dá)到Rthreshold指定的值 buf = MSComml.Input ‘讀取一個(gè)字節(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)

以下為對(duì)各位字節(jié)數(shù)據(jù)進(jìn)行轉(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為毛重選項(xiàng)。判斷是 Optionl被選中

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

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

項(xiàng)。判斷是否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è)計(jì)

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

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

系統(tǒng)登錄、稱重管理”、“報(bào) 表管理等多個(gè)窗體,都涉及到對(duì) db1.mdb數(shù)據(jù)庫的編程,主要應(yīng)用了 Visual Basic對(duì)Access數(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,adopenkeyset,adlockre adonly

set mshflexgrid1.datasource

=rs

rs.close 新增記錄

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

修改記錄

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

刪除記錄

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