傳感器

閥門(mén)啟閉動(dòng)態(tài)轉(zhuǎn)矩檢測(cè)裝置與PC機(jī)的智能串行通信

ainet.cn   2009年01月14日

0 引言

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

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

1 閥門(mén)啟閉動(dòng)態(tài)轉(zhuǎn)矩檢測(cè)裝置與PC機(jī)的串行通信

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

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

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

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

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

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

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

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

  

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

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

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

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

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

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

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

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

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

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

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

1.3 本裝置通信控件的屬性

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

rt=2選串行端口2

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

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

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

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

en=7’指定由串行口一次讀入的字符串長(zhǎng)度

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

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

對(duì)接收的每個(gè)數(shù)據(jù)塊,要通過(guò)一個(gè)簡(jiǎn)單算法,將二進(jìn)制格式數(shù)據(jù)轉(zhuǎn)換成兩個(gè)十進(jìn)制表示的數(shù)據(jù)。編寫(xiě)數(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ā)送一個(gè)4字節(jié)二進(jìn)制數(shù){7E,01,F6,oA}數(shù)據(jù)傳輸命令,它必須先存到一個(gè)形式為Byte的動(dòng)態(tài)數(shù)組,然后再將此動(dòng)態(tài)數(shù)組傳送出去。采用單擊命令按鈕方式發(fā)送傳輸命令,過(guò)程如下:

Private Sub cmdstart_Click()‘開(kāi)始按鈕

Dim outA()As Byte

……

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

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

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

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

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

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

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

End Sub

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

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

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ù)塊的第一個(gè)字節(jié)

If Bufi\32=7 Then

Temp=i

Exit For

End If

Next

For i=0 To 3’讀取一個(gè)數(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 通訊錯(cuò)誤的處理

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

Private  Sub  MSComm1_OnComm()

Select Case ent

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

X=MsgBoxFraming  Error!,16

…錯(cuò)誤處理

Case ComEventOverrun’連接端口超速

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

…錯(cuò)誤處理

……

End Select

End Sub

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

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

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

列名

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

可否為空

說(shuō)明

T

Integer2

NOT NULL

時(shí)間(主鍵)

U1

Integer4

NOT NULL

數(shù)據(jù)1

U2

Integer4

NOT NULL

數(shù)據(jù)2

列名

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

可否為空

說(shuō)明

T

Integer2

NOT NULL

時(shí)間(主鍵)

U1

Integer4

NOT NULL

數(shù)據(jù)1

U2

Integer4

NOT NULL

數(shù)據(jù)2

3 繪制趨勢(shì)曲線

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

3.1 繪圖方法的使用

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

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

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

3.2 插值公式的使用

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

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

3.3 繪制趨勢(shì)曲線

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

程序代碼如下:

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

Stp為橫坐標(biāo)繪圖步長(zhǎng);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 mlm2調(diào)用構(gòu)造中頓插值公式子過(guò)程

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

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

x=Xmin

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

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

x=x+Stp

While  xXmax

y=NewTonInterpolation2x

-x,y*k),c’由上一次的位置畫(huà)至此點(diǎn)

x=x+stp

Wend

x=Xmax

y=NewTonInterpolation2x

-x,y*k),C

      
End Sub

4 結(jié)束語(yǔ)

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

參考文獻(xiàn)

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

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

(轉(zhuǎn)載)

標(biāo)簽:閥門(mén) 啟閉 動(dòng)態(tài) 轉(zhuǎn)矩 檢測(cè)裝置 與 PC機(jī) 的 智能串行 通信 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書(shū)下載
ABB協(xié)作機(jī)器人,自動(dòng)化從未如此簡(jiǎn)單
優(yōu)傲機(jī)器人下載中心
億萬(wàn)克
專題報(bào)道