咨詢電話
ENGLISH0755-88840386發(fā)布時(shí)間:2020-01-03 10:19:24 |來源:網(wǎng)絡(luò)轉(zhuǎn)載
在純軟件數(shù)字秤稱重方案中,稱重軟件工作時(shí),計(jì)算機(jī)需要和數(shù)字傳感器通訊,獲取傳感器內(nèi)碼。因此,要用到數(shù)字傳感器通訊協(xié)議。一般情況下,傳感器廠家出于安全、防作弊考慮,不對外公開協(xié)議。為了方便用戶開發(fā)稱重軟件(本文僅針對博達(dá)公司的數(shù)字傳感器的稱重軟件),博達(dá)公司提供了專用的通訊函數(shù)庫(ScalePort.dll)。用戶在開發(fā)軟件時(shí),可以通過調(diào)用庫中的函數(shù),獲取數(shù)字傳感器的內(nèi)碼。使用此函數(shù)庫時(shí),不需要其他的通訊控件。
ScalePort.dll 有兩種功能:
①從儀表串口讀取重量
②從數(shù)字傳感器讀取內(nèi)碼
為了區(qū)分儀表和數(shù)字傳感器,將RS485- 232轉(zhuǎn)換器獲取內(nèi)碼的方式命名為“boast”
在VB6 中調(diào)用和調(diào)用Win32 API 類似,源碼如下:
①Private Declare Function OpenScalePort Lib“ScalePort.dll” (ByVal ComPort As String, ByValseting As String, ByVal fangshi As String) As Long
' 打開稱重串口, 參數(shù): 串口號, 通訊參數(shù), “start”
②Private Declare Function CloseScalePort Lib“ScalePort.dll” () As Long' 關(guān)閉稱重串口
③Private Declare Function LoadCellReadDataLib “ScalePort.dll” (ByVal LoadCellType AsString, ByVal LoadCellNumber As Long, ByValntime As Long) As String
' 數(shù)字傳感器連續(xù)讀內(nèi)碼指令( 參數(shù)1:“boast”;參數(shù)2:傳感器數(shù)目;參數(shù)3:單只傳感器讀寫周期(毫秒為單位))
Private Sub Command1_Click()'打開按鈕
If OpenScalePort(Combo2.Text, Text1.Text, Combo3.Text)= 1 Then ' 打開串口,①
If Combo1.Text=“boast” Then
Timer1.Enabled=True' 讀傳感器
End If
Command1.Enabled=False
Else
MsgBox “串口打開不成功!”, vbInformation+vbOKOnly, “提示”
End If
End Sub
Private Sub Command2_Click()' 關(guān)閉按鈕Timer1.Enabled=False
e=CloseScalePort' 關(guān)閉串口②
Command1.Enabled=True
End Sub
Private Sub Form_Unload(Cancel As Integer)e=CloseScalePort' 關(guān)閉串口②
End Sub
' 通過485~232 轉(zhuǎn)換器,讀數(shù)字傳感器內(nèi)碼,用戶不用擔(dān)心效率問題,在調(diào)用OpenScalePort ' 函數(shù)時(shí),ScalePort.dll 已經(jīng)在后臺創(chuàng)建了獨(dú)立的串口采集線程,將傳感內(nèi)碼存儲到內(nèi)存中
Private Sub Timer1_Timer()' 使用定時(shí)器,從內(nèi)存中讀內(nèi)碼。
DoEvents
Dim b As String ' 從串口返回的內(nèi)碼字符串
Dim LoadCellNumber As Integer ' 傳感器數(shù)目
LoadCellNumber=8' 此處以8 個(gè)傳感器為例
b=LoadCellReadData“( boast”,LoadCellNumber,25)' 從內(nèi)存讀取全部傳感器內(nèi)碼,25 是單只傳感器讀寫周期,與USB- RS232 轉(zhuǎn)換器質(zhì)量有關(guān)③
Text2.Text=b' 讀取的結(jié)果顯示到text2.text 中,字符串以S 開頭E 結(jié)尾,每6 個(gè)字符是一個(gè)傳感器內(nèi)碼,整個(gè)字符串長度= 傳感器個(gè)數(shù)×6+2
If Left(b, 1)=“S” Then 判斷起始符
For i = 0 To LoadCellNumber - 1 ' 分別獲取每只傳感器內(nèi)碼
Label1(i).Caption = Mid(b, 2 + i×6, 6)Next i
End If
End Sub
傳感器異常時(shí),內(nèi)碼顯示:
①如果傳感器內(nèi)碼返回+88888 表示校驗(yàn)錯(cuò)誤,一般是由現(xiàn)場干擾引起。例如:大型感性負(fù)載起動(dòng),造成傳感器供壓不穩(wěn)
②如果傳感器內(nèi)碼返回+99999 表示傳感器未通訊,請檢查連線是否正確
ScalePort.dll 函數(shù)庫只能獲取數(shù)字傳感器內(nèi)碼,如果要修改地址,請用《BOAST 串口調(diào)試工具v3.67》。
獲取數(shù)字傳感器內(nèi)碼是編寫數(shù)字稱重軟件的第一步,要完成一個(gè)實(shí)用的稱重軟件,后續(xù)還有許多工作要做。如標(biāo)定、調(diào)角差、零點(diǎn)跟蹤、開機(jī)置零等。當(dāng)然,也可以參考一些市場上的主流的稱重儀表,如XK3180、XK3190A9、DS1 等,借鑒一下他們的設(shè)計(jì)思路,可以起到事半功倍的效果。筆者曾在衡器廠做過2- 3 年的售后服務(wù),所以對這些表比較熟悉。
本文源于網(wǎng)絡(luò)轉(zhuǎn)載,如有侵權(quán),請聯(lián)系刪除