柴處處,石春竹,蘭培霖,魏利卓,許井峰,柴琪琪
(1.中國電子信息產業集團有限公司第六研究所,北京 100083;2.中國能源建設集團山西省電力勘測設計院有限公司,山西 太原 030001;3.中國中車太原機車車輛有限公司,山西 太原 030027)
自從2013年德國在漢諾威展會上提出工業4.0的概念,各個國家相繼出臺了相關政策,我國于2017年提出了《中國制造2025發展綱要》。世界發達國家都在加緊部署發展智能制造,謀求在新一輪產業變革中保持領先優勢。智能工廠作為一個載體,讓參與智能制造的人、機器、資源能自然地相互溝通和協作。而制造執行系統(Manufacturing Execution System,MES)構成了智能工廠的核心,將底層自動化控制系統和上層管理系統連接起來。氫燃料電池作為未來新能源的發展方向,具有良好的發展前景。在相關政策和技術的支持下,氫燃料電池的商業化進程加快,相關產業迅速崛起。為積極應對氫燃料電池復雜多變的生產環境,企業急需采用MES系統變革現有的生產組織和管理模式,實現生產過程管控的數字化、透明化、精益化,做到生產過程精確、高效、科學的管理。位于MES系統和氫燃料電池自動化產線之間的數據采集系統,實現了二者之間的數據交互,并且有安全、實時、高效等優點[1]。
工業4.0的核心技術是信息物理系統(Cyber-Physical Systems,CPS),它通過集成先進的感知、計算、通信、控制等信息技術和自動控制技術,構建了物理空間與信息空間中人、機、物、環境、信息等要素相互映射、適時交互、高效協同的復雜系統,實現系統內資源配置和運行的按需響應、快速迭代、動態優化[2]。信息物理系統能夠將感知、計算、通信、控制等信息技術與設計、工藝、生產、裝備等工業技術融合,能夠將物理實體、生產環境和制造過程精準映射到虛擬空間并進行實時反饋,能夠作用于生產制造全過程、全產業鏈、產品全生命周期,能夠從單元級、系統級到系統之系統(SoS)級不斷深化,實現制造業生產范式的重構[3]。
數據采集系統是一個高度集成、開放和共享的數據服務平臺,能夠實現工廠內各類裝備、控制系統和信息系統的互聯互通,以及物料、產品、設備與人的無縫集成,是實現從單個機器、產線、車間到工廠的工業全系統互聯互通的重要基礎平臺,支撐數據流動,為打造萬物互聯的世界提供了基礎和前提,是構建智能制造的基石[4]。
數據采集系統實現了MES系統與氫燃料電池自動化產線各種設備之間的實時交互,系統架構設計如圖1所示。

圖1 系統架構
MES能通過信息傳遞,對從訂單下達到產品完成的整個生產過程進行優化管理。MES是處于計劃層和車間層操作系統之間的執行層,主要負責生產管理和調度執行[5]。
MES系統分為以下8個模塊:
(1)基礎數據:提供物料、產線、產品、員工、部門等基礎資料的維護,是整個制造執行系統運行的基礎。
(2)資源管理:對設備和工裝進行基礎數據維護、保養管理、故障報修等操作,這些資源是以后進行調度、派工等工作的基礎,并直接影響生產計劃安排。
(3)生產計劃:新建生產計劃并將計劃下達到車間。
(4)車間調度:對生產計劃進行調度,對訂單進行修改、拆分,并將訂單下發到產線。
(5)作業執行:在產線上對訂單進行開始、停止、工序監控等操作,并進行異常的反饋和解除,設備狀態、任務進度的查詢等操作[6]。
(6)過程質量:實現雙向追溯,即物料到產品的追溯,產品到物料、生產批次的追溯[7]。
(7)電子看板:支持各類LED、大屏等顯示終端,對產線的生產任務、直通率、異常等信息進行動態顯示。
(8)查詢分析:提供各類統計分析功能,提供各類報表、餅圖、柱狀圖等分析報告。
數據采集系統關鍵的數據庫表設計如圖2所示。

圖2 關鍵數據庫表設計
4.2.1網絡通信連接模塊
網絡通信連接模塊的主要功能是根據產線設備的通信方式,創建并配置該軟件和產線設備進行信息傳遞的通道[8],例如:如果軟件與設備之間采用基于TCP/IP協議網線接口,則該模塊會根據用戶設置創建相應的連接套接字(Socket)用于雙方通信;如果軟件與設備之間采用串行通信接口,則會創建并配置COM口通信。本模塊的任務包括:對本地的網絡接口進行初始化,并創建監聽線程,對接入的設備進行監聽,建立通信通道。
網絡通信連接模塊需要給其他模塊提供的接口如下:
void AcceptCallBack(IAsyncResult ar):接收回調函數;
void ReadCallback(IAsyncResult ar):異步接收數據的回調函數。
4.2.2數據接收模塊
數據接收模塊是在通信已經建立的基礎上,異步接收產線設備傳輸的數據,并根據不同的協議進行處理、拆分,將拆分后的數據分發給其他功能模塊。本模塊的任務包括:建立合適大小的接收數據緩存區,并根據不同的協議包頭,對數據進行截取;將截取的數據分發給相應的模塊進行處理操作。
數據接收模塊需要給其他模塊提供的接口如下:
void Decode_Cmd(string strReceive,out int machine_ty,out string Result):數據的解析函數。
4.2.3數據發送模塊
數據發送模塊是在通信已經建立的基礎上,實現不同通信的發送數據接口,供其他模塊調用[9]。本模塊的任務包括:實現網口Socket、串行接口的發送接口Send();實現發送消息的功能接口;實現發送命令的功能接口[10]。
數據發送模塊需要給其他模塊提供的接口如下:
void Send(string msg):基本的發送函數接口;
void SendMessage(string msg):軟件作為客戶端角色的時候使用該接口;
bool Send_Cmd(string strSend,int machine_ty):軟件作為服務器角色時使用該接口發送命令。
4.2.4數據解析模塊
數據解析模塊將從產線接收到的數據通過以下四個模塊解析成四類信息:工序信息、設備狀態信息、報警信息、產品清單信息。
(1)工序信息解析模塊
工序信息解析模塊的主要功能是接收設備上傳的工序數據并做解析,生成產品清單號,提取工序開始時間與結束時間,并將工序數據記錄存在OperationData表中。
工序信息解析模塊的處理流程如下:
①獲取工序數據信息,對工序數據進行解析;
②解析獲取工序號、工序開始標識、結束標識、工序檢測結果;
③第一個工序根據訂單號和流水號,生成產品清單號碼;
④其他工序獲取當前的產品清單號,并將訂單號、工序的開始信息、結束信息、檢測信息寫入OperationData表中。
(2)設備狀態信息解析模塊
設備狀態信息解析模塊的主要功能是對解析到的設備狀態進行處理,并記錄到數據庫中。解析獲取設備狀態信息,與記錄該設備狀態的全局變量進行比較來判斷該設備的狀態是否有變化,若有變化,將變化填寫至相應的數據庫表(FacilityStatus)中,并更新全局變量的數值。
設備狀態信息解析模塊的處理流程如下:
①接收到設備狀態信息,解析出設備站號、啟停狀態、運行狀態、開關機狀態;
②首次獲取到信息后,將各個設備狀態記錄到全局對象中;
③將接收到的狀態與全局對象中記錄的狀態相比較;
④如果一致,返回處理下一條狀態數據;
⑤若不一致,則在FacilityStatus表中新增加一條狀態信息,并更新全局對象中的內容。
(3)報警信息解析模塊
報警信息解析模塊的主要功能是接收報警數據,并對報警數據根據報警信息協議字段進行解析,同時將解析的報警數據進行處理,按照數據庫表要求,記錄至數據表中。
報警信息解析模塊的處理流程如下:
①接收報警數據,解析提取報警ID、報警內容、設備站號、解決狀態;
②根據報警ID和設備站號,查詢WarningTypeInfo表獲取設備ID;
③根據報警ID,查詢WarningInfo表中是否已經存在該報警;
④否,則將此報警信息插入到WarningInfo中,包含報警類型ID、設備ID、報警內容、報警時間、ReadTag為未讀;
⑤是,則判斷解決狀態是否為已經解決;
⑥若是,將此報警信息插入到WarningInfo中,包含報警類型ID、設備ID、報警內容、報警解決時間、Read-Tag為未讀;
⑦若否,不做處理,表明該信息已經存在,返回處理下一條報警數據。
(4)產品清單信息解析模塊
產品清單信息解析模塊的主要功能是獲取產品清單數據,解析訂單號、物料二維碼信息、物料類型信息,并生成產品清單號,將信息寫入InstallList數據庫表中。
物料二維碼信息的采集可以分為兩種方式,一種是由設備直接提供給服務器,由本采集軟件進行解析;另外一種方式是由設備提供掃碼信號,觸發軟件進行掃碼,由本軟件直接采集二維碼信息,然后再處理,記錄至數據庫中。
4.2.5數據處理模塊
數據處理模塊的功能是定時查詢MesInfo表,獲取最新的訂單信息,并將訂單生產信息下發給產線設備,信息包括訂單號、生產數量、產品類型和開始生產命令。
本模塊具體處理流程如下:
(1)定時查詢是否有新的生產訂單信息;
(2)若有,將訂單信息發送給設備開始生產;
(3)若無,繼續查詢,重復步驟(1)。
4.2.6數據庫操作模塊
數據庫操作模塊實現了軟件對數據庫的讀寫操作功能接口,包括數據庫訪問連接的建立,數據庫表的增加、刪除、修改、查詢接口函數,方便對數據庫的操作。本模塊的任務包括:實現數據庫連接建立的函數接口;實現針對不同數據表的增加、刪除、修改、查詢操作的通用接口和部分特定接口;根據數據庫表,建立并初始化數據庫表對應的字典類型的對象。
數據存儲模塊需要給其他模塊提供的部分接口如下:
public static int InsertDBdate(string Table,string Field,string date):插入數據庫表數據功能接口;
public static int UpdateDB(string Table,string ID,string Field):更新數據庫表;
public static List
public static int Insert_Message_into_DB(string Table,string Field,string Values):數據庫中插入信息;
public static DataSet get_message_from_table(string tableName):獲取信息;
public static DataSet get_message_idTop_from_table (string tableName):從數據庫表中獲取最大ID。
4.2.7日志模塊
日志模塊能夠記錄數據采集軟件中發生的事件信息,根據這些信息可以進行排錯,并優化軟件的性能。
為了解決MES系統與氫燃料電池自動化產線的數據交互問題,本文提出了數據采集系統的實現方法,并對實現的系統進行了測試。測試結果表明,該設計實現有效地滿足了數據交互的實時性、正確性,具有廣泛的應用前景。