1. 引言
隨著工控組態軟件功能的不斷完善以及可靠性的不斷提高,其在工業中得到了非常廣泛的應用。但是,盡管組態軟件具有強大的實時數據庫功能,其數據分析能力卻十分薄弱,這一點在一定程度上限制了其在一些領域尤其是在實驗室中的應用。本文針對這種情況,以組態王為例,提出利用組態軟件數據庫訪問的技術將數據庫中數據取出,送到其他具有數據分析能力的軟件(如MATLAB)中去,從而彌補了組態軟件在數據分析方面的不足,為其在更大范圍內的應用提供了切實可行的方法。
2. 訪問組態王數據庫的兩種方法
在本文中主要介紹和使用了兩種方法訪問組態王數據庫:FileWriteFields函數訪問和SQL訪問。通過應用這兩種方法,將組態王實時數據庫中的實時數據直接取出,從而使其他軟件可以對數據進行分析。這兩種方法是并行的,任何一種都可以完成對組態王數據庫的訪問。
下面對FileWriteFields函數和SQL分別予以介紹。
2.1 FileWriteFields()函數簡介[2]
該函數的功能是往文件寫入csv(逗號分隔變量)記錄。其調用格式為:
FileWriteFields(Filename, FileOffset, StartTag, NumberOfFields);
其中,Filename為要寫的文件,若文件不存在,則創建它;FileOffset為寫文件的起始位置(若FileOffset為0,此函數將寫到文件末尾;若為1,則寫到開頭);StartTag*個數據項的變量名稱(此變量名必須以一個數字結尾),此參數必須是一個表明變量名的字符串(而非實際的變量本身,比如變量名為MyTag1,就需要給出“MyTag1”或MyTag1.name,而不僅僅是MyTag1);NumberOfFields要寫的字段數目(此文件的每條記錄中以逗號隔開的字段的字段數目)。
2.2 SQL簡介
SQL(Structured Query Language)是一個通用的、功能*的關系數據庫語言,由于其功能豐富、語言簡單、使用方法靈活,已經成為關系數據庫的標準語言[3]。
組態王SQL訪問功能是為了實現組態王和其他ODBC數據庫之間的數據傳輸。它包括組態王SQL訪問管理器和SQL函數:SQL訪問管理器用來建立數據庫列和組態王變量之間的,通過表格模板在數據庫中建立表格,通過記錄體建立數據庫表格列和組態王之間的;SQL函數可以在組態王的任意一種語言命令中調用,這些函數用來創建表格、插入刪除記錄等。[1]
下面介紹一下幾個主要的SQL函數[2]:
(1)SQLConnect()
SQLConnect用于連接組態王和數據庫,其格式為:
SQLConnect( ConnectionID, “ConnectString”);
其中:ConnectionID為SQLConnect()產生的連接號,ConnectString為連接語句。連接語句格式如下:“DSN=data source name [; attribute= value [;attribute= value]…]”。
(2)SQLInsert()
SQLInert用于使用記錄體中定義的連接在表格中插入一個新的記錄,其格式為:
SQLInsert( ConnectionID, TableName, BindList);
其中:ConnectionID為SQLConnect()產生的連接號,TableName為表格名,BindList為記錄體。
(3)SQLDisconnect()
SQLDisconnect用于從使用的數據庫中斷開連接,其格式為:
SQLDisconnect( ConnectionID);
其中:ConnectionID為SQLConnect()產生的連接號,
2.3 兩種方法之間的比較
相比較而言,FileWriteFields函數方法相對簡單,只要安裝了“組態王”即可,但需要占用軟件相當的點數;利用SQL方法相對復雜一點,而且需要安裝如Access等支持SQL的數據庫軟件,但不占用組態軟件的點數,在具體應用當中可根據需要和實際情況進行選擇。
3. 一個例子
下面通過一個例子來介紹這兩種方法的具體應用。該例子的目的是將現場的壓力信號采集到MATLAB中對該信號進行分析。為簡單起見,本文僅畫出壓力信號的變化趨勢,表明可以在MATLAB中進行分析即可。
*步:將組態王實時數據庫采集到的壓力信號存到*.txt文件中。
為了方便隨時記錄,本文定義了一個內存離散型變量record,通過按鈕“開始記錄”和“停止記錄”將該變量置1和置0。
下面分別具體介紹利用FileWriteFields函數和SQL方法對組態王實時數據庫進行訪問。
(1) 利用FileWriteFields函數
本文利用FileWriteFields函數訪問組態王數據庫是在應用程序命令語言運行時窗口中編程實現的,具體腳本如下:
//數據記錄
if (本站點\record==1)
{
Tag1=本站點\$日期;
Tag2=本站點\$時間;
Tag3=本站點\壓力;
FileWriteFields(“f:\DATA\Record.txt”, 0, "Tag1", 3 );
}
(2) 利用SQL實現
建立一個SQL應按如下步驟:
1先在access中建立一個庫名為”SQL數據庫”的數據庫將其保存為:f:\DATA\SQL數據庫.mdb,并在SQL數據庫中建立一個表名為“監控表”的表,在字段名稱處分別鍵入“日期”,“時間”,“壓力”,數據類型前兩個為“文本”,zui后一個為“數字”,保存該表。然后在打開的控制面板中的“32bit ODBC”中增加(ADD)一個Microsoft Access Driver數據源,其源名為“SQL數據庫”。所指向(select)數據庫的路徑為:f:\DATA\SQL數據庫.mdb。
2在組態王工程瀏覽器中建立一個名為BIND的記錄體,把組態王中的變量和數據庫“監控表”中所對應字段名稱增加到記錄體中,如表1所示。
表1 所創建記錄體BIND
3使用下列指令建立組態王和源名為“SQL數據庫”的數據源的連接,此例中為在應用程序命令語言中啟動時的命令:
//建立SQL連接
SQLConnect(DeviceID, "dsn= SQL數據庫");
4在“監控表”中不斷插入記錄,此例中為在應用程序命令語言運行時的命令:
//SQL插入記錄
if (本站點\record==1)
{
SQLInsert( DeviceID, "監控表", "BIND" );
}
5在退出程序時斷開連接,此例中在應用程序命令語言停止時實現:
//斷開SQL連接
SQLDisconnect( DeviceID);
6在數據記錄結束后,將該文件另存為txt文件。
第二步:將*.txt文件中的數據導入到MATLAB中,并存為*.mat文件。
本步驟比較簡單,利用MATLAB中File菜單下Import Data…命令利用向導即可實現,因此不再詳述。
第三步:對壓力信號進行分析。
圖1 MATLAB中繪制的壓力曲線
為簡單起見,本文僅利用plot命令繪出壓力的變化趨勢,所得結果如圖1所示。
4. 總結
本文首先介紹了組態王環境下訪問其數據庫的兩種方法:FileWriteFields函數訪問和SQL訪問,并對二者進行了比較;然后針對組態軟件數據分析能力相當薄弱的不足,提出利用以上兩種方法將組態王數據庫中數據取出,送到其他具有強大數據分析能力的軟件如MATLAB中進行分析;zui后,本文利用一個例子說明本方法切實可行,確實彌補了組態軟件在數據分析方面的不足,為其在更大范圍內得以廣泛應用打下了基礎。
隨著工控組態軟件功能的不斷完善以及可靠性的不斷提高,其在工業中得到了非常廣泛的應用。但是,盡管組態軟件具有強大的實時數據庫功能,其數據分析能力卻十分薄弱,這一點在一定程度上限制了其在一些領域尤其是在實驗室中的應用。本文針對這種情況,以組態王為例,提出利用組態軟件數據庫訪問的技術將數據庫中數據取出,送到其他具有數據分析能力的軟件(如MATLAB)中去,從而彌補了組態軟件在數據分析方面的不足,為其在更大范圍內的應用提供了切實可行的方法。
2. 訪問組態王數據庫的兩種方法
在本文中主要介紹和使用了兩種方法訪問組態王數據庫:FileWriteFields函數訪問和SQL訪問。通過應用這兩種方法,將組態王實時數據庫中的實時數據直接取出,從而使其他軟件可以對數據進行分析。這兩種方法是并行的,任何一種都可以完成對組態王數據庫的訪問。
下面對FileWriteFields函數和SQL分別予以介紹。
2.1 FileWriteFields()函數簡介[2]
該函數的功能是往文件寫入csv(逗號分隔變量)記錄。其調用格式為:
FileWriteFields(Filename, FileOffset, StartTag, NumberOfFields);
其中,Filename為要寫的文件,若文件不存在,則創建它;FileOffset為寫文件的起始位置(若FileOffset為0,此函數將寫到文件末尾;若為1,則寫到開頭);StartTag*個數據項的變量名稱(此變量名必須以一個數字結尾),此參數必須是一個表明變量名的字符串(而非實際的變量本身,比如變量名為MyTag1,就需要給出“MyTag1”或MyTag1.name,而不僅僅是MyTag1);NumberOfFields要寫的字段數目(此文件的每條記錄中以逗號隔開的字段的字段數目)。
2.2 SQL簡介
SQL(Structured Query Language)是一個通用的、功能*的關系數據庫語言,由于其功能豐富、語言簡單、使用方法靈活,已經成為關系數據庫的標準語言[3]。
組態王SQL訪問功能是為了實現組態王和其他ODBC數據庫之間的數據傳輸。它包括組態王SQL訪問管理器和SQL函數:SQL訪問管理器用來建立數據庫列和組態王變量之間的,通過表格模板在數據庫中建立表格,通過記錄體建立數據庫表格列和組態王之間的;SQL函數可以在組態王的任意一種語言命令中調用,這些函數用來創建表格、插入刪除記錄等。[1]
下面介紹一下幾個主要的SQL函數[2]:
(1)SQLConnect()
SQLConnect用于連接組態王和數據庫,其格式為:
SQLConnect( ConnectionID, “ConnectString”);
其中:ConnectionID為SQLConnect()產生的連接號,ConnectString為連接語句。連接語句格式如下:“DSN=data source name [; attribute= value [;attribute= value]…]”。
(2)SQLInsert()
SQLInert用于使用記錄體中定義的連接在表格中插入一個新的記錄,其格式為:
SQLInsert( ConnectionID, TableName, BindList);
其中:ConnectionID為SQLConnect()產生的連接號,TableName為表格名,BindList為記錄體。
(3)SQLDisconnect()
SQLDisconnect用于從使用的數據庫中斷開連接,其格式為:
SQLDisconnect( ConnectionID);
其中:ConnectionID為SQLConnect()產生的連接號,
2.3 兩種方法之間的比較
相比較而言,FileWriteFields函數方法相對簡單,只要安裝了“組態王”即可,但需要占用軟件相當的點數;利用SQL方法相對復雜一點,而且需要安裝如Access等支持SQL的數據庫軟件,但不占用組態軟件的點數,在具體應用當中可根據需要和實際情況進行選擇。
3. 一個例子
下面通過一個例子來介紹這兩種方法的具體應用。該例子的目的是將現場的壓力信號采集到MATLAB中對該信號進行分析。為簡單起見,本文僅畫出壓力信號的變化趨勢,表明可以在MATLAB中進行分析即可。
*步:將組態王實時數據庫采集到的壓力信號存到*.txt文件中。
為了方便隨時記錄,本文定義了一個內存離散型變量record,通過按鈕“開始記錄”和“停止記錄”將該變量置1和置0。
下面分別具體介紹利用FileWriteFields函數和SQL方法對組態王實時數據庫進行訪問。
(1) 利用FileWriteFields函數
本文利用FileWriteFields函數訪問組態王數據庫是在應用程序命令語言運行時窗口中編程實現的,具體腳本如下:
//數據記錄
if (本站點\record==1)
{
Tag1=本站點\$日期;
Tag2=本站點\$時間;
Tag3=本站點\壓力;
FileWriteFields(“f:\DATA\Record.txt”, 0, "Tag1", 3 );
}
(2) 利用SQL實現
建立一個SQL應按如下步驟:
1先在access中建立一個庫名為”SQL數據庫”的數據庫將其保存為:f:\DATA\SQL數據庫.mdb,并在SQL數據庫中建立一個表名為“監控表”的表,在字段名稱處分別鍵入“日期”,“時間”,“壓力”,數據類型前兩個為“文本”,zui后一個為“數字”,保存該表。然后在打開的控制面板中的“32bit ODBC”中增加(ADD)一個Microsoft Access Driver數據源,其源名為“SQL數據庫”。所指向(select)數據庫的路徑為:f:\DATA\SQL數據庫.mdb。
2在組態王工程瀏覽器中建立一個名為BIND的記錄體,把組態王中的變量和數據庫“監控表”中所對應字段名稱增加到記錄體中,如表1所示。
表1 所創建記錄體BIND
3使用下列指令建立組態王和源名為“SQL數據庫”的數據源的連接,此例中為在應用程序命令語言中啟動時的命令:
//建立SQL連接
SQLConnect(DeviceID, "dsn= SQL數據庫");
4在“監控表”中不斷插入記錄,此例中為在應用程序命令語言運行時的命令:
//SQL插入記錄
if (本站點\record==1)
{
SQLInsert( DeviceID, "監控表", "BIND" );
}
5在退出程序時斷開連接,此例中在應用程序命令語言停止時實現:
//斷開SQL連接
SQLDisconnect( DeviceID);
6在數據記錄結束后,將該文件另存為txt文件。
第二步:將*.txt文件中的數據導入到MATLAB中,并存為*.mat文件。
本步驟比較簡單,利用MATLAB中File菜單下Import Data…命令利用向導即可實現,因此不再詳述。
第三步:對壓力信號進行分析。
圖1 MATLAB中繪制的壓力曲線
為簡單起見,本文僅利用plot命令繪出壓力的變化趨勢,所得結果如圖1所示。
4. 總結
本文首先介紹了組態王環境下訪問其數據庫的兩種方法:FileWriteFields函數訪問和SQL訪問,并對二者進行了比較;然后針對組態軟件數據分析能力相當薄弱的不足,提出利用以上兩種方法將組態王數據庫中數據取出,送到其他具有強大數據分析能力的軟件如MATLAB中進行分析;zui后,本文利用一個例子說明本方法切實可行,確實彌補了組態軟件在數據分析方面的不足,為其在更大范圍內得以廣泛應用打下了基礎。
全年征稿/資訊合作
聯系郵箱:1271141964@qq.com
免責聲明
- 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
- 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
- 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
- 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
2025中國鄭州衡器與計量技術設備展覽會
展會城市:鄭州市展會時間:2025-11-07