注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 应用方案

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:nxxn75 发表时间:2008/10/1 21:38:00  

 

 本栏论题: 用VB实现工业控制的实时曲线和历史曲线  [4510]

    CS(集散控制系统)来实现过程控制。在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 DrawStyle As
    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 @60; $#@62; t1 Then `在曲线下方显示时间(用分表示)
    Picture1.CurrentX = w - 16
    Picture1.CurrentY = h - 8
    Picture1.Print Mid$(Time$,1,5)
    T = t1
    End If
    End Sub
      [历史曲线] 历史曲线反映的是过去一段时间内某个监测点的变化趋势,其曲线走向是从左向右方向发展的,与实时曲线走向正好相反,如图(2)所示。由于历史数据库保存的时间长,一般为一个月、三个月或者更长,因此其数据量特别大,在实现时只能显示其中的一段曲线,而不能在图片上一次画好,否则其显示速度将非常慢。
    具体实现如下:
   
      1、 在窗体Form2中加入图片框Picture2,在图片框的下方加入四个按钮,分别为曲线右移4小时按钮Command1、曲线右移8小时按钮 Command2、曲线左移4小时按钮Command3和曲线左移8小时按钮Command4。
      2、 设历史曲线一分钟存储一个数据,并设一个像素点画一小段直线,因此对于8小时的曲线,图片的宽度为480 Pixel,而对于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 $#@60; w
    Get #1,y
    y2 = (S -y)/S*h `根据量程转换为具体坐标值
    If y1 $#@60; $#@62; -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 $#@62;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 $#@60; w
    Get #1,y
    y2 = (S -y)/S*h
    If y1 $#@60; $#@62; -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小时,可以参考上述的方法,在画两点之间的直线时,以一个像素点为一小段直线,这里不一一举例。

以下是关于《用VB实现工业控制的实时曲线和历史曲线》论题的回复(共1篇)

回复人:彩锐 

 回复时间:2008/12/25 17:33:00

支持(419) | 反对(526)

 

    湖北彩锐科技公司是专业从事军工液晶显示器、工业液晶显示器及工业自动化控制等产品的研发、制造和销售为一体的高科技企业。
    公司主要产品产系列有:工业/军用液晶显示器,工业/军用液晶监视器,工业/军用PPC平板电脑,工业/军工多画面分割液晶显示器,工业/军工串口切换液晶显示器,壁挂式显示器,家用壁挂式TV,串口/USB触摸屏,工业/军工多通道KVM系列,翻盖液晶显示器,抽屉式键盘,USB/PS2按键板,(以上所有系列外形,尺寸均可定制)
    公司所有产品严格执行行业规范(军用执行GJB 322A-1998,工业执行NEMA4/IP65标准)军工产品适用于地面军事监控
   
    公司网站:www.hbcrkj.com
    联系人:胡先生
    联系电话:027-87210960-8006 QQ:495737049

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳