• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    上位機監(jiān)控軟件中的數(shù)據(jù)庫操作

    2013-12-31 00:00:00袁道香
    網友世界 2013年20期

    【摘 要】本文結合工程實例,采用VB設計上位機的外掛界面和數(shù)據(jù)庫管理平臺;后臺數(shù)據(jù)庫軟件采用ACCESS 2003;上位機與PLC之間采用ROCKWELL的RSLink作為OPC協(xié)議。本設計中將ACCESS 2003與PLC結合起來,用戶可方便地在上位機中存儲、查看和打印下位機(PLC)中的信息,監(jiān)視PLC的工作狀態(tài),并制作生產報表。

    【關鍵詞】上位機;ACCESS2003;PLC;報表

    1.引言

    本系統(tǒng)是一個粉料加料系統(tǒng),分為六個部分:加料區(qū)、一號粉料區(qū)、二號粉料區(qū)、三號粉料區(qū)、混合攪拌區(qū)及下料包裝區(qū)。其加料區(qū)由一個加料罐和一些泵和閥組成;一號粉料區(qū)由四個粉料罐和一個稱量罐及泵和閥組成;二號粉料區(qū)同一號粉料區(qū);三號粉料區(qū)同一號粉料區(qū);混合攪拌區(qū)由混合罐及內部攪拌漿組成。根據(jù)實際情況需要完成下列功能。

    功能一:監(jiān)視功能。將現(xiàn)場設備的信息,如閥的位置,變頻器的電流功率,儲罐內的液位,稱重罐的重量等顯示在上位機上,可以實時的監(jiān)視現(xiàn)場的情況,并可以手動控制單個設備,比如開啟一個閥活電機等,并將相應的信息存入數(shù)據(jù)庫,使其能看到歷史曲線及歷史事件與報警的記錄。

    功能二:管理功能。在上位機上能儲存不定量配方,可以新建修改配方,也可以刪除不用的配方,根據(jù)生產的需要選擇不同的配方,系統(tǒng)將根據(jù)該配方的要求運行。

    功能三:報表功能。由于批次生產的特殊性,一般需查看打印不同的報表,以供生產管理,這里需要日報,月報,按配方查詢,成分統(tǒng)計,配方統(tǒng)計等。

    2.系統(tǒng)的硬件設計

    該系統(tǒng)的硬件由1臺上位機(電腦),1組PLC通過以太網連接上位機,另通過以太網配有兩個觸摸屏連接PLC,供現(xiàn)場操作。

    3.VB設計上位機的外掛界面和數(shù)據(jù)庫管理平臺

    3.1 上位機與PLC之間的通信

    本設計中,上位機與PLC之間的通信協(xié)議有兩種:一種是用來實現(xiàn)監(jiān)視功能的。用INTOUCH作為上位機軟件,通過ROCKWELL的RSLINX作為OPC通訊連接上位機與PLC,這樣就能把PLC的點與上位機的點一一對應起來,在上位機上就能監(jiān)視控制現(xiàn)場的設備了,這個在這里就不做具體說明。

    另一種是用來實現(xiàn)管理的,即把上位機的配方指令下達給PLC,我們選擇一個合適的配方,按下確定鍵后,PLC就會收到該配方的所有信息,并將根據(jù)此配方進行工作。這個功能由于設計很多數(shù)據(jù)的上下載及數(shù)據(jù)庫的應用,用上位機軟件自身的功能很難實現(xiàn),所以采用了一個外掛的VB程序作為實現(xiàn)該功能的中介,這里采用了DDE協(xié)議,使得VB界面中的數(shù)據(jù)下載到PLC中,代碼如下:

    start_recipe.Text=1

    start_recipe.LinkTopic=\"RSLinx|menniu\"

    start_recipe.LinkItem=\"Weigh_Start,L1,C1\"

    start_recipe.LinkMode=2

    start_recipe.LinkPoke

    start_recipe.LinkMode=0

    start_recipe.Text=0

    start_recipe.LinkTopic=\"RSLinx|menniu\"

    start_recipe.LinkItem=\"Weigh_Start,L1,C1\"

    start_recipe.LinkMode=2

    start_recipe.LinkPoke

    start_recipe.LinkMode=0

    Text1.Text=Combo1.Text

    Text1.LinkTopic=\"RSLinx|menniu\"

    Text1.LinkItem=\"Recipe_Name\"

    Text1.LinkMode=2

    Text1.LinkPoke

    Text1.LinkMode=0

    3.2 上位機與數(shù)據(jù)庫之間的通信

    (1)INTOUCH與數(shù)據(jù)庫間的通信:在一定的條件下,需要從上位機上把特定的數(shù)據(jù)傳到數(shù)據(jù)庫中,作為報表的數(shù)據(jù)源,這時就要建立上位機(INTOUCH)與數(shù)據(jù)庫(ACCESS)之間的通信。本設計中,InTouch通過ODBC和Access進行數(shù)據(jù)交互,通過InTouch SQL訪問管理器將InTouch的數(shù)據(jù)記錄到關系數(shù)據(jù)庫中。具體的步驟如下:首先,創(chuàng)建Microsoft Access數(shù)據(jù)庫并配置ODBC數(shù)據(jù)源。先在ACCESS數(shù)據(jù)庫中建立一個表,將需要記錄的數(shù)據(jù)分別列到每列中,分配好數(shù)據(jù)類型,記住數(shù)據(jù)庫名和表名。然后配置ODBC數(shù)據(jù)源,新建一個數(shù)據(jù)源,選擇剛剛建的數(shù)據(jù)庫,測試成功后就結束了這步。

    然后,配置InTouch SQL訪問管理器。首先在InTouch標記名字典創(chuàng)建和Access列名相同的標記名,其類型也要一致;然后編寫連接與斷開數(shù)據(jù)庫腳本;最后,啟動InTouch SQL訪問管理器,建立綁定列表BlindedList,綁定列表把InTouch中的標記名和數(shù)據(jù)庫中表里的列名映射起來。其連接與斷開數(shù)據(jù)庫腳本如下:

    連接數(shù)據(jù)庫:ResultCode=SQLConnect(ConnectionId,\"DSN=數(shù)據(jù)源名\");

    斷開數(shù)據(jù)庫:ResultCode=SQLDisconnect(ConnectionId);最后,驗證數(shù)據(jù)通信是否正常。

    (2)VB與數(shù)據(jù)庫的通信:由于客戶需要增加減少配方,Intouch又不好做這么麻煩的Recipe,所以用VB做一個外掛程序與數(shù)據(jù)庫通訊,專門用來做配方管理。這里使用OLE DB接口連接VB與數(shù)據(jù)庫,首先在VB的界面上加一個Adodc的控件,這個控件就是一個數(shù)據(jù)通訊的接口,在需要采集數(shù)據(jù)的時候,寫下下面的腳本:

    Adodc1.ConnectionString=\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\VBNEW\mengniu.mdb;Persist Security Info=False\"(通過OLEDB連接數(shù)據(jù)庫)

    Adodc1.RecordSource=\"select*from product where[product code]='\" Combo1.Text \"'\"(通過select語句在數(shù)據(jù)庫中查找記錄)

    這樣,數(shù)據(jù)庫就能和VB連接起來了。

    3.3 數(shù)據(jù)操作的實現(xiàn)

    此配方管理由六個部分組成,分別為成分配置,罐子配置,配方管理,生產,報表,備料;其中成分配置,罐子配置,配方管理是需要用戶名及密碼才可以進入,具有一定的保密性。生產,報表,備料是一般操作員所要使用的。

    點擊主頁上的“配方管理”按鈕,輸入準確的用戶名和密碼,就能進入罐子配置窗口。當一打開該窗口的時候,列表中顯示的是當前所有配方的大概信息,從產品代碼的下拉框中選擇一個配方代碼,該窗口將顯示該配方的詳細信息,包括該配方的成分配比,需要的總重,混合時間等等,VB的實現(xiàn)過程是這樣的:

    Adodc1.Visible=False

    Adodc1.ConnectionString=\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\VBNEW\mengniu.mdb;Persist Security Info=False\"

    Adodc1.RecordSource=\"select*from product\"

    Adodc1.Refresh

    Set DataGrid1.DataSource=Adodc1

    Dim b(0 To 100)As String

    Dim d As Boolean

    Adodc1.Recordset.MoveFirst

    For i=1 To Adodc1.Recordset.RecordCount

    b(i)=Adodc1.Recordset.Fields(\"product code\")

    For j=1 To i-1

    If b(i)=b(j)Then

    d=1

    End If

    Next j

    If d=0 Then

    Combo1.AddItem Adodc1.Recordset.Fields(\"product code\")

    End If

    d=0

    Adodc1.Recordset.MoveNext

    Next i

    3.4 報表功能的實現(xiàn)

    在主頁上點擊“報表”,出現(xiàn)如下窗口。

    在這里可以查看日報,月報,并可以通過分類查詢各種數(shù)據(jù)。這里使用VB的DataReport做的報表。

    首先添加一個Data Environment并打開它,然后鼠標右鍵單擊Connection1,選擇屬性后彈出一數(shù)據(jù)庫連接屬性窗體選擇\"Microsoft Jet 4.0 OLE DB Provider\",單擊\"下一步\",選擇所須要的數(shù)據(jù)庫確定。

    然后鼠標右鍵單擊Connection1,選擇\"Add Command\",Data Environment就創(chuàng)建了一個Command1,然后鼠標右鍵單擊Command1,選擇屬性后彈出一Command1屬性窗體,在Database Object屬性中選擇Table,在Object中選擇Employee,然后單擊Command1屬性窗體中的Grouping,然后復選\"Group Command Object\",在Fields in中雙擊\"TitleOfCourtesy\",然后確定(即按TitleOfCourtesy分組)。

    添加一報表名為DataReport1,在DataReport1的DataSource屬性中填入\"DataEnvironment1\",在DataMember中填入\"Command1_Grouping\",然后鼠標右鍵單擊報表窗體選擇Retrieve Structure,并確認這樣就定義了一個報表結構。在報表的\"Command1_Grouping_Header\"一欄中擺上一RptTextBox控件,并設置DataField屬性為\"TitleOfCourtesy\",在報表的\"Command1_Detail\"一欄中擺上三個RptTextBox控件,設置DataField屬性分別為\"EmployeeID\",\"LastName\"和\"FirstName\",并將其DataMember屬性設置為\"Command1\"。

    雙擊報表,在代碼窗體中輸入以下代碼:

    Private Sub DataReport_Initialize()

    Dim strShape As String

    Dim cnnReport As New ADODB.Connection

    Dim rstReport As New ADODB.Recordset

    strShape=\"SHAPE{SELECT*FROM`batch_recipe`WHERE[STOP TIME]BETWEEN #\" Form5.Text5 \"# AND #\" Form5.Text6 \"#}AS Command1 COMPUTE sum(Command1.[TARGET QUANTITY])as[TARGET QUANTITY],sum(Command1.[REAL QUANT])as[REAL QUANT],Command1 BY'INGREDIENT'\"

    Set cnnReport=New ADODB.Connection

    With cnnReport

    .Provider=\"MSDataShape.1\"

    .Open\"Data Source=G:\VBNEW\mengniu.mdb;Data Provider=Microsoft.Jet.OLEDB.4.0\"

    End With

    Set rstAgmRpt=New ADODB.Recordset

    With rstAgmRpt

    Set.ActiveConnection=cnnReport

    .CursorLocation=adUseClient

    .CursorType=adOpenStatic

    .LockType=adLockReadOnly

    .Source=strShape

    .Open

    End With

    Set Me.DataSource=rstAgmRpt

    End Sub

    這樣,就能做出想要的任何格式的報表了。

    4.結束語

    在本設計中,使用VB與數(shù)據(jù)庫的操作實現(xiàn)更多的單純利用上位機軟件無法實現(xiàn)的功能,特別是利用VB的DataReport功能實現(xiàn)了格式多樣報表。

    英吉沙县| 玉林市| 苍山县| 浮梁县| 花莲县| 元谋县| 安福县| 遂川县| 新营市| 广宁县| 淮安市| 沈丘县| 金秀| 历史| 绥阳县| 郎溪县| 黑山县| 温宿县| 资溪县| 合肥市| 石台县| 巫溪县| 长阳| 宁津县| 南开区| 望城县| 忻城县| 云安县| 壶关县| 德令哈市| 惠水县| 泌阳县| 延津县| 福建省| 毕节市| 烟台市| 县级市| 治多县| 元氏县| 黑河市| 兰西县|