siemens x
傳感器

閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置與PC機的智能串行通信

2025China.cn   2009年01月14日

0 引言

閥門制造的質(zhì)量越來越受到行業(yè)與廣大用戶的重視,特別是高壓、大口徑、低溫等特殊工況下工作的閥門及重要輸送管道上的閥門,若開啟或關(guān)閉過程中發(fā)生機械故障,其后果不可設(shè)想。閥門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)可以完整地記錄被測閥門在開啟與關(guān)閉的全過程中所需的時間(開度)與轉(zhuǎn)矩、時間(開度)與位移的關(guān)系,并以數(shù)據(jù)顯爾、趨勢曲線、輸出最大值及報表等多種形式,反映閥門的制造與裝配質(zhì)量信息,供技術(shù)人員進行統(tǒng)計、計算和分析,以獲得產(chǎn)品的性能指標(biāo),可幫助企業(yè)提高產(chǎn)品質(zhì)量。

閥門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)以PC機為控制處理中心,由閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置采集數(shù)據(jù),然后用異步串行通信方式傳給PC機,實現(xiàn)由PC機對整個檢測過程的自動控制。VB在開發(fā)可視化環(huán)境下的檢測系統(tǒng)控制軟件時有其獨特的優(yōu)勢。首先,人機界面的建立比其它工具簡單、快速;其次VB提供了串行通信控件,使開發(fā)者可以開發(fā)串行通信和系統(tǒng)程序,而功能上也提供了不少為用戶所設(shè)想的簡便之處。本義介紹的閥門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)中的有關(guān)程序即選用了VB作為編程工具。

1 閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置與PC機的串行通信

VB開發(fā)串行通信程序一般有兩種方法:

①利用Windos的通信API函數(shù)

Windows SDK提供了完備的API接口函數(shù),利用API函數(shù)編寫的串口通信程序功能更強大、更豐富,但編寫復(fù)雜,其復(fù)雜化和專業(yè)化使很多開發(fā)者望而卻步。

②采用通信控件實現(xiàn)

使用控件是VB的一大優(yōu)勢,其編寫程序較為簡單,大多數(shù)VB程序員使用微軟公司的MSComm控件來進行串行通信程序的開發(fā)。

筆者編寫的用于閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置與PC機的串行通信程序,主要利用了MSComm控件的一些屬性與方法。MSComm控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、過程,通過設(shè)置串行通信的參數(shù)(端口號、波特率等),比較容易實現(xiàn)串行通信。

1.1 閥門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)通信協(xié)議

閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置與PC機之間采用RS232異步串行通信接口通信,數(shù)據(jù)傳輸速率為9600bps,1位開始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗位。檢測裝置不斷發(fā)送檢測數(shù)據(jù)。每個數(shù)據(jù)塊由4個字節(jié)組成,第一個字節(jié)的前三位定義為二進制常數(shù)1ll,是每個數(shù)據(jù)塊的開始標(biāo)志,其余3個字節(jié)的前三位均為二進制常量000;每兩個字節(jié)的后五位表示一個十進制數(shù),高位在前,低位在后。如圖1所示。

  

1.2 MSComm控件的主要屬性和事件

MSComm控件有很多屬性,其中最基本的有以下幾個:

1.2.1 CommPort屬性:設(shè)置并返回通訊端口號。端口號可以設(shè)置為l~99的任何數(shù),如rt=2表示設(shè)置當(dāng)前通訊端口為COM2

1.2.2 Setting屬性:設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。格式為g=String。String是一個包含四部分的字符串:第一部分為波特率;第二部分為奇偶校驗,N表示不校驗,M表示符號校驗,E表示偶校驗,0表示奇校驗,S表示空格校驗;第三部分為數(shù)據(jù)位數(shù),其可選值為4,567,8;第四部分為停止位位數(shù),其可選值為1l.5,2Setting屬性的缺省值為“9600N,8,1

1.2.3 PortOpen屬性:設(shè)置并返回通訊端口的狀態(tài)(打開和關(guān)閉)。

1.2.4 Input屬性:從接收緩沖區(qū)返回和刪除字符。該屬性在運行時為只讀。

1.2.5 InputMode屬性:設(shè)置和返回Input屬性檢索的數(shù)據(jù)類型。

1.2.6 InputLen屬性:設(shè)置并返回每次InPut屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen屬性的缺省值為0。設(shè)置InputLen0時,Input將讀取接收緩沖區(qū)的全部字符。

1.2.7 Output屬性:向傳送緩沖區(qū)寫數(shù)據(jù)。要傳送的數(shù)據(jù)可是文本數(shù)據(jù)或二進制數(shù)據(jù)。

1.2.8 CommEvent屬性:返回最近的通信事件或錯誤。只要有通訊錯誤或接收事件發(fā)生時就會產(chǎn)生0nComm事件。CommEvent屬性中存有該錯誤或事件的數(shù)值代碼。

1.2.9 Rthreshold屬性:設(shè)置或傳回引發(fā)接收事件的字符數(shù),即屬性頁上的 R閥值”。當(dāng)接收寄存器達到所設(shè)置的字符數(shù)時,將會引發(fā)OnComm事件中的接收事件。此屬性的默認(rèn)值是0,其意義是無論寄存器中有多少字符均不會引發(fā)接收事件。

1.3 本裝置通信控件的屬性

本裝置通信控件MSComm1重要屬性設(shè)置如下:

rt=2選串行端口2

gs=9600n,8,1 ‘設(shè)置9600波特率,無奇偶校驗,8個數(shù)據(jù)位,1個停止位

ferStze=30000設(shè)置緩沖區(qū)大小為30000個字節(jié)

ode=1’輸入輸出的數(shù)據(jù)類型為二進制

hold=0不引發(fā)接收事件

en=7’指定由串行口一次讀入的字符串長度

MSComm控件提供了OnComm事件,用于通信錯誤或通信事件發(fā)生時,用戶可在OnComm事件中編寫代碼。

1.4 數(shù)據(jù)處理

對接收的每個數(shù)據(jù)塊,要通過一個簡單算法,將二進制格式數(shù)據(jù)轉(zhuǎn)換成兩個十進制表示的數(shù)據(jù)。編寫數(shù)據(jù)處理函數(shù)如下:

Function BtoDd1 as byte,d2 as byteas integer

BtoD=d1 And&H10/16*2^9_

+dl And&H8/  8*2^8_

+d1 And&H4/ 4*2^7_

+dl And&H2/2*2^6_

+d1 And&H1/1*2^5_

+d2 And&H10/16*2^4_

+d2 And &H8/8*2^3_

+d2 And &H4/4*2^2_

+d2 And &H2/2*2^1_

+d2  And  &H1/1*2^0_

End Function

1.5 發(fā)送命令程序

為了發(fā)送一個4字節(jié)二進制數(shù){7E,01,F6,oA}數(shù)據(jù)傳輸命令,它必須先存到一個形式為Byte的動態(tài)數(shù)組,然后再將此動態(tài)數(shù)組傳送出去。采用單擊命令按鈕方式發(fā)送傳輸命令,過程如下:

Private Sub cmdstart_Click()‘開始按鈕

Dim outA()As Byte

……

outA()=ChrB&H7E&ChrBl&ChrB&HF6&ChrB&HA

=outA’向閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置發(fā)送數(shù)據(jù)傳輸命令

U1max=0’數(shù)據(jù)1最大值存儲變量清零

U2max=0數(shù)據(jù)2最大值存儲變量清零

T=Val)’數(shù)據(jù)采樣時 間間隔

CT=Va1)’數(shù)據(jù)采樣時間

d=True’啟動接收閥門啟閉動態(tài)轉(zhuǎn)矩檢測裝置數(shù)據(jù)定時器

End Sub

1.6 接收數(shù)據(jù)程序

接收數(shù)據(jù)是一個自動的周期性過程,通過子過程來實現(xiàn),由定時器開啟。接收數(shù)據(jù)時,每次要判斷第一個字節(jié)是否為一個數(shù)據(jù)塊的起始字節(jié),只有是則連接的4個字節(jié)才為正確的數(shù)據(jù),否則查看下一字節(jié)。通過設(shè)置en=7來實現(xiàn)每次從接收緩沖區(qū)內(nèi)讀取七個字節(jié)的數(shù)據(jù),以保證每一個周期能讀取一個數(shù)據(jù)塊。接收數(shù)據(jù)子過程如下:

Sub  ReceriveData()

Dim Buf()As Byte

Dim i As Integer

Dim  Temp  As Integer

Dim  c3 As Byte

Dim U1%,U2%

Buf()=

For i=LBound BufTo  UBoundBuf)’查找數(shù)據(jù)塊的第一個字節(jié)

If Bufi\32=7 Then

Temp=i

Exit For

End If

Next

For i=0 To 3’讀取一個數(shù)據(jù)塊

ci= BufTemP+i

Next

U1=BtoDc0),c1))’調(diào)用數(shù)據(jù)處理函數(shù)求數(shù)據(jù)1

U2=BtoDc2),c3))’調(diào)用數(shù)據(jù)處理函數(shù)求數(shù)據(jù)2

If U1U1 max Then’求數(shù)據(jù)1的最大值

Ulmax=U1

End If

If U2U2max Then’求數(shù)據(jù)2的最大值

U2maX=U2

End If

End Sub

1.7 通訊錯誤的處理

由于外界干擾或電壓波動等原因,PC機和閥門啟閉動態(tài)轉(zhuǎn)知檢測裝置之間的通信可能會出現(xiàn)錯誤,如接收緩沖區(qū)溢出、連接端口超速等。這些可能發(fā)生的事件都能在代碼中引起運行錯誤。為了處理這些錯誤,須要將錯誤處理代碼添加到程序中。通過控件中的OnComm事件可以捕捉和處理錯誤。在通信過程中所發(fā)生的通信錯誤是CommEvent屬性返回的。當(dāng)CommEVent屬性值發(fā)生改變時,表明有通信錯誤,就會產(chǎn)生OnComm事件。同時,可以利用自動引發(fā)OnComm事件的特點在接收過程中加入狀態(tài)顯示碼。通信錯誤的處理程序如下:

Private  Sub  MSComm1_OnComm()

Select Case ent

case ComEventFrame’數(shù)據(jù)幀錯誤

X=MsgBoxFraming  Error!,16

…錯誤處理

Case ComEventOverrun’連接端口超速

X=MsgBox(“數(shù)據(jù)丟失!”,16

…錯誤處理

……

End Select

End Sub

2 保存數(shù)據(jù)

通過串口傳送過來的數(shù)據(jù)經(jīng)過處理后,連同對應(yīng)的時間參數(shù),送入數(shù)據(jù)庫,供MIS系統(tǒng)查詢、繪制趨勢曲線、打印報表等使用。數(shù)據(jù)表結(jié)構(gòu)如表1所示:

1 數(shù)據(jù)表結(jié)構(gòu)

列名

數(shù)據(jù)類型

可否為空

說明

T

Integer2

NOT NULL

時間(主鍵)

U1

Integer4

NOT NULL

數(shù)據(jù)1

U2

Integer4

NOT NULL

數(shù)據(jù)2

列名

數(shù)據(jù)類型

可否為空

說明

T

Integer2

NOT NULL

時間(主鍵)

U1

Integer4

NOT NULL

數(shù)據(jù)1

U2

Integer4

NOT NULL

數(shù)據(jù)2

3 繪制趨勢曲線

將采集到的數(shù)據(jù)繪制成趨勢曲線(U1-TU2-T),進行統(tǒng)計、計算和分析,以得到產(chǎn)品的性能指標(biāo)。

3.1 繪圖方法的使用

VB中,最方便使用的繪圖組件是圖片框(Picture Box),此組件可以使用相關(guān)的繪圖方法將數(shù)據(jù)繪到圖片框中,使結(jié)果顯示在其上。在繪制趨勢曲線中只需用到直線的繪制方法,在VB中畫直線是邁過Line方法來實現(xiàn)的,它的語法為:

[step] [x1,x1] [step](x2,y2[<顏色>[,B[F]]

其中,x1y1為直線的起點坐標(biāo),x2,y2為直線的終點坐標(biāo),顏色用于設(shè)置直線的顏色,B、F為繪制矩形時所用。當(dāng)使用Line方法繪制連結(jié)的線時,前一條線的終點就是后一條線的起點。線的寬度取決于DrawWidth屬性值,線型取決于DrawStyle屬性值。執(zhí)行Line方法后,CurrentXCurrentY性被參數(shù)設(shè)置為終點。

3.2 插值公式的使用

間門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)中PC機接收的數(shù)據(jù)為每隔一定時間間隔采樣、處理和讀取的,為了能更好地顯示曲線的趨勢走向,需要使用插值法求中間點。常用牛頓插值公式計算中間點坐標(biāo)。牛頓插值公式如下:

牛頓插值公式是一個遞推公式,當(dāng)需要增加一個節(jié)點時,只要多計算一行就可以了,比較方便實用。利用該公式即可騙寫出在繪制趨勢曲線過程中用到的構(gòu)造牛頓插值公式子過程。

3.3 繪制趨勢曲線

讀取數(shù)據(jù)庫中的數(shù)據(jù),利用牛頓插值函數(shù)及Line方法,可得到如圖2所示的檢測結(jié)果趨勢曲線(U1-TU2-T

程序代碼如下:

Private Sub DrawNewTonGraphXmin As Single,Xmax As Single,stp As Single,m1 As Integerm2 As Integer,k As Single,c,Pie As object

Stp為橫坐標(biāo)繪圖步長;m1為曲線的橫坐標(biāo)數(shù)據(jù)在數(shù)據(jù)表中的字段名,m2為曲線的縱坐標(biāo)數(shù)據(jù)在數(shù)據(jù)表中的字段名;k為曲線比例系數(shù);c為曲線的顏色;Pic為繪圖的圖片框

Dim x As Single X坐標(biāo)

Dim y As Single Y坐標(biāo)

NewTonInterpolationl ml,m2調(diào)用構(gòu)造中頓插值公式子過程

dth=2設(shè)置曲線寬

yle=vbSolid’設(shè)置曲線線型

x=Xmin

y=NewTonInterpolation2x)’用牛頓插值公式求X點的y

x,y),c’設(shè)置起點

x=x+Stp

While  xXmax

y=NewTonInterpolation2x

-x,y*k),c’由上一次的位置畫至此點

x=x+stp

Wend

x=Xmax

y=NewTonInterpolation2x

-xy*k),C

      
End Sub

4 結(jié)束語

閥門啟閉動態(tài)轉(zhuǎn)矩檢測系統(tǒng)為一主從式系統(tǒng),上位機為PC機,應(yīng)用程序全部用VB開發(fā),由PC機實現(xiàn)對整個檢測過程的自動控制,可以完整地記錄被測閥門在開啟與關(guān)閉的全過程中所需的時間(開度)與轉(zhuǎn)矩、時間(開度)與位移的關(guān)系,并以數(shù)據(jù)顯示、趨勢曲線、輸出最大值及報表等形式,反映閥門的制造與裝配質(zhì)量信息。本文中給出的原程序均巳在VB6.0環(huán)境下調(diào)試通過,其中的編寫方法對其他類似的檢測系統(tǒng)也有一定的借鑒作用。

參考文獻

[1] 范逸之.利用Visual Basic實現(xiàn)串并行通信技術(shù).北京:清華大學(xué)出版社,2001.

[2] 范逸之.Visual Basic與分布式監(jiān)控系統(tǒng)[M].北京:清華大學(xué)出版社,2002.

(轉(zhuǎn)載)

標(biāo)簽:閥門 啟閉 動態(tài) 轉(zhuǎn)矩 檢測裝置 與 PC機 的 智能串行 通信 我要反饋 
2024世界人工智能大會專題
即刻點擊并下載ABB資料,好禮贏不停~
優(yōu)傲機器人下載中心
西克
2024全景工博會
專題報道