王彩玲 霍文穎 王亭嶺 劉慶華
當今,人們對食品安全的要求越來越高,對畜產(chǎn)品的品質(zhì)要求越來越嚴格,飼料標準也正處于逐步的修訂之中。由于市場行為、地區(qū)差異、季節(jié)變化、原料儲運方式的變化,原料數(shù)據(jù)也經(jīng)常發(fā)生變化。因此,飼料配方的及時調(diào)整是保證配合飼料質(zhì)量的前提。隨著我國工業(yè)自動化的發(fā)展及勞動成本的提高,自動配料系統(tǒng)在飼料工業(yè)的應用越來越廣泛。使用自動配料系統(tǒng)不僅能夠保證稱量精度,而且可以實現(xiàn)多批次、連續(xù)生產(chǎn),既減輕了工人的勞動強度,又保證了產(chǎn)品的質(zhì)量。目前我國飼料行業(yè)中自動配料系統(tǒng)主要有兩大類:PC機+數(shù)據(jù)采集卡+配料攪龍點動配料方式;PC機+PLC控制方式[1]。第一種方式主要由計算機、數(shù)據(jù)采集卡、外圍繼電器、接觸器等外圍電路組成。控制形式簡單,隨機誤差較大。由于這種形式為集中式控制,整體可靠性沒有很大改善,且網(wǎng)絡通信能力不足;第二種方式采用分布式控制集中式管理的形式,上位機采用工業(yè)PC機管理,下位機采用PLC控制。它結合了計算機高性能的優(yōu)勢和PLC高可靠性的特點,有效避免了計算機集中控制的缺陷[2]。本設計針對這種分布式控制集中式管理的形式,重點研究其網(wǎng)絡通信能力,實現(xiàn)飼料配方的遠程及時調(diào)整與現(xiàn)場設備的實時監(jiān)控。
在配合飼料生產(chǎn)過程中,由PLC控制現(xiàn)場所有設備,PLC通過自由口與現(xiàn)場監(jiān)控服務器(現(xiàn)場監(jiān)控計算機或稱上位機)進行通信。現(xiàn)場監(jiān)控服務器實時監(jiān)控PLC的運行狀況,并在線記錄生產(chǎn)數(shù)據(jù),提供報警、數(shù)據(jù)匯總查詢、文檔打印等。遠程監(jiān)控客戶端通過局域網(wǎng)遠程監(jiān)控現(xiàn)場服務器,實現(xiàn)生產(chǎn)配方的遠程調(diào)整及生產(chǎn)過程的遠程監(jiān)控與管理。自動配料生產(chǎn)線遠程監(jiān)控系統(tǒng)結構如圖1所示。
圖1 自動配料生產(chǎn)線遠程監(jiān)控系統(tǒng)結構
圖1中現(xiàn)場監(jiān)控服務器運行的監(jiān)控程序通過串口將生產(chǎn)配方數(shù)據(jù)下傳到PLC CPU226,PLC根據(jù)配方參數(shù)及下料順序,控制變頻器啟動配料攪龍工作,配料攪龍將各原料倉內(nèi)原料按序分別不斷推入配料秤內(nèi)。安裝于配料秤上的稱重傳感器將重量信號經(jīng)A/D模塊轉(zhuǎn)換為數(shù)字信號送給PLC,并與事先存儲的飼料配方值不斷地進行比較,直到配方所要求的重量為止。然后打開秤斗門,將稱好的原料放入混合機,同時投入配方所需其他精料,并啟動定時,計算混合機內(nèi)原料的混合時間。與此同時,上面配料過程繼續(xù)進行。在預定的混合時間達到后,打開混合機門,將混合好的料放出,交給下道工序處理。
根據(jù)生產(chǎn)工藝要求編寫相應的PLC控制程序,控制現(xiàn)場設備并實現(xiàn)與上位機的通信。程序設計的難點是與上位機通信程序的實現(xiàn)。S7-200 CPU上的通信口是與RS-485兼容的9針D型連接器,通過PC/PPI電纜實現(xiàn)RS-485與PC機上RS-232C的硬件連接。S7-200支持的自由口通信可由用戶控制串行通訊接口,實現(xiàn)用戶自定義的通訊協(xié)議。
計算機與PLC通信時,為了避免通信中的各方爭用通信線,一般采用主從工作方式,只有主機才有權主動發(fā)送請求報文,從接收到請求報文后返回響應報文。具體實現(xiàn)方法有兩種:采用發(fā)送指令(XMT)和接收字符中斷事件進行主從式通信;采用發(fā)送指令(XMT)和接收指令(RCV)進行主從式通信[3]。
本設計中PLC采用發(fā)送指令(XMT)和接收字符中斷進行主從式通信,PLC為主機,計算機為從機。PLC主程序首次掃描時,執(zhí)行一次發(fā)送指令,目的是產(chǎn)生發(fā)送完成中斷事件9,事件9的中斷程序中分別啟用字符接收中斷事件8和定時中斷事件10;在定時期間,PLC使用字符中斷監(jiān)視通信端口上的數(shù)據(jù),若收到計算機傳來的一個字符,會產(chǎn)生字符接收中斷事件8,可以在連接的中斷程序中處理此控制字符,此時要禁止中斷事件8和中斷事件10,以便中斷處理程序不被打斷。注意:在較高的波特率下(38.4~115.2 kbit/s)使用接收字符中斷時,中斷之間的時間間隔會非常短,例如在38.4 kbit/s時為260 ms,115.2 kbit/s時為86 ms,這時應確保所編寫的中斷服務程序足夠短,不會丟失字符。中斷程序中還要執(zhí)行發(fā)送指令才能回到事件9所連接的中斷程序中;若在定時期間未收到計算機傳來的字符,定時時間到后,會產(chǎn)生定時中斷事件10,可在事件10的中斷程序中執(zhí)行發(fā)送指令并禁止中斷事件8和中斷事件10,實現(xiàn)PLC定時發(fā)送狀態(tài)信息,發(fā)送完成后回到事件9的中斷程序中,開始下一個循環(huán)。
服務器監(jiān)控程序通過Visual C++.NET設計開發(fā)。通過使用MSComm控件實現(xiàn)與PLC通信。MSComm控件是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,MSComm控件支持應用程序?qū)Υ诘脑L問。首先在監(jiān)控程序的主對話框中插入MSComm控件,然后右鍵單擊MSComm控件,在彈出的菜單中選中添加變量便可方便的實現(xiàn)數(shù)據(jù)的收發(fā)。監(jiān)控程序通過響應OnComm事件完成現(xiàn)場設備狀態(tài)數(shù)據(jù)的實時采集;通過執(zhí)行MSComm控件變量的成員函數(shù)put_Output()實現(xiàn)配方數(shù)據(jù)的發(fā)送。
現(xiàn)場服務器與遠程客戶端監(jiān)控程序通過Visual C++.NET設計開發(fā),Visual C++.NET是使用C++開發(fā)語言創(chuàng)建基于Microsoft Windows和.NET的應用程序、動態(tài)Web應用程序和XML Web服務的綜合開發(fā)語言平臺。設計采用網(wǎng)絡編程中最常用的客戶端/服務器模型,這種模型是一種非對稱式編程模式。該模式的基本思想是把集中在一起的應用劃分成為功能不同的兩個部分,分別在不同的計算機上運行,通過它們之間的分工合作來實現(xiàn)一個完整的功能。在這種模式中服務器程序用來響應并為客戶提供固定的服務;客戶端程序用來向服務器提出請求或要求某種服務。
本文選取了基于TCP/IP的客戶端/服務器模型和面向連接的流式套接字。其通信原理為:服務器端和客戶端都必須建立通信套接字,首先服務器端先進入監(jiān)聽狀態(tài),然后客戶端套接字發(fā)出連接請求;服務器端收到請求后,創(chuàng)建另一個套接字與客戶端通信,實時進行數(shù)據(jù)傳輸?,F(xiàn)場服務器監(jiān)控程序是基于微軟基礎類MFC(Microsoft Foundation Classes)的單文檔框架,由于現(xiàn)場服務器監(jiān)控程序需要和遠程客戶端監(jiān)控程序進行實時信息傳輸,在使用MFC應用程序向?qū)?chuàng)建項目時,應在高級功能中選定使用“Windows套接字”。在面向連接的流式通信模式下,MFC提供的CSocket類通常會與CArchive類結合,以串行化的方式發(fā)送和接收數(shù)據(jù),使網(wǎng)絡編程變得像讀寫文件一樣簡單[4]。CArchive類扮演的是一個數(shù)據(jù)緩沖區(qū)的角色,它通過CSocketFile類與一個套接字相聯(lián)系,只要建立兩者的聯(lián)系,然后往“數(shù)據(jù)緩沖區(qū)”裝入數(shù)據(jù)與取出數(shù)據(jù)即可。本文設計的CSocket編程模型見圖2。
現(xiàn)場運行設備的狀態(tài)顯示與配方數(shù)據(jù)的管理是上位機監(jiān)控程序設計的重點。PLC通過自由口協(xié)議實現(xiàn)與上位機監(jiān)控程序的通信,上位機監(jiān)控程序使用的MSComm控件支持應用程序?qū)Υ诘脑L問。通過響應OnComm事件完成現(xiàn)場設備狀態(tài)信息的實時采集;通過執(zhí)行MSComm控件變量的成員函數(shù)put_Output()下傳配方數(shù)據(jù)給PLC。
現(xiàn)場服務器監(jiān)控程序的數(shù)據(jù)庫開發(fā)使用MFC的ODBC直接讀寫Excel文件數(shù)據(jù)。遠程客戶端將配方數(shù)據(jù)通過Excel文件的形式傳送給上位機。上位機監(jiān)控程序利用Excel的“規(guī)劃求解”功能設計最佳飼料配方的方法,實現(xiàn)了隨飼養(yǎng)標準、飼料原料的種類和價格的變化而變化的最佳飼料配方的設計[5]。Excel文件作為飼料配方數(shù)據(jù)庫,需要使用CDatabase類創(chuàng)建,利用其ExecuteSQL(LPCTSTR lpszSQL)成員函數(shù)可以方便地使用SQL語句對Excel文件進行讀寫、查詢及管理。Excel文件一般大于10 kB,如果直接傳輸往往會丟失數(shù)據(jù)。為了能夠準確無誤的發(fā)送較大的數(shù)據(jù)文件,采用的方法為:首先定義一個文件信息屬性結構體(發(fā)送端和接收端都需要定義);然后先發(fā)送此結構體,再循環(huán)讀文件,循環(huán)傳送;接收端先接收文件結構體,再循環(huán)寫文件,完成大文件的傳輸。
現(xiàn)場服務器監(jiān)控程序除了要響應遠程客戶端監(jiān)控程序發(fā)來的控制命令外,還實現(xiàn)了以下功能:料倉數(shù)據(jù)的采集,趨勢圖的繪制,歷史數(shù)據(jù)的管理,報警動畫的實現(xiàn)等。服務器監(jiān)控程序使用的MSComm控件支持應用程序?qū)Υ诘脑L問。監(jiān)控程序通過響應OnComm事件完成PLC監(jiān)控數(shù)據(jù)的實時傳輸?,F(xiàn)場服務器創(chuàng)建非模式對話框時,自動執(zhí)行OnInitDialog()初始化函數(shù),完成MSComm控件的初始化,同時構造套接字,開啟一個通信端口,并偵聽遠程客戶端套接字的連接請求,如果連接成功,服務器將受控于客戶端。串口數(shù)據(jù)的讀取設置在主線程中實現(xiàn),趨勢圖的繪制需要單獨開啟一個線程來完成,以達到數(shù)據(jù)接收與曲線繪制的同步。報警動畫的實現(xiàn)也需要開啟一個線程來實現(xiàn)。兩個輔助線程都是通過響應定時器OnTimer()函數(shù)來創(chuàng)建的。現(xiàn)場服務器監(jiān)控界面如圖3所示。
為了能夠遠程實時監(jiān)控現(xiàn)場設備的運行狀況,需要在遠程計算機上運行遠程客戶端監(jiān)控程序。遠程客戶端監(jiān)控程序利用局域網(wǎng)絡可以實現(xiàn)對多個車間的現(xiàn)場服務器進行控制與管理,提供管理級監(jiān)管的效率。常用的局域網(wǎng)絡一般是基于TCP/IP協(xié)議的工業(yè)以太網(wǎng),圖2中CSocket類的使用使遠程監(jiān)控易于實現(xiàn)。遠程客戶端監(jiān)控程序?qū)崿F(xiàn)的功能包括:讀取現(xiàn)場服務器的監(jiān)控畫面,讀取服務器的歷史數(shù)據(jù),鎖定服務器界面,解鎖服務器界面,注銷服務器,重啟服務器,關機服務器等,為進一步實現(xiàn)現(xiàn)場無人值守奠定基礎。不同監(jiān)控命令通過給字符串變量賦不同的值相區(qū)別,服務器接收字符串變量后,根據(jù)不同的值來響應不同的功能。讀取現(xiàn)場服務器監(jiān)控畫面的實現(xiàn)過程為:發(fā)送屏幕截圖命令給服務器,服務器監(jiān)控程序接收命令后利用嵌套類實現(xiàn)屏幕拷貝并將圖片及時傳輸給客戶端,客戶端顯示圖片便可及時監(jiān)控現(xiàn)場設備的運行情況。圖片的實時傳輸是設計的難點,可采用如下方法加以實現(xiàn):
首先采用屏幕切分法將截屏圖像切分成大小相同的各種網(wǎng)格,然后和前一時刻的截屏圖像相比較,最后將更新的網(wǎng)格數(shù)據(jù)通過哈夫曼編碼進行壓縮后傳輸給遠程監(jiān)控計算機。服務器截屏后保存的文件為位圖(BMP)格式,位圖為非壓縮圖片,不失真但文件較大,一般為2~6 MB左右。對于大文件的網(wǎng)絡傳輸系統(tǒng)會有一定延時,實驗測試的延時時間為3~7 s,達不到實時性的要求。故需要對位圖進行無損壓縮,然后傳輸壓縮文件,再通過客戶端解壓縮后顯示。但如果對整個位圖進行無損壓縮后傳輸,在客戶端解壓后顯示,采用常用的哈夫曼編碼進行壓縮→傳輸→解壓所需要的時間在1~5 s,同樣不能滿足實時性的要求。哈夫曼編碼是可變字長編碼(VLC)的一種,常用于無損壓縮。為解決這個問題,在程序中采用了屏幕切分法,將截屏后的圖像劃分網(wǎng)格,屏幕的刷新以網(wǎng)格為單元,然后與前次圖像比較,相同的刪除,不同的留下。對留下的網(wǎng)格進行壓縮,將壓縮后的圖像進行傳輸;客戶端接收到數(shù)據(jù)后,先對其解碼,然后再將解碼后的數(shù)據(jù)加到指定網(wǎng)格形成新圖像,顯示于視圖中。在計算哈夫曼編碼表時需要對原始圖像數(shù)據(jù)掃描兩遍:第一遍掃描要精確地統(tǒng)計出原始圖像中每個灰度值出現(xiàn)的概率;第二遍是建立哈夫曼樹并進行編碼。此方法在第一次圖像傳輸時需要傳輸整個位圖文件,會有一定的延時,此后傳輸并顯示的時間小于1 s,圖像顯示無失真。
隨著飼料廠自動化程度的不斷提高,電氣設備的安全運行對飼料生產(chǎn)顯得尤為重要?;赑LC的自動配料遠程監(jiān)控系統(tǒng)著力實現(xiàn)飼料配方的遠程及時調(diào)整,在不影響飼料質(zhì)量的前提下,可以積極應對各種原料上漲帶來的成本問題。PLC的使用,保證了設備的安全運行[6],良好的監(jiān)控管理軟件,便于及時排除故障,對飼料廠的生產(chǎn)發(fā)揮了積極作用。遠程監(jiān)控功能的實現(xiàn)為多車間無人值守,遠程集中監(jiān)控各種飼料機械的安全運行提供技術支持。該系統(tǒng)在河南華典飼料科技有限公司投運以來,運行效果良好,極大地改善了工作環(huán)境,降低了勞動強度,對產(chǎn)品質(zhì)量和生產(chǎn)效益都有較大的提高。
[1] 楊友平,等.配合飼料生產(chǎn)線電氣系統(tǒng)的改造[J].農(nóng)機化研究,2005,5(9):234-236.
[2] 徐毅峰.深化自動控制技術在保證飼料質(zhì)量中的應用[J].糧食與食品工業(yè),2004,2(4):41-44.
[3] 陳建明,王亭嶺,孫標編著.電氣控制與PLC應用(第二版)[M].北京:電子工業(yè)出版社,2010,1:280-281.
[4] 何煒等編著.Visual C++.NET2003程序設計[M].北京:冶金工業(yè)出版社,2004,4:247-261.
[5] 鐘志光,盧君,劉偉榮編著.Visual C++.NET數(shù)字圖像處理實例與解析[M].北京:清華大學出版社,2003,6:530-538.
[6] 李浩權,胡光華.基于PLC和觸摸屏的氣流膨化機控制系統(tǒng)[J].中國農(nóng)機化,2010,227(1):98-101.