摘 要:某塑膠有限公司是專業生產手術等專用手套的億元年產值企業。整個工廠多達26條生產線。由于生產產量都是依靠人工進行統計,所以在實際操作過程中,出現產品缺失導致投入的原料量和產出的成品量嚴重失衡,急需對整個工廠的產量進行準確的計量,因此項目基于性價比極高的臺達PLC和組態王界面軟件成功的開發出產量監控查詢系統,得到了客戶的贊揚。
關 鍵 字:臺達PLC 組態王 數據庫 數據的查詢打印 報表組態
1引言
產量監控查詢系統系統對整個工廠所有生產線進行實時監控,對每一條生產線的產量進行實時的存儲,存儲的數據通過組態王連接PLC,將PLC中掉電保持區的數據讀到組態王自定義的相應變量當中,每分鐘通過標準的SQL語言對數據進行存儲(每分鐘向SQLSERVER數據庫中存儲26條數據,即26條生產線的當前產量)。用戶可以通過:日期、時間、時間段、車間、生產線對任何車間、任何生產線進行產量的查詢;能夠對任何車間、任何生產線進行月產量的統計。同時在查詢出滿足條件的記錄后,將結果通過報表的組態顯示在相應的表格當中,可以對該結果進行存儲和打印。
2系統設計
2.1系統框圖(圖2)
圖1 產量監控查詢系統畫面
2.2設備選型設計
3 系統分析
3.1功能要求
可以任意查詢一車間、二車間任何生產線(共26條生產線)任何時段的產量。具體明
細如下:
(1)每條生產線產量的數據至少能夠保存四個月的儲存期,以便對歷史數據進行查詢。
(2)要求能夠查詢每條生產線任意每月、任意每天、任意每小時、任意每分鐘的產量。
(3)要求能夠對任意每條生產線在任意時段的產量進行查詢。
(4)查詢出來的任何結果要以特定的格式在報表中進行組態,同時將結果打印。
(5)各生產線任意每月產量、任意每天產量、任意每小時產量、任意每分鐘產量可以在電腦上用柱狀圖、實時趨勢曲線的形式表現出來
3.2查詢方式
(1)能夠按照日期進行查詢(格式:Year/Month/Day)
(2)能夠按照時間進行查詢(格式:Hour/Minute/Second)
(3)能夠按照生產線進行查詢(一車間:1-1、1-2;2-1,2-2;3-1,3-2;4-1,4-2;
5-1,5-2;6-1,6-2;7-1,7-2;8-1,8-2 二車間:1-1,1-2;2-1,2-2;3-1,3-2;4-1,4-2,4-3,4-4)
(4)能夠按照任意時間段進行查詢(格式:Year/Month/Day Hour/Minute/Second To Year/Month/Day/ Hour/Minute/Second)
(5)能夠按照班次進行查詢(格式:早班,中班,晚班)早班:7:30—15:30
中班:15:30—23:30 晚班:23:30—7:30
(6)能夠查詢任意每月任意車間、任意生產線的產量
(7)能夠運用<1>——<5>的各種不同的排列組合進行復雜的查詢
4難點及實現方法
4.1 海量數據管理
兩個車間共26條生產線,每分鐘要有26條記錄生成,每分鐘向數據庫插入26條記錄。
該系統全天24小時工作,不允許停。所以一天的數據量為37440條記錄。每月的數據量為1160640條記錄。如果要存儲四個月,則數據量為4642260條記錄。數據量是相當龐大的。硬盤的數據存儲接近2-3G,不僅會造成在查詢時,系統資源嚴重被占用,同時普通的數據庫如ACCESS的表格沒有能力管理如此龐大的數據系統。ACCESS在管理如此龐大的數據時,不僅系統會造成不穩定,同時會出現不可預料的情形。所以只能尋找能夠管理大型數據系統的數據庫,因此可以選擇SQLSERVER或Oracle。
4.2 基于WindowsXP創建SQL服務器的新數據源
組態王支持對標準的數據庫進行數據的插入、選擇、刪除等基本的操作。同時支持標準的SQL語言。靈活的運用組態王提供的SQL函數使組態王通過ODBC(開放性的數據源)配合標準的SQL語言對數據庫進行各種簡單和復雜的操作。
在Win2000/Winnt/Winxp等操作系統下,必須正確的進行設置:從控制面板中
雙擊性能和維護,如圖3所示。以WindowsXP為例說明。
第一步:在控制面板下選擇 管理工具->ODBC數據源,雙擊圖標 出現圖2界面。
圖2 ODBC數據源管理器界面
第二步:在用戶DSN 選項卡片上,單擊添加按鈕,出現 創建新數據源 對話框,選擇SQL Server(圖3)。
圖3 創建新數據源
第三步:單擊第二步的完成按鈕,出現創建到SQL Server的新數據源。如圖4所示。
圖4 創建SQL服務器的新數據源(1)
輸入數據源名稱、數據源描述和SQL Server 所在的服務器名稱或者IP地址。服務器名稱可以是SQL Server所在的機器名稱,也可以是IP地址。單擊下一步按鈕。
第四步:選擇登錄SQL Server時的身份驗證方式。并輸入登錄SQL Server時所用到的用戶名和密碼。如圖5所示。
圖5創建SQL服務器的新數據源(2)
這里的用戶名和密碼是在SQL Server中建立的。在SQL Server數據庫中選擇 安全性->登錄,新建用戶,如圖6所示。
圖6創建SQL服務器的新數據源(3)
第五步
一定要選擇 選項,否則默認數據庫是master。然后選擇您想要連接的數據庫。其余的按
默認設置,如圖7所示。然后單擊下一步按鈕。
圖7創建SQL服務器的新數據源(4)
第六步:按默認設置,單擊完成按鈕(圖8)。
圖8創建SQL服務器的新數據源(5)
第七步:圖9給出了數據庫連接的摘要信息,如果想測試一下是否能夠連接到數據庫,可以單擊“測試數據源”按鈕,會出現測試結果。
圖9創建SQL服務器的新數據源(6)
單擊確定完成連接。接下來的工作就是在組態王王建立記錄體、表格模板。其中連接數據庫的時候,一定要輸入和剛才數據源名稱一致的DSN。如 dsn = wuhandsn.
4.3 表格名稱創新
即使使用大型的數據庫,SQL Server或Oracle,由于每天的數據量多達37440條記錄,
如果將一個月,甚至是四個月的記錄全部寫入同一個數據庫的同一個表格,則所有的數據量大的將使表格崩潰,即使數據庫能夠管理,查詢的速度也是可想而知的。將會非常的慢。經過作者反復的思索,想出了一個巧妙的辦法,就是以系統的日期作為當天的表格名稱。當系統時間為00:00:00時刻時,新建一個表格,通過SQLCreateTable( DeviceID, "TableName", "TemplateName" )函數建立不同的表格。因為組態王支持字符串函數,如下所示:
StrASCII( Char );// 此函數返回某一指定的文字變量首字符的ASCII值
StrChar( ASCII );// 此函數返回某一指定ASCII碼所對應的字符
StrFromInt( Integer, Base );// 此函數將一整數值轉換為另一進制下的字符串表示
StrFromReal( Real, Precision, Type );// 此函數將一實數值轉換成字符串形式
StrFromTime( SecsSince1-1-70, StringType );// 此函數將一個時間值轉換為字符串
StrInStr( Text, SearchFor, StartPos, CaseSens );// 此函數用于查找文本
StrLeft( Text, Chars );// 此函數返回指定文字變量的開始(或最左的)若干個字符
StrLen( Text );// 此函數返回某一指定的文字變量的長度
StrLower( Text );// 此函數將指定文字中的所有大寫字母轉換為小寫字母
StrMid( Text, StartChar, Chars );// 此函數從指定的位置開始,從一個文字變量中返回指定個數的字符
StrReplace( Text, SearchFor, ReplaceWith, CaseSens, NumToReplace, MatchWholeWords );
//此函數替換或改變所提供字符串的指定部分
StrRight( Text, Chars );// 此函數返回指定文字變量的最末端(或最右)若干個字符
StrSpace( NumSpaces );// 此函數在文字變量中或表達式中產生一個空格串
StrToInt( Text );// 此函數在文字變量中或表達式中產生一個空格串
StrToReal( Text );// 此函數將一個由數字組成的字符串轉換成一個能用于數字計算的實數值
StrTrim( Text, TrimType );// 此函數刪除文字變量中無用的空格
StrType( Text, TestType );// 此函數檢測文字變量的首字符以確定其是否為某一類型
StrUpper( Text );// 此函數將一指定文字變量中所有的小寫字符轉換成大寫字符
在組態王中建立內存型字符變量NameTable="A"+StrFromInt( \\本站點\$年, 10)+StrFromInt( \\本站點\$月, 10)+StrFromInt( \\本站點\$日, 10);NameTable的構成為字母A+系統日期。將系統提供的整型變量轉換成字符型變量。這樣可以在數據庫中建立每天的表格。每當系統日期由23:59:59跳變到00:00:00時,執行SQLCreateTable()函數,建立當天的表格,如圖10所示,在SQL Server中組態王建立了A2006619日的表格。
圖10建立當天的表格
4.4 基于Active控件的組態王條件查詢
為了完成如此復雜的查詢,使用了Active控件,因為組態王支持第三方控件,將所有<