注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

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

所在位置:工控博客苑 -- 实在点好 -- IFIX与EXCEL的连接

中国工控网搜索:

胡先生

     学历:大学本科
     职称:工程师
     年龄:39岁
       新闻信息(1/0)
       工作图片(0)
       技术论文(0/0)
       交流论坛(64/54)
       留言信箱(4)
       浏览人次:12107
发表人:ifixonline 发表时间:2009/8/18 17:27:00

 

发表新论题

 本栏论题: IFIX与EXCEL的连接  [10188]
    第一步,创建ODBC数据源,具体方法:启动控制面板中的数据源ODBC,单击“系统DNS”对话框,选择所需数据源的驱动,如:“Microsoft excel driver (*.exl)”,单击“完成”按钮,弹出“ODBC Microsoft excel 安装”对话框;在数据源名中定义一个数据源名称,数据库中“选择”中选择区县数据所在的数据库,此数据库的表至少有三个字段:时间字段、数据字段、毫秒字段。单击确定按钮,新创建数据源就添加到“系统DNS”列表中。
   
    第二步,在IFIX中创建代码
   
    ADO—在安装了MCROWIN BASIC 6.0 等软件就有了;
   
    Private Sub CommandButton1_Click()
    '注释: 1。该程序需要安装ADO 2.0目标库并在本机注册
    ' 2。Microsoft ActiveX Data Objects 2.1 Library 必须被引用 (Office 2000)
    ' 3。Microsoft Excel 9.0 object libraries 必须被引用 (Office 2000)
    ' 4。划===处可根据具体报表修改
   
    Dim strQueryAvg As String
   
    Dim c As Integer
    Dim r As Integer
    Dim Intyexcel As Excel.Application
   
    Dim MyDate, MyMonth, MyDay, MyHour, MyMinute, MySecond
    Dim StartTime, EndTime, Duration, DisplayDay, DisplayMonth As String
   
    '++===================================================================
    '报表中的 TAG
    Dim Tag1, Tag2, Tag3, Tag4, Tag5, Tag6, Tag7, Tag8 As String
    Dim Items As Integer
   
    Tag1 = "TEST"
    Tag2 = "TEST1"
    Tag3 = " "
    Tag4 = " "
    Tag5 = " "
    Tag6 = " "
    Tag7 = " "
    Tag8 = " "
   
    '从历史库中取得域项, 2 - DATATIME, VALUE, TAG 共三项
    Items = 2
    '--====================================================================
   
    MyDate = Now()
    MyMonth = Month(MyDate)
    MyDay = Day(MyDate)
    MyHour = Hour(MyDate)
    MyMinute = Minute(MyDate)
    MySecond = Second(MyDate)
   
    StartTime = "2000" & "-" & MyMonth & "-" & MyDay - 1 & " " & "00:00:00"
    EndTime = "2000" & "-" & MyMonth & "-" & MyDay - 1 & " " & "23:00:00"
   
    '++==========================================================================
    '查询,根据报表修改
    strQueryAvg = "Select DATETIME, VALUE, TAG FROM FIX " & _
    "WHERE MODE = 'AVERAGE' and (TAG='" & Tag1 & "' or TAG='" & Tag2 & "'" & _
    " or TAG='" & Tag3 & "' or TAG='" & Tag4 & "' or TAG='" & Tag5 & "'" & _
    " or TAG='" & Tag6 & "' or TAG='" & Tag7 & "' or TAG='" & Tag8 & "')" & _
    "and INTERVAL = '01:00:00' and " & _
    "(DATETIME >= and " & _
    "DATETIME <= )"
    '--===========================================================================
   
   
    Dim cnADO As New ADODB.Connection
    Dim rsADO As Recordset
   
    Set cnADO = New ADODB.Connection
    cnADO.ConnectionString = "DSN = FIX Dynamics Historical Data; UID = sa; PWD = ;"
    cnADO.Open "FIX Dynamics Historical Data", "sa", ""
   
    Set rsADO = New ADODB.Recordset
   
    rsADO.Open strQueryAvg, cnADO, adOpenForwardOnly, adLockBatchOptimistic
    '''如果执行上面的语句出错的话,则最大的可能性就是SQL语句有错误!
    r = 1
    Set Intyexcel = New Excel.Application
    Intyexcel.Visible = False
   
   
    '++============================================================================
    '打开的报表文件名
    Dim OutReportFile As String
    Dim InReportFile As String
   
    InReportFile = "C:\Dynamics\App\HIST1"
   
    Intyexcel.Workbooks.Open InReportFile & ".XLS"
   
    Intyexcel.Sheets("Sheet2").Select
    Intyexcel.Columns("A:Z").Select
    Intyexcel.Selection.ClearContents
    Intyexcel.Range("A1").Select
   
    While rsADO.EOF <> True
    With Intyexcel.Worksheets(2)
    For c = 0 To Items
    If rsADO(c) <> "" Then .Cells(r, c + 1).Value = rsADO(c)
    Next c
    r = r + 1
    rsADO.MoveNext
    End With
    Wend
   
    Intyexcel.Sheets("Sheet1").Select
   
    ' Intyexcel.ActiveSheet.PageSetup.Orientation = xlPortrait 'xlLandscape
    ' Intyexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
    Intyexcel.ActiveSheet.PrintOut
    Intyexcel.DisplayAlerts = False
    Intyexcel.ActiveWorkbook.Save
    OutReportFile = InReportFile & "_00" & MyMonth & MyDay
    Intyexcel.ActiveWorkbook.SaveAs OutReportFile
   
    Intyexcel.Quit
    Intyexcel.DisplayAlerts = True
    Set Intyexcel = Nothing
    Set cnADO = Nothing
   
    End Sub
   
    4.2 iFIX中电厂日报表的生成
   
      总则:运用iFIX的调度器运行基于时间的VBA脚本来生成每天的EXCEL格式日报表。
   
      1) iFIX中调度设置
    在iFIX中新建时间调度,设置成间隔1小时的调度项,然后点击VB编辑器自定义脚本.
   
      2) 初始变量定义
   
    Dim ReportArray As Variant Rem 存放日报中所有要显示的参数的数组
    Dim FirstPoint1 As Variant Rem 第一个变量
    Dim tempvar As Variant Rem 中间变量
    Dim strStartTime, strEndTime Rem 报表查询的时间范围
    Dim Interval As Variant Rem 报表查询的间隔时间
    Dim OutReportfile As Variant Rem 输出EXCEL表格的文件名
    Dim TemplateName As String Rem 这个是日报表模板的文件名
   
      3) 建立对EXCEL的引用,并打开报表的模板文件:
   
    Set msExcel = CreateObject("Excel.Application")
    With msExcel
    .WindowState = xlMinimized
    .Visible = False
    .Workbooks.Open ReportTemplateName, , False Rem 打开报表的模板文件
    .ActiveWorkbook.ActiveSheet.Select
    .DisplayAlerts = False
    .DisplayAlerts = False
    .Wait (Now() + 0.00002)
    End With
   
      4) 创建SQL查询语句:
    Dim rsADO As New ADODB.Recordset
    Dim cnADO As New ADODB.Connection
    Dim SQL0,SQL1 AS String
    SQLO = "select FIX.value from FIX where FIX.interval=|" + Interval + "| and FIX.datetime>={ts|" + strStartTime + "|} and FIX.datetime<{ts|" + strEndTime + "|}" Rem FIX为本地节点名
    SQL1 = SQLO & " and (FIX.tag=|" & FirstPoint1 & "|"
    iTotalCols = 1
    For Each tempvar In FirstReportPoints
    iTotalCols = iTotalCols + 1
    SQL1 = SQL1 & " or FIX.tag=|" & tempvar & "|"
    Next tempvar
    SQL1 = SQL1 + ")"
   
      5) 执行对数据库的查询:
    Set cnADO = New ADODB.Connection
    With cnADO
    Rem .CursorLocation = adUseClient
    .Open "PROVIDER = Microsoft OLE DB Provider for ODBC Drivers;dsn=FIX Dynamics Historical Data;uid=sa;pwd=;"
    .Execute (SQL1)
    End With
   
      6) 建立查询数据库后的记录集,并把数据写到EXCEL中后另存为EXCEL文件:
    Set rsADO = New ADODB.Recordset
    rsADO.CursorLocation = adUseClient
    rsADO.Open SQL1, cnADO, adOpenForwardOnly, adLockReadOnly
    If rsADO.BOF Then
    rsADO.Close
    cnADO.Close
    With msExcel
    DoEvents
    .ActiveWorkbook.Close
    .Quit
    End With
    Set msExcel = Nothing
    Rem MsgBox "第一个表查询条件为空,请检查查询条件"
    Exit Sub
    Else
    c = 1
    While rsADO.EOF <> True
    With msExcel.Worksheets(1)
    For j = 1 To 24
    If rsADO(0) <> "" Then
    msExcel.Worksheets(1).Cells(j, c).Value = rsADO(0)
    rsADO.MoveNext
    End If
    Next j
    End With
    c = c + 1
    Wend
    msExcel.ActiveWorkbook.SaveAs "d:\" & OutReportfile & ".xls"
    msExcel.Quit
    msExcel.DisplayAlerts = True
    msExcel.Visible = True
    Set msExcel = Nothing
    Set cnADO = Nothing
    rsADO.Close
   
    杭州集益科技有限公司是美国通用电气GE Fanuc公司中国地区指定分销商,特价销售9030、9070、PAC RX3i、PAC RX7i、Versamax系列PLC,特价销售Proficy iFIX组态软件。
    联系人:胡有玉
    联系电话:15067103350
    传真号码:0571-88227248
    QQ号码:283479963
    公司地址:杭州市西湖区文三路555号9层
    公司网址:http://www.jiyitech.com/
    http://www.ifixonline.com/
 

如果要回复本栏论题,请首先登陆网站

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

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

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码
 
     相关博客新闻:

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

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

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

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

中国    洛阳