曾天翔
(上海朗脈潔凈技術股份有限公司,上海201100)
淺析使用COM口讀取梅特勒托利多天平稱重結果的方法
曾天翔
(上海朗脈潔凈技術股份有限公司,上海201100)
針對當前人機界面軟件(HMI)需要精確顯示天平稱重結果的需求,提出了一種利用電腦串行口(COM口)與梅特勒托利多天平通訊,從而精確讀取稱重結果的方法。分析了傳統(tǒng)I/O通道讀取稱重結果的缺點,介紹了使用COM口讀取梅特勒托利多天平稱重結果的具體實現(xiàn)步驟。通過實踐證明,這種方法可以在不需要模擬量輸入模塊的情況下精確地讀取相應天平的稱重結果,在自控領域有著廣闊的應用前景和推廣價值。
人機界面;梅特勒托利多天平;COM口通訊;MT-SICS;重量讀取
傳統(tǒng)的人機界面(HMI)軟件并不能直接讀取稱重設備的數(shù)據(jù)。一般來說,傳統(tǒng)的做法是由PLC模擬量輸入模塊連接稱重設備,稱重設備先將其稱重數(shù)據(jù)通過其內(nèi)置的數(shù)模(D/A)轉換模塊轉換為PLC模擬量模塊可以識別的4~20 mA信號,并通過其輸出通道輸出到PLC的模擬量輸入通道上。PLC的模擬量輸入通道再將其收到的4~20 mA信號通過其內(nèi)置的模數(shù)(A/D)轉換模塊轉換為具體的稱重數(shù)值發(fā)送給人機界面(HMI)軟件,最后由人機界面(HMI)軟件顯示給最終用戶。傳統(tǒng)讀取方法數(shù)據(jù)流如圖1所示。
圖1 傳統(tǒng)讀取方法數(shù)據(jù)流
由于無論是模數(shù)(A/D)轉換,還是數(shù)模(D/A)轉換過程,都將會產(chǎn)生一定的量化誤差,所以最終用戶得到的讀數(shù)并不一定會與稱重設備上顯示的讀數(shù)一致。以12位精度的轉換模塊為例,它的量化精度為總量程的1212-1即14 095,如果稱一個質(zhì)量為100 kg的物體,理論上會產(chǎn)生24 g左右的誤差。而經(jīng)過D/A轉換后再經(jīng)歷一次A/D轉換,以上的誤差將會被再次擴大。如果4~20 mA電信號在傳輸過程中再受到干擾等因素的影響,實際產(chǎn)生的誤差將會超過我們的允許范圍。產(chǎn)生的現(xiàn)象可能是在實際稱重設備上顯示為“100.000 kg”,而最終用戶在HMI屏幕上讀到的是“99.855 kg”。
2.1 方案構想
如果能找到一種方法,將稱重設備的數(shù)據(jù)通過通訊的方式,而不是轉換為電信號的形式,直接讀取到人機界面(HMI)上顯示的數(shù)據(jù)的話,那么就能夠解決以上出現(xiàn)的問題。新讀取方法數(shù)據(jù)流如圖2所示。
圖2 新讀取方法數(shù)據(jù)流
2.2 電氣連接
通常的人機界面(HMI)軟件都是安裝在計算機內(nèi)的。而對于計算機而言,除了以太網(wǎng)及USB接口外,還有一種常用的數(shù)據(jù)接口叫作串行通訊端口(COM口)。對于一個計算機而言,可以有多個COM口。我們可以在設備管理器中查看當前計算機的串行通訊端口數(shù)量(圖3)。
圖3 計算機中的串口
計算機上的COM口通常是9針,其外觀如圖4所示,最大速率115 200 bps。通常用于連接鼠標(串口)及通訊設備,如連接外置式MODEM進行數(shù)據(jù)通訊或一些工廠的CNC機接口等。COM口的接口標準規(guī)范和總線標準規(guī)范是RS-232,有時候也叫做RS-232口。
圖4 常用9針串口外觀
對于稱重設備來說,以梅特勒托利多ICS429系列產(chǎn)品為例,其背面接口如圖5所示[1]。
圖5 ICS429接口圖
其中5為9針COM接口。雖然形狀與電腦上的COM口不一樣,但是管腳定義是一致的。為了能夠與電腦連接,需要選購專門的轉接線將其與電腦的COM口相連。
2.3 通訊測試
完成了電氣連接后,接下來需要測試電腦與稱重設備之間的通訊是否建立。我們可以利用Windows的通訊工具“超級終端”(圖6)來完成這一步操作。
圖6 超級終端
打開超級終端,根據(jù)稱重設備的出廠設置將計算機串行通訊端口的參數(shù)設置好,如圖7所示。梅特勒托利多ICS429系列產(chǎn)品在出廠設置中,將其通訊參數(shù)設置成了波特率:9 600、校驗:無校驗、數(shù)據(jù)位:8位、停止位:1位。
圖7 串口參數(shù)設置
完成以上設置后,按下稱重設備面板(圖8)上的“打印”按鈕,在超級終端的窗口中,將出現(xiàn)如下字符串“SS 1.203 kg”,其中“1.203 kg”即為稱重面板上顯示的重量[1]。
圖8 ICS429操作面板圖
2.4 通訊指令
在實際使用過程中,我們不可能每次都通過按“打印”鍵來讀取數(shù)據(jù)。如何能讓稱重設備周期性地將其稱重結果發(fā)送給計算機呢?接下來將要使用的是通訊指令。梅特勒托利多針對其產(chǎn)品有著一套專用的通訊指令MT-SICS(Standard Interface Command Set),以便實現(xiàn)各種各樣的功能。這套指令被分為4個級別level 0~level 3,所包含的命令由簡單到復雜,像傳送稱重結果這樣的簡單指令被包含在了level 0中。通過相關手冊,查找到指令“SI”可以命令稱重設備將當前重量立即發(fā)送給計算機[2]。
2.5 編程實現(xiàn)
2.5.1 數(shù)據(jù)讀取
通過計算機的串行通訊端口(COM)向稱重設備發(fā)送通信指令,并分析稱重設備發(fā)回的字符串,將其中的重量數(shù)據(jù)提取出來的工作,可以通過編程實現(xiàn)。其中對于計算機串行通訊端口的驅(qū)動,我們可以通過ActiveX控件實現(xiàn)。ActiveX控件是一種可重用的軟件組件,通過使用ActiveX控件,可以很快地在網(wǎng)址、臺式應用程序以及開發(fā)工具中加入特殊的功能。如今已有1 000多個商用的ActiveX控件,開發(fā)控件可以使用各種編程語言,主要的編輯語言是C++、VB、VC、C#、Java、delphi、PowerBuilder、VBScript。ActiveX控件一旦被開發(fā)出來,設計和開發(fā)人員就可以把它當作預裝配組件,用于開發(fā)客戶程序。以此種方式使用ActiveX控件,使用者無需知道這些組件是如何開發(fā)的,在很多情況下,甚至不需要自己編程,就可以完成網(wǎng)頁或應用程序的設計[3]。
我們以VB為例,在設計窗體上加入“MS Comm”控件,MSComm作為一個串行通訊控件為程序員串口通訊編程節(jié)省了很多時間。
第一步需要編寫VB腳本,打開相應端口,打開串口前需要按照稱重設備的通訊參數(shù)設置計算機串口的參數(shù)。下面以梅特勒托利多ICS429系列產(chǎn)品的出廠設置為例,編寫了打開串口的VB腳本。
Sub SetComm()
MS1.CommPort=1 設置空間端口號為COM1
MS1.Settings="1200,o,7,1" 設置通訊參數(shù)波
特率1 200 bps,奇校驗,7位數(shù)據(jù)位,1位停止位
MS1.PortOpen=True 打開端口
MS1.InBufferCount=0 初始化輸入緩沖區(qū)
End Sub
要想周期性地讀取稱重設備的稱重結果,需要周期性地向稱重設備發(fā)送指令“SI”。先在設計窗體上添加一個時鐘控件Timer1,并將其時間間隔設置成1 s。在其Timer事件中編寫如下腳本:
Private Sub Timer1_Timer()
MS1.OutBufferCount=0 初始化發(fā)送緩沖區(qū)
MS1.Output=Chr(83) 發(fā)送“S”
MS1.Output=Chr(73) 發(fā)送“I”
MS1.Output=Chr(13) 發(fā)送回車
MS1.Output=Chr(10) 發(fā)送換行符
End Sub
其中Chr(83)、Chr(73)分別對應“S”、“I”,Chr(13)、Chr(10)表示回車換行符,因為稱重設備只有檢測到回車換行符才會認為當前指令發(fā)送完畢,從而開始執(zhí)行相應命令。當稱重設備收到“SI”指令后,將返回字符串“SS 1.203 kg”,其中“1.203 kg”即為稱重面板上顯示的重量。由于“MSComm”控件是事件驅(qū)動型的,當計算機相應串行通訊端口接收到數(shù)據(jù)時會觸發(fā)其“OnComm”事件。我們需要在其“OnComm”事件中編寫相關腳本才能將稱重設備發(fā)送過來的重量數(shù)據(jù)提取出來。
Private Sub MS1_OnComm()
Dim sTemp As String 變量定義
Select Case MS1.CommEvent
Case comEvReceive如果收到數(shù)據(jù)則開始處理
sTemp=MS1.Input 讀取收到的數(shù)據(jù)
sReceive1=sReceive1&sTemp 將收到的字符與上次收到的字符拼接起來
If sTemp=Chr(13)Then 如果收到回車符則表示讀取完畢
If Len(sReceive1)>6 Then 判斷收到的信息完整性,長度必須大于6
If InStr(1,sReceive1,"S",vbTextCompare)
<>0 Then 必須包含字符“S”
W1=GetNum(sReceive1) 讀取重量數(shù)據(jù)
End If
End If
sReceive1="" 清空讀取到的字符,準備下一次讀取
MS1.InBufferCount=0 清空讀取緩沖區(qū),準備下一次讀取
End If
Case Else
MS1.InBufferCount=0 如果收到錯誤數(shù)據(jù),則清除讀取緩沖區(qū)
End Select
End Sub
Function GetNum(ByVal S As String)As Double
Dim l As Integer,i As Integer,Start_P As Integer,
Stop_P As Integer,Sig As String 變量定義
On Error Resume Next 如果發(fā)生錯誤,則忽略錯誤
l=Len(S) 獲得轉換字符的長度
Start_P=0 初始化轉換數(shù)據(jù)起始點
Sig="" 初始化符號位
For i=1 To l 利用循環(huán)查找整個字符串
Select Case Mid(S,i,1)
Case"0","1","2","3","4","5","6","7","8","9"∶
If Start_P=0 Then Start_P=i如果找到數(shù)字則設置轉換數(shù)據(jù)起始點
Case""∶
If Start_P>0 Then Stop_P=i 如果讀取到數(shù)字后又找到空格,則設置轉換數(shù)據(jù)結束點
Case"+","-"∶ 如果讀取到符號,則設置符號位
Sig=Mid(S,i,1)
End Select
Next i
If Start_P>0 Then
GetNum=CDbl(Sig+Mid(S,Start_P,Stop_PStart_P)) 將轉換數(shù)據(jù)起始點與結點之間的內(nèi)容算上符號位轉換成數(shù)值類型數(shù)據(jù)
Else
GetNum=0 如果轉換失敗,返回0
End If
End Function
其中函數(shù)GetNum用來分析收到的字符串,將稱重設備發(fā)送過來的重量數(shù)據(jù)提取出來。至此,我們實現(xiàn)了周期性命令稱重設備將其所獲得的稱重數(shù)據(jù)發(fā)送給計算機的功能,接下來只需要將所獲得的稱重數(shù)據(jù)顯示到人機界面(HMI)上就可以了。
2.5.2 數(shù)據(jù)顯示
將稱重數(shù)據(jù)顯示到人機界面(HMI)需要建立與人機界面(HMI)之間的數(shù)據(jù)接口。而最簡單的數(shù)據(jù)接口可以利用數(shù)據(jù)交換文件來實現(xiàn)。例如,將上面讀取到的稱重數(shù)據(jù)周期性地寫入一個文本文件中;而在人機界面(HMI)軟件中,編寫相應腳本,周期性地將文本文件的內(nèi)容讀取到變量中并顯示到屏幕上即可。其中數(shù)據(jù)交換文件可以根據(jù)實際要求選用文本文件、Excel文件或數(shù)據(jù)庫文件來實現(xiàn),其中以文本文件的讀寫最為方便,適用于數(shù)據(jù)量較小,且對數(shù)據(jù)實時性要求不高的場合。
讀寫文本文件可以通過以下腳本實現(xiàn):
Sub SaveToFile()
Open"D∶DATAWEI.TXT"For Output As#1打開文本文件
Write#1,W1 寫入重量數(shù)據(jù)
Close 1 保存并關閉文本文件
End Sub
Sub ReadFromFile()
Dim S as String
Open"D∶DATAWEI.TXT"For Input As#1打開文本文件
Input#1,W1 讀取重量數(shù)據(jù)
Close 1 關閉文本文件
End Sub
由于RS-232通訊接口為點對點通訊接口,即一臺稱重設備需要占用1個串行通訊端口,如果有多臺稱重設備則需要占用多個串行通訊端口。當計算機上的串行通訊端口數(shù)量不足的時候,我們可以使用USB轉COM的硬件來擴展串行通訊端口。
實踐證明,以通訊的方法獲得稱重設備的稱重數(shù)據(jù),不僅避免了量化誤差的影響,使得人機界面(HMI)軟件上顯示的讀數(shù)與稱重設備上顯示的完全一致,滿足了計算機系統(tǒng)驗證方面的要求,而且不需要任何的PLC模擬量輸入模塊,減少了成本,是一種值得推廣的好方法。
[1]METTLER TOLEDO.ICS429用戶手冊[Z].2001:25-47.
[2]METTLER TOLEDO.ICS4X9 SICS通訊手冊[Z].2000:43-78.
[3]喬平安.Visual Basic6.0程序設計[M].人民郵電出版社,2013:232-257.
Get the Weighing Result of METTLER TOLEDO Scale from COM Port
Zeng Tianxiang
(Shanghai Macroprocess Lustration Technology Co.,Ltd.,Shanghai 201100)
In order to meet the requirements of high display accuracy for human-computer interface(HMI)software,a new method that can get the weighing results accurately by communicate with the METTLER TOLEDO devices using PC COM ports is introduced accordingly.This paper analyzes the shortcoming of traditional communicate method using I/O channels,introduces the concrete implementation steps of the new method.The practice proved that by using the new method,we can read the weighing results accurately without any analog input module and shows that it has broad prospect of application and popularization in automation field.
HMI;METTLER TOLEDO scale;COM communication;MT-SICS;get weighing result
2015-09-06
曾天翔(1979—),男,上海人,工程師,從事工業(yè)自控系統(tǒng)的設計及應用工作。