汽車衡串口連續輸出數據的采集方法
主要描述了8142 型稱重顯示儀表的串口數據的讀取方法, 在主要部分還使用了 U M L 軟件建模來輔助說明設計思路。
1.稱重顯示儀與計算機串口的連接方法
8142 型儀表具備 1 個串行口(9 針)和 1 個并行口(25針), 其中串行口與稱重傳感器連接接收稱重信號 , 并行口可與計算機或大屏顯示器連接輸出數據。計算機與儀表的具體接線方法如圖 1 所示。
2.數據輸出格式
在串口連接之前 , 可根據儀表的使用手冊改變儀表的串口輸出設置 , 本文的儀表串口輸出設置為波特率(1200)、數據位(7bits)、無校驗 、停止位(1)、連續輸出 。儀表的連續輸出格式為 18 個字節(By tes)。具體輸出格式如表 1 所示 :
其中 :①<ST X > ASCII 起始符 (02H);②狀態字A ,B ,C ;③顯示重量 , 可能是毛重也可能是凈重 , 6 位不帶符號和小數點的數字 ;④皮重 , 6 位不帶符號和小數點的數字 ;⑤<CR > ASCII 回車符(ODH);⑥<CKS > 可選的校驗和。
通過串口調試軟件接收的數據樣例 :
20202020202020202020200D02293C202020202020202 02020200D 稱重重量的讀取
2 .1 串口設置
在了解了 8142 型儀表的串口通信設備和輸出格式之后就可以開發相應的串口通信程序了 , 為了使串口通訊程序有一定的通用性 , 因此串口的波特率、數據位等將通過程序而不通過 Window s 設置。
要通過程序設置串口 , 首先應該在窗體的設計時插入一個 Serial Port 組件 , 然后在代碼窗口中輸入如下代碼 :
If N ot RS232 Is Nothing T hen RS232 =Nothing
Dim mBaudRate A s Integer '傳輸速率
Dim mParity As Parity '奇偶校驗
Dim mDataBit A s Integer '數據位
Dim mStopBit A s StopBits '停止位
Dim mPortN ame As String mPortN ame =“Com1”
mBaudRate =“1200” mParity ="Parity .None"
mDataBit =7
mStopBit =”StopBits .One” T ry
RS232 = N ew SerialPort (mPortN ame ,
mBaudRate , mParity , mDataBit , mStopBit) Catch ex A s Exception
MessageBox .Show ("串口設置失敗" + ex . Message , "提示", MessageBoxButtons .OK , Message-
BoxIcon .Warning)
End T ry End If
本文通過 XM L 文檔來保存串口設置的參數 , 用于保存串口參數的 XM L 文檔命名為 XlComSet .xml , 具體格式如下 :
xml version ="1 .0"? > <ComSet >
<Com ComName ="COM1"Rate ="1200"Dat-aBit — 7 Parity — None StopBit — One ReceiveN ull —0 DataChar= Unicode ">
〈/Com>
< Count Date= '20101018 " Number - "2 ">
〈/Count>
〈/ComSet>
其中:
ComName為串口號、Rate為波特率、DataBit為數據 位、Parity為奇偶校驗、StopBit為停止位、ReceiveNull為 是否接收空字符、DataChar為編碼方式。程序通過計時 器(Timer)與串口通信(SerialPort)組件配合讀取串口數 據,經測試Timer組件的時間間隔設置為600ms,并且串 口的接收方式為按字節接收數據時,所接收的串口數據連 續可讀,且與表1所描述的數據格式一致。
2.2串口數據的接收
串口接收的字節數據保存在長度為50的1維數組 中,當數組長度等于50時,停止接收串口數據,交給計時 器處理,在計時器事件中通過for循環在接收的數據中尋 找數字13 (ASCII碼對應0D),找到后截取從OD開始的 第5到第10位,即重量數據,再通過Chr函數將ASCII碼 轉換為字符型數據,就可以得到正確的稱重數據。具體處 理過程的順序如圖2所示。
根據圖3所示的過程處理順序,給出稱重數據截取的 實現代碼。具體代碼如下:
Dim n As Integer
Dim Str(50) As Byte Dim Str1 (17) As Byte
Private Sub ComPort_ DataReceived (ByVal sender As Object,ByVal e As System. IO. Ports. SerialDataRe- ceivedEventArgs) Handles ComPort. DataReceived Dim Sy As Byte Sy = ComPort. ReadByte()
Str(n) = Sy n = n 十 1 If n > 50 Then n = 50 End If E nd Sub
Private Sub TimerCom_Tick (ByVal sender As Ob-ject 9 ByVal e As System. EventArgs ) Handles Timer-Com .Tick
txt Receive .Text = n =0
Dim i As Short For i = 0 To 50 IfStr(i) = 13 Then E xi t Fo r End If N ex t
Ifi< 30 Then
For j As Short = i 十 5 To i 十 10
txt Receive .Text += C hr ( St r (j))
N ex t End If E nd Su b
3汽車稱重窗體的設計思路
在稱重窗體中司鎊員首先選擇被稱重車輛的車牌號 碼,當顯示重量的標簽讀數穩定不變時,司鎊員點擊[接收 毛重]按鈕,讀取到的重量應自動減去車輛的皮重,從而得 出車輛凈重,并且鎊單編號應根據當前日期自動加1,如 “2010一 10 — 10 — 001”。為保證鎊單編號的唯一性,因此 其中“001”應在點擊打印按鈕之后自動加1。當司鎊員點 擊[接收皮重]按鈕,皮重Panel會被激活,皮重即空車重 量。點擊[保存]按鈕后,當前讀取的重量應替代之前保存 的皮重。具體操作方法應如圖3所示。
4.結束語
本文所述的汽車衡的串口連續輸出數據的采集方法 已經應用于實踐當中。經實踐證明,本方法切實可行,讀 數穩定可靠。本方法可以用于其他采用磅重數據采集,也可以為采用涉及到串 口通信的項目提供一定的技術參考。