国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

應(yīng)用VB4.0實(shí)現(xiàn)工業(yè)控制的實(shí)時(shí)曲線和歷史曲線

2019-11-18 17:50:12
字體:
供稿:網(wǎng)友
在大型的工業(yè)現(xiàn)場控制中,一般用DCS(集散控制系統(tǒng))來實(shí)現(xiàn)過程控制。在DCS中,實(shí)時(shí)曲線可顯示該控制點(diǎn)的當(dāng)前趨勢,以監(jiān)測該點(diǎn)在現(xiàn)場工況變化的情況下的控制穩(wěn)定性,歷史曲線可觀察過去一段時(shí)間內(nèi)某一點(diǎn)的變化趨勢,并供工藝人員分析工藝流程的穩(wěn)定性和故障原因。然而在小型的工業(yè)控制中,由于控制規(guī)模小,控制回路少,因此可用PC機(jī)就能完成整個(gè)過程控制,在實(shí)時(shí)曲線和歷史曲線方面,可用VB4.0就能實(shí)現(xiàn),并可與大型的DCS相媲美。
[實(shí)時(shí)曲線]
實(shí)時(shí)曲線反映的是現(xiàn)場數(shù)據(jù)的實(shí)時(shí)性和當(dāng)前趨勢,因此在實(shí)現(xiàn)時(shí)需顯示曲線的動(dòng)態(tài)變化,參考DCS,當(dāng)前點(diǎn)在曲線的最右端顯示,而整個(gè)曲線動(dòng)態(tài)地向左移動(dòng)。

具體實(shí)現(xiàn)如下:
1、選擇需要顯示的窗體Form1,加入圖片框Picture1,根據(jù)實(shí)際需要設(shè)置圖片的大小并移到合適的位置,并在圖片的外面畫好量程----時(shí)間坐標(biāo)系;
2、在全局模塊中定義位塊傳輸API函數(shù)BitBlt()和全局變量:
DeclareFunctionBitBltLib"GDI32"(ByValhDestDCASLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValDrawStyleAsLong)AsLong
GobalSAsLong`量程
GobalLAsLong`上一次的縱坐標(biāo)值
GobalTAsInteger`上一次時(shí)間值(分)
3、PRivateSubForm1_Load()
Picture1.AutoRedraw=False`曲線不重畫
Picture1.ScaleMode=3`以象素方式(Pixel)
L=-1`設(shè)置初值
S=400
T=-1
EndSub
4、根據(jù)現(xiàn)場數(shù)據(jù)采集的采樣頻率,設(shè)置定時(shí)器Timer1的定時(shí)值,曲線移動(dòng)就

Timer1實(shí)現(xiàn):
PrivateSubTimer1_Time()
DimwAsLong,hAsLong,y1AsLong,DataAsLong
DimhBmpAshDC,ShowModeAsLong,iiAsLong,t1AsInteger
w=Picture1.Width
h=Picture1.Height
hBmp=Picture1.hDC
ShowMode=&HCC0020`ROP模式(復(fù)制)
Data=Get_RealDatabase()`從實(shí)時(shí)數(shù)據(jù)庫取當(dāng)前監(jiān)控值
y1=(S-Data)/S*h`根據(jù)量程轉(zhuǎn)變成具體坐標(biāo)
ii=BitBlt(hBmp,0,0,w-1,h,hBmp,1,0,ShowMode)`整個(gè)曲線右移一個(gè)像素點(diǎn)
Picture1.Line(w-1,y)-(w,y1),RGB(0,255,0)
y=y1
t1=Val(Mid$(Time$,3,2))
IfT<>t1Then`在曲線下方顯示時(shí)間(用分表示)
Picture1.CurrentX=w-16
Picture1.CurrentY=h-8
Picture1.PrintMid$(Time$,1,5)
T=t1
EndIf
EndSub
[歷史曲線]
歷史曲線反映的是過去一段時(shí)間內(nèi)某個(gè)監(jiān)測點(diǎn)的變化趨勢,其曲線走向是從左向右方向發(fā)展的,與實(shí)時(shí)曲線走向正好相反。由于歷史數(shù)據(jù)庫保存的時(shí)間長,一般為一個(gè)月、三個(gè)月或者更長,因此其數(shù)據(jù)量特別大,在實(shí)現(xiàn)時(shí)只能顯示其中的一段曲線,而不能在圖片上一次畫好,否則其顯示速度將非常慢。

具體實(shí)現(xiàn)如下:
1、
在窗體Form2中加入圖片框Picture2,在圖片框的下方加入四個(gè)按鈕,分別為曲線右移4小時(shí)按鈕Command1、曲線右移8小時(shí)按鈕Command2、曲線左移4小時(shí)按鈕Command3和曲線左移8小時(shí)按鈕Command4。
2、設(shè)歷史曲線一分鐘存儲(chǔ)一個(gè)數(shù)據(jù),并設(shè)一個(gè)像素點(diǎn)畫一小段直線,因此對于8小時(shí)的曲線,圖片的寬度為480Pixel,而對于4個(gè)小時(shí)的曲線,則兩個(gè)像素點(diǎn)畫一小段直線,具體設(shè)置如下:
Picture2.ScaleMode=3:Picture2.AutoRedraw=False
Picture2.Width=480:Picture2.Height=120
3、在窗體級變量中定義以下變量:
DimSAsLong`被測點(diǎn)的量程
DimFileNoAsLong`歷史數(shù)據(jù)庫的記錄號
DimHtimeAsDate`被測點(diǎn)對應(yīng)的歷史時(shí)間
4、PrivateSubForm2_Load()
t$=FileDateTime("C:/HDB/HistoryData.dat")`獲得歷史數(shù)據(jù)庫存儲(chǔ)時(shí)間
Htime=TimeValue(Mid$(t$,Len(t$)-8,8))
Open"C:/HDB/HistoryData.dat"ForRandomAs#1Len=4
`打開歷史數(shù)據(jù)庫,
每個(gè)記錄存放一個(gè)單精度數(shù)
S=400`設(shè)置量程
EndSub
5、PrivateSubCommand1_Click()
`曲線右移4個(gè)小時(shí)
DimwAsLong.HAsLong,IAsLong,jAsLong
Dimy1AsLong,y2AsLong,yAsSingle
Picture2.Picture=LoadPicture("")`清曲線
w=Picture2.Width
h=Picture2.Height
Picture2.Line(0,0)-(w-1,h-20-1),RGB(127,127,127),B`用灰色在圖片上
畫網(wǎng)格
ForI=1To4
Picture2.Line(0,I*20)-(w-1,I*20),RGB(127,127,127)
NextI
ForI=1To7
Picture2.Line(I*60,0)-(I*60,h-20-1),RGB(127,127,127)
NextI
y1=-1
I=0
j=0
DoWhileNotEOF(#1)ANDI<w
Get#1,y
y2=(S-y)/S*h`根據(jù)量程轉(zhuǎn)換為具體坐標(biāo)值
Ify1<>-1Then
Picture2.Line(I,y1)-(I 2,y2),RGB(0,255,0)`用綠色畫曲線
I=I 2
y1=y2
EndIF
j=j 1
Ifj=60Then'顯示時(shí)間(用小時(shí)顯示)
Htime=TimeValue(Htime) TimeValue("01:00:00")
j=0
Picture2.CurrentX=I-10
Picture2.CurrentY=h-20
Picture2.PrintHour(Htime)
EndIf
EndDo
FileNo=Seek(#1)`獲得歷史數(shù)據(jù)庫的記錄號
EndSub
6、PrivateSubCommand3_Click()
`曲線左移4個(gè)小時(shí)
DimwAsLong.HAsLong,IAsLong,jAsLong
Dimy1AsLong,y2AsLong,yAsSingle
Picture2.Picture=LoadPicture("")`清曲線
w=Picture2.Width
h=Picture2.Height
Picture2.Line(0,0)-(w-1,h-20-1),RGB(127,127,127),B`用灰色在圖片上
畫網(wǎng)格
ForI=1To4
Picture2.Line(0,I*20)-(w-1,I*20),RGB(127,127,127)
NextI
ForI=1To7
Picture2.Line(I*60,0)-(I*60,h-20-1),RGB(127,127,127)
NextI
y1=-1
I=0
j=0
IfFileNo>240Then`記錄指針往前移240個(gè)記錄
FileNo=FileNo-240
Seek#1,FileNo
Htime=TimeValue(Htime)-TimeValue("04:00:00")`時(shí)間左移4個(gè)小時(shí)
EndIf
DoWhileNotEOF(#1)ANDI<w
Get#1,y
y2=(S-y)/S*h
Ify1<>-1Then
Picture2.Line(I,y1)-(I 2,y2),RGB(0,255,0)`用綠色畫曲線
I=I 2
y1=y2
EndIF
j=j 1
Ifj=60Then'顯示時(shí)間(用小時(shí)顯示)
Htime=TimeValue(Htime) TimeValue("01:00:00")
j=0
Picture2.CurrentX=I-10
Picture2.CurrentY=h-20
Picture2.PrintHour(Htime)
EndIf
EndDo
FileNo=Seek(#1)`獲得歷史數(shù)據(jù)庫的記錄號
EndSub
至于曲線左移8小時(shí)和右移8小時(shí),可以參考上述的方法,在畫兩點(diǎn)之間的直線時(shí),以一個(gè)像素點(diǎn)為一小段直線,這里不一一舉例。->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泗水县| 读书| 庆元县| 杭锦旗| 宜兴市| 尚志市| 遵义县| 永胜县| 扶风县| 武安市| 乌拉特后旗| 沛县| 资中县| 西平县| 施秉县| 乌兰浩特市| 新绛县| 靖州| 博白县| 瑞丽市| 江油市| 红安县| 施甸县| 淳化县| 湖南省| 平凉市| 长海县| 措勤县| 琼结县| 宝丰县| 海盐县| 黄陵县| 吉林市| 平江县| 那曲县| 岢岚县| 靖安县| 巨鹿县| 屯留县| 永顺县| 方正县|