• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    應用VB4.0實現工業控制的實時曲線和歷史曲線

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 26次 | 進入軟件測試論壇討論

    領測軟件測試網 作者:梁維彪

    在大型的工業現場控制中,一般用DCS(集散控制系統)來實現過程控制。在DCS中,實時曲線可顯示該控制點的當前趨勢,以監測該點在現場工況變化的情況下的控制穩定性,歷史曲線可觀察過去一段時間內某一點的變化趨勢,并供工藝人員分析工藝流程的穩定性和故障原因。然而在小型的工業控制中,由于控制規模小,控制回路少,因此可用PC機就能完成整個過程控制,在實時曲線和歷史曲線方面,可用VB4.0就能實現,并可與大型的DCS相媲美。
    [實時曲線]
    實時曲線反映的是現場數據的實時性和當前趨勢,因此在實現時需顯示曲線的動態變化,參考DCS,當前點在曲線的最右端顯示,而整個曲線動態地向左移動。

    具體實現如下:
    1、選擇需要顯示的窗體Form1,加入圖片框Picture1,根據實際需要設置圖片的大小并移到合適的位置,并在圖片的外面畫好量程----時間坐標系;
    2、 在全局模塊中定義位塊傳輸API函數BitBlt( )和全局變量:
    Declare Function BitBlt Lib "GDI32" (ByVal hDestDC AS Long,ByVal X As Long,ByVal Y As Long,ByVal nWidth As Long,ByVal nHeight As Long,ByVal hSrcDC As Long,ByVal xSrc As Long,ByVal ySrc As Long,ByVal DrawStyleAs Long) As Long
    Gobal S As Long `量程
    Gobal L As Long `上一次的縱坐標值
    Gobal T As Integer `上一次時間值(分)
    3、 Private Sub Form1_Load()
    Picture1.AutoRedraw = False `曲線不重畫
    Picture1.ScaleMode = 3 `以象素方式(Pixel)
    L = -1 `設置初值
    S = 400
    T = -1
    End Sub
    4、根據現場數據采集的采樣頻率,設置定時器Timer1的定時值,曲線移動就

    Timer1實現:
    Private Sub Timer1_Time()
    Dim w As Long, h As Long, y1 As Long, Data As Long
    Dim hBmp As hDC, ShowMode As Long, ii As Long, t1 As Integer
    w = Picture1.Width
    h = Picture1.Height
    hBmp = Picture1.hDC
    ShowMode = &HCC0020 `ROP模式(復制)
    Data = Get_RealDatabase( ) `從實時數據庫取當前監控值
    y1 = (S - Data) / S * h `根據量程轉變成具體坐標
    ii = BitBlt(hBmp,0,0,w-1,h,hBmp,1,0,ShowMode) `整個曲線右移一個像素點
    Picture1.Line (w - 1,y) - (w,y1) , RGB(0,255,0)
    y = y1
    t1 = Val(Mid$(Time$,3,2))
    If T < > t1 Then `在曲線下方顯示時間(用分表示)
    Picture1.CurrentX = w - 16
    Picture1.CurrentY = h - 8
    Picture1.Print Mid$(Time$,1,5)
    T = t1
    End If
    End Sub
    [歷史曲線]
    歷史曲線反映的是過去一段時間內某個監測點的變化趨勢,其曲線走向是從左向右方向發展的,與實時曲線走向正好相反。由于歷史數據庫保存的時間長,一般為一個月、三個月或者更長,因此其數據量特別大,在實現時只能顯示其中的一段曲線,而不能在圖片上一次畫好,否則其顯示速度將非常慢。

    具體實現如下:
    1、
    在窗體Form2中加入圖片框Picture2,在圖片框的下方加入四個按鈕,分別為曲線右移4小時按鈕Command1、曲線右移8小時按鈕Command2、曲線左移4小時按鈕Command3和曲線左移8小時按鈕Command4。
    2、設歷史曲線一分鐘存儲一個數據,并設一個像素點畫一小段直線,因此對于8小時的曲線,圖片的寬度為480Pixel,而對于4個小時的曲線,則兩個像素點畫一小段直線,具體設置如下:
    Picture2.ScaleMode = 3 : Picture2.AutoRedraw = False
    Picture2.Width = 480 : Picture2.Height = 120
    3、 在窗體級變量中定義以下變量:
    Dim S As Long `被測點的量程
    Dim FileNo As Long `歷史數據庫的記錄號
    Dim Htime As Date `被測點對應的歷史時間
    4、 Private Sub Form2_Load( )
    t$ = FileDateTime("C:\HDB\HistoryData.dat") `獲得歷史數據庫存儲時間
    Htime = TimeValue(Mid$(t$, Len(t$)-8, 8))
    Open "C:\HDB\HistoryData.dat" For Random As #1 Len = 4
    `打開歷史數據庫,
    每個記錄存放一 個單精度數
    S = 400 `設置量程
    End Sub
    5、Private Sub Command1_Click( )
    `曲線右移4個小時
    Dim w As Long. H As Long, I As Long, j As Long
    Dim y1 As Long, y2 As Long, y As Single
    Picture2.Picture = LoadPicture("") `清曲線
    w = Picture2.Width
    h = Picture2.Height
    Picture2.Line (0,0) - (w-1,h -20 -1) ,RGB(127,127,127),B `用灰色在圖片上
    畫網格
    For I = 1 To 4
    Picture2.Line(0,I*20) - (w-1,I*20),RGB(127,127,127)
    Next I
    For I = 1 To 7
    Picture2.Line(I*60,0) - (I*60,h-20-1),RGB(127,127,127)
    Next I
    y1= -1
    I = 0
    j=0
    Do While Not EOF(#1 ) AND I < w
    Get #1,y
    y2 = (S -y)/S*h `根據量程轉換為具體坐標值
    If y1 < > -1 Then
    Picture2.Line (I , y1) - (I+2, y2) , RGB(0,255,0) `用綠色畫曲線
    I = I+2
    y1 = y2
    End IF
    j = j+1
    If j = 60 Then 注釋:顯示時間(用小時顯示)
    Htime = TimeValue(Htime)+TimeValue("01:00:00")
    j = 0
    Picture2.CurrentX= I -10
    Picture2.CurrentY= h -20
    Picture2.Print Hour(Htime)
    End If
    End Do
    FileNo = Seek(#1) `獲得歷史數據庫的記錄號
    End Sub
    6、Private Sub Command3_Click( )
    `曲線左移4個小時
    Dim w As Long. H As Long, I As Long, j As Long
    Dim y1 As Long, y2 As Long, y As Single
    Picture2.Picture = LoadPicture("") `清曲線
    w = Picture2.Width
    h = Picture2.Height
    Picture2.Line (0,0) - (w-1,h -20 -1) ,RGB(127,127,127),B `用灰色在圖片上
    畫網格
    For I = 1 To 4
    Picture2.Line(0,I*20) - (w-1,I*20),RGB(127,127,127)
    Next I
    For I = 1 To 7
    Picture2.Line(I*60,0) - (I*60,h-20-1),RGB(127,127,127)
    Next I
    y1= -1
    I = 0
    j=0
    If FileNo >240 Then `記錄指針往前移240個記錄
    FileNo = FileNo - 240
    Seek #1,FileNo
    Htime = TimeValue(Htime) - TimeValue("04:00:00") `時間左移4個小時
    End If
    Do While Not EOF( #1) AND I < w
    Get #1,y
    y2 = (S -y)/S*h
    If y1 < > -1 Then
    Picture2.Line (I , y1) - (I+2, y2) , RGB(0,255,0) `用綠色畫曲線
    I = I+2
    y1 = y2
    End IF
    j = j+1
    If j = 60 Then 注釋:顯示時間(用小時顯示)
    Htime = TimeValue(Htime)+TimeValue("01:00:00")
    j = 0
    Picture2.CurrentX= I -10
    Picture2.CurrentY= h -20
    Picture2.Print Hour(Htime)
    End If
    End Do
    FileNo = Seek(#1) `獲得歷史數據庫的記錄號
    End Sub
    至于曲線左移8小時和右移8小時,可以參考上述的方法,在畫兩點之間的直線時,以一個像素點為一小段直線,這里不一一舉例。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>