1 引言
在PLC——計算機監控系統中,界面設計通常組態軟件來實現。作為組態軟件,羅克韋爾RSView32提供了強大的數據監控能力,方便用戶進行上位機的畫面組態。由于RSView32并沒有提供強大的報表功能,如果只進行簡單的數據分析,報表變化不是很復雜,并且對數據可移動性無太高要求,組態軟件可實現。然而一旦涉及到復雜的數據處理,組態軟件往往表現得力不從">

      技術頻道

      在組態軟件RSView32中用VBA實現報表

      1 引言
      在PLC——計算機監控系統中,界面設計通常組態軟件來實現。作為組態軟件,羅克韋爾RSView32提供了強大的數據監控能力,方便用戶進行上位機的畫面組態。由于RSView32并沒有提供強大的報表功能,如果只進行簡單的數據分析,報表變化不是很復雜,并且對數據可移動性無太高要求,組態軟件可實現。然而一旦涉及到復雜的數據處理,組態軟件往往表現得力不從心。但是RSView32內嵌有VBA,VBA是Visual Basic for Application的簡寫,它以VB語言為基礎,經過修改并運行在Microsoft Office的應用程序。只要使用VBA進行簡單的編程便可以實現大多數報表功能了。

      2 開發環境及數據記錄格式簡介
      RSView32是RockWell SoftWare公司的組態軟件,它提供集成的、組態化的人機接口,廣泛的用來監視和控制自動化設備和過程。它除了可以方便的與ALLEN -BRADLEY PLC進行無縫的結合應用,也可以通過使用OPC的通訊方式與其它公司的設備進行連接。
      ODBC(Open Database Connectivity開放式數據庫互連)是由微軟推出的工業標準,一種開放的獨立于廠商的API應用程序接口,可以跨平臺訪問各種個人計算機、小型機以及主機系統。ODBC作為一個工業標準,絕大多數數據庫廠商都為自己的產品提供了ODBC接口或提供了ODBC支持,這其中就包括常用的SQL SERVER、ORACLE、INFORMIX等,當然也包括了Access。
      RSView32的數據記錄是一個在特定條件下保存指定的標記數值或數據的過程。在“數據記錄設置”編輯器里,可以創建定義不同條件的數據記錄模式,本文將數據通過ODBC接口存儲到數據庫Access里,即將標記值被記錄到用ODBC接口連接到的數據庫Access的三個表格里:
      標記表格(TagTable):把標記名存儲到一個索引里;
      符點數表格(FloatTable):存儲模擬量和開關量標記數值;
      字符串表格(StringTable):存儲字符串數值。
      本文中關心的是符點數表格(FloatTable),但在符點數表格中(FloatTable)沒有代表標記名稱的Tagname字段,代替它的是標記索引號TagIndex字段,這樣在分析報表時很不方便,而在本文中將使用VBA解決表格帶來的不便。

      3 實現原理
      RSView32從PLC采集的實時數據,通過ODBC接口存儲到數據庫Access中,在利用RSView32自帶的VBA開發,訪問Access數據庫,對實時數據進行復雜的操作,可以通過VBA調用Excel,顯示和打印出美觀復雜的報表;也可以在通過VBA的窗體,表格控件,回顯在RSView32的人機界面上,作到無縫連接;本文介紹前一種方法。
      通過Excel可以用VBA程序生成Excel報表及圖表,并利用Excel的功能完成打印預覽、打印等功能;Excel對象封裝了微軟Excel的全部元素,例如Application對象表示Excel應用程序,Worksheet對象表示Excel工作表等,利用Excel對象提供的屬性、方法和事件,在應用程序中生成Excel報表及圖表Excel對象模型描述了Excel中對象之間的結構關系,如圖1所示。

      圖1 EXCEL對象模型


      (1) Application對象表示Excel應用程序,在Excel對象模型中該對象處于模型的頂端,通過使用可以訪問模型中其它對象,從而控制Excel應用程序的外觀或功能。
      (2) Workbook對象表示Excel中的工作簿,即對應一個Excel文件,通過使用該對象可以實現對Excel工作簿的各種控制。
      (3) Worksheet對象表示Excel中的工作表,通過使用該對象可以實現對Excel工作表的各種控制。
      (4) Range對象表示Excel中的區間,可以表示Excel的單元格、幾個單元格、行、列或一個選中的區域,使用Range對象可以實現對Excel單元格或選中區域的各種控制。

      4 應用實例
      Microsoft Office EXCEL有十分強大報表功能,使用VBA便可以非常方便地調用EXCEL的功能來生成我們所需的報表。下面將詳細介紹如何使用VBA通過EXCEL來生成當日的報表。
      解決方案框圖如圖2所示。

      圖2 解決方案框圖


      4.1 打開EXCEL
      為了使用EXCEL為我們生成報表,我們必須事先打開EXCEL,下面的VBA語句顯示了如何在RSView中打開EXCEL。
      ‘ 創建 EXCEL對象
      Set objExcel = CreateObject("Excel.Application")
      ‘ 設置EXCEL的屬性
      With objExcel
      ‘顯示EXCEL
      .Application.Visible = True
      ‘創建新的工作簿
      . Application.Workbooks.Add
      ‘EXCEL生成報表后全屏顯示
      . Application.WindowState=-4137
      ‘激活一個第一個工作表
      .Worksheets("Sheet1").Activate
      ‘定義列寬
      . Columns(1).ColumnWidth = 23
      .Columns(2).ColumnWidth = 15
      . Columns(3).ColumnWidth = 17
      .Columns(4).ColumnWidth = 15
      .Columns(5).ColumnWidth = 17
      ‘每列的內容居中顯示
      For nColumn = 1 To 5
      objExcel.Columns(nColumn).HorizontalAlignment= -4108 '-4108=xlCenter
      Next nColumn
      定義EXCEL表的列名
      .Rows(1).Font.Bold = True
      .cells(1, 1).Value = "Data and Time"
      .cells(1, 2).Value = "Ingred1/pv"
      .cells(1, 3).Value = "Ingred1/sup_pv"
      .cells(1, 4).Value = "Ingred2/pv"
      .cells(1, 5).Value = "Ingred2/sup_pv"
      End With
      4.2 數據讀出的步驟
      建立與數據庫的連接,從中讀出我們所需要的數據來填充我們的報表,下面的代碼實現了這樣的功能,把采集到的時間寫入EXCEL的第一列中; "Ingred1/pv"、"Ingred1/sup_pv"、"Ingred2/pv"和"Ingred2/sup_pv"的數據寫入EXCEL的第二、三、四和五列中。
      (1) 建立與數據庫的連接
      Set conn = New ADODB.Connection
      str = "FileDSN=db.dsn;;;"
      conn.Open str
      Set rs = New ADODB.Recordset
      ‘采集當日的數據
      SQL=”select DateAndTime, Millitm from FloatTable where datediff(‘d’,DateAndTime,date())=0”
      rs.Open SQL, conn
      (2) 讀取符點數表格(FloatTable)中的數據
      Do While Not rs.EOF
      nColumn = 0 '表中的第1列
      b(i) = Trim(rs.Fields(nColumn).Value)
      nColumn = 1 '表中的第2列
      a(i) = Trim(rs.Fields(nColumn).Value)
      i = i + 1
      rs.MoveNext
      irow = irow + 1
      Loop
      (3) 將數據寫到EXCEL表中
      j = 2
      y = 1
      Do While y <> i
      nColumn_excel = 1 'EXCEL的列
      objExcel.cells(j, nColumn_excel).Value = b(y)
      objExcel.cells(j, nColumn_excel).numberformatLocal = "yyyy-m-d h:mm:ss"
      For nColumn_excel = 2 To 5
      objExcel.cells(j, nColumn_excel).Value = a(y)
      y = y + 1
      Next nColumn_excel
      j = j + 1
      Loop
      最后在RSView32中通過RSView32函數調用VBA程序,利用VBA與EXCEL結合編程,實現了生成當日報表的功能。

      5 結束語
      本文例中將RSView32采集的數據通過ODBC接口存儲到數據庫Microsoft Access中,并利用RSView32自帶的VBA編輯器導入到EXCEL中,并給出表單形式的數據報表;用同樣的方法,也可生成柱狀圖等形式的報表,可根據具體需要編制相應的程序來實現,可作為低成本的報表實現方法,方便了操作與生產。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 97久久精品一区二区三区| 国产凸凹视频一区二区| 中文乱码人妻系列一区二区| 本免费AV无码专区一区| 午夜视频在线观看一区二区| 国产成人精品日本亚洲专一区| 免费视频一区二区| 波多野结衣高清一区二区三区 | 久久久久久综合一区中文字幕| 日韩精品一区二区三区不卡| 国产在线一区观看| 精品不卡一区中文字幕| 日本视频一区二区三区| 一区二区三区杨幂在线观看| 青娱乐国产官网极品一区| 日本精品一区二区三区四区| 色综合视频一区二区三区 | 无码日韩人妻AV一区二区三区| 日本丰满少妇一区二区三区| 亚洲国产高清在线一区二区三区 | 国产一区二区三区日韩精品| 日韩精品无码Av一区二区| 国产在线一区观看| 国产成人精品无人区一区 | 亚洲V无码一区二区三区四区观看| 久久亚洲国产精品一区二区| 午夜福利av无码一区二区| 99精品国产一区二区三区不卡| 精品亚洲AV无码一区二区三区 | 色屁屁一区二区三区视频国产| 日韩精品一区二区三区中文3d| 日本中文一区二区三区亚洲| 精品亚洲一区二区三区在线播放| 亚洲日韩激情无码一区| 一区二区视频在线观看| 曰韩人妻无码一区二区三区综合部| 日本精品高清一区二区2021| 一区国严二区亚洲三区| 国产亚洲一区二区手机在线观看| 乱精品一区字幕二区| 韩国福利视频一区二区|