蘇春燕 孟祥懿 崔建輝
(①天津中德應用技術大學,天津 300350;②天津市鑫聯建輝金屬制品有限公司,天津 301505)
信息物理系統(Cyber-Physical Systems,CPS)是一個綜合計算、網絡和物理環境的多維復雜系統,可實現大型工程系統的實時感知、動態控制和信息服務。基于CPS的智能制造系統已經成為國內外當前智能制造領域的研究熱點[1]。而數控機床是制造過程的基本單位,是智能化、信息化制造不可或缺的一部分[2],圍繞CPS技術體系,目前已有一些探索用計算機聯網數控機床進行運行監控、數據采集和數據處理的文章,但其中對利用信息技術自動記錄機床批量加工的產品編號、數量及時間等信息以供查詢和統計的研究很少,對運行監控與生產過程管理的綜合系統實現的研究也較少。本文設計的系統在這方面做了探索和研究,其采用C/S開發框架,使用Visual C#語言、配合SQL Server數據庫管理系統開發。保證只有在企業內安裝了系統程序的計算機才能監控機床運行并記錄和管理機床信息,因此能較好地保證系統運行和數據的安全性。

在調研企業生產實際情況和企業對信息系統需求基礎上,系統功能設計如圖1所示。其中①所標注的是只有超級用戶有權限使用的功能,而②所標注的是只有管理用戶有權限使用的功能,其他是所有用戶都能使用的功能。平臺的車間網絡分布拓撲結構如圖2所示,各個車間還可進一步聯網到總監控區統一監控。

“實現由計算機系統自動記錄每臺機床批量加工的產品編號、數量及時間等信息”是此系統的一個主要難點問題。系統對此問題的解決主要涉及以下3個方面。
機床批量加工信息的采集首先需要系統與機床聯網。由文獻[3-6]得到目前已有的數據采集方式主要有PLC采集、宏程序輸出、外加傳感器采集和開放式數控系統接口采集。其中開放式數控系統接口采集不需要附加硬件設備,可以實時采集不同類型機床信息,因此系統采用這種方式實現對機床聯網和數據讀取。
開放式數控系統接口,即數控機床的系統提供一組外部可以調用的開放函數,以實現外部系統對其聯網和信息讀寫。這里以FANUC系統數控機床為例介紹,這類系統提供了FOCAS開發包,調用其定義的函數可實現機床與計算機的聯網通信。這些開發包中的函數允許用 C++或C#程序調用。文獻[7]中給出了FOCAS開放接口函數的使用說明。如果程序中使用這種通信方式,需要將該開發包提供的一組類庫文檔(如:Fwlib32.dll)復制到項目存放其生成可執行文件的文件夾“……/debug”下,并將開發包提供的fwlib32.cs文件復制到項目的根目錄中[8],這個文件給出了包含訪問數控機床功能函數聲明的Focas1 類的定義,這些函數通常都定義為靜態、公有的,可以通過Focas1類名直接調用。另外,該類的定義中還包含相關類、類型和符號常量的聲明。
比如,Focas1 類中的函數cnc_allclibhndl3()的作用是聯網指定機床,其調用方式是:
Focas1.cnc_allclibhndl3(機床IP地址 , 機床端口號 , 延遲時間 , 連接帶回的庫句柄變量);
下面是判斷機床是否連接成功算法的偽碼描述:
ret= Focas1.cnc_allclibhndl3(……)
if (ret == Focas1.EW_OK)
顯示聯網成功消息框
else
顯示聯網失敗消息框
上面偽碼中Focas1.EW_OK 即為Focas1類中定義的符號常量EW_OK,其代表操作成功的標記值。
又如,Focas1 類中的函數cnc_freelibhndl()的常用調用方式是:
ret = Focas1.cnc_freelibhndl(連接帶回的庫句柄變量);
上面調用方式的作用是與“連接帶回的庫句柄變量”中指定的已聯網機床斷開連接,且將返回值存入變量ret。如果ret等于Focas1.EW_OK,也表示斷開成功。該函數參數對應cnc_allclibhndl3()函數的第4個參數。
難點問題的解決還需要根據機床加工產品的特點研究一個算法,來確定并保存特定機床批量加工產品的數量等信息。
機床加工的產品常通過多道工序完成,數控機床的一個CNC程序負責一道工序。由于數控加工的工序相對集中[9],即數控機床上產品(工件)一次裝夾所完成的工序中,可加工完成鉆、擴、絞和銑等這些普通

機床的多道工序,所以這里說的工序可能包括普通機床的多道工序。數控機床每運行一次CNC程序即可完成產品某道工序的加工,這里的加工產品數是指產品的某道工序完成加工的數量。機床通常是讓某個工序對應的CNC程序重復運行來批量完成產品此工序的加工。每個數控機床都有一個計數器,記錄和顯示該機床加工產品累計數量。這里開發的系統假設的工作流程是單人單日在一單臺機床完成一批產品的加工任務后記錄下此產品-工序在這個機床批量加工的數量,并在下個批量加工任務開始前將計數器人為清零。
算法整體設計思路是建立一個獨立線程,在此線程中根據數控機床數據表中記錄的每個機床的IP地址和端口號循環掃描、聯網各機床,并利用機床提供的開放接口函數從當前聯網機床計數器讀取累計加工產品數量,再將這個加工數量及工序CNC程序號、機床號和觀測時間自動存入“產品工序加工記錄信息表”,即history表,這些信息可在此系統的信息管理中修改或刪除等,其也可為統計工人工作量提供參考數據。
算法具體設計是,對于一臺機床如果出現計數器清零(即同一工序新讀取的加工數小于數據表中存儲的加工數)、運行的CNC程序改變或新的一天開始等條件,則表示一個新的批量加工開始。此時,系統就在history表中添加一條記錄此批量加工的CNC程序號、機床號和加工數量等的新記錄,否則表示繼續原來的批量加工,就只修改其對應記錄的加工數、觀測時間的信息。此外智能判斷和提示機床批量加工前計數器未清零的情況。
記錄一臺機床在一個時間段內、批量加工某產品工序的加工數算法的實現邏輯較復雜,這里用圖3流程圖說明。其設計前提是系統每掃描一遍所有機床的時間小于機床任意工序的裝夾與加工處理時間之和。
系統設計了機床的產品工序加工記錄信息表history、產品工序信息表proProcedure、工人信息表makerInfo和機床基本信息表cncInfo,通過這些表的關聯來記錄和處理機床的批量加工信息。其中history表包括ID、makerID、cncID、proProcedID、watchTime和quantity字段,它們依次表示記錄編號、工人編號、機床序號、產品工序編號、觀察時間和加工產品數量。
這里主要測試圖3算法邏輯是否正確。假設測試前“產品工序信息表proProcedure” 的具體內容如表1所示,而history表的記錄為空,“機床基本信息表cncInfo”所列機床中只有編號為2和3的2臺機床處于聯網狀態。

表1 系統產品工序信息數據表proProcedure 內容
測試基本操作:選擇“聯網所有機床”功能,此時系統循環重復掃描、聯網的所有機床,讀取當前聯網機床的產品加工信息存入history表,同時所有聯網機床的基本信息以圖4展示的列表信息顯示,如果單擊此圖窗口中的“停止掃描聯網所有機床”按鈕,即可停止循環掃描。進行邏輯功能測試前,首先啟動“聯網所有機床”功能。

邏輯測試1:將2臺數控機床加工產品工序的工序名均指定為“O1000”, 啟動機床加工工序,當兩臺機床計數器的值都為1時暫停機床,此時history表內容如表2所示。從表1可知工序名為“O1000”的“產品工序序號”是“1”,因此表2中proProcedID字段值為“1”。由于不能自動采集操作工人信息,這里 makerID的值設置為默認值“0000”, 可使用此軟件系統手動輸入真正操作機床的工人編號。

表2 運行測試1后history數據表內容
邏輯測試2:啟動2臺數控機床加工程序,當其計數器值均為5時暫停運行,此時由于在同一工作日,機床CNC程序沒有變化,仍然為“O1000”,計數器的值有所增加,系統判定這是同一次批量加工,所以history表中記錄的quantity字段值由“1”變為“5”。
邏輯測試3:將2臺數控機床的計數器值都清零,啟動加工程序,當兩臺機床計數器值為1時暫停運行,此時雖然機床的 CNC程序沒有變化,但計數器的值由5變1,減少了,系統就判定已經開始了一次新的批量加工,所以history表中會多出2條分別表示兩臺機床批量加工產品信息的新記錄,其quantity字段值為當時機床計數器的值“1”。
邏輯測試4:將2臺數控機床加工產品工序的工序名均指定為“O1001”, 并清零計數器的值,啟動機床加工,當兩臺機床計數器值為2時暫停機床,此時由于工序名改變,系統確定一次新的批量加工開始,所以history表中會再次多出兩條分別表示這兩臺機床批量加工產品信息的新記錄,其quantity字段值為當時機床計數器的值2。從表1可知工序名為“O1001”的“產品工序序號”是“2”,因此新增兩條記錄的proProcedID字段值為“2”。
邏輯測試5:啟動其中1臺數控機床的加工運行,當這臺機床計數器數值為3時暫停,此時由于工序名沒有變,兩臺機床當前計數器值均大于或等于以前的值,系統判定這是同一次批量加工,所以history表中測試4中新增的兩條記錄的quantity字段值一個不變,另一個變為新的機床計數器值“3”。
邏輯測試6:修改計算機系統時間為后面新的1天,將其中1臺機床加工產品工序的工序名指定為“O1002”, 另1臺工序名不變,清零這2臺機床計數器值,然后啟動機床加工運行,當其計數器值都為2時暫停機床運行,此時由于系統時間為后面新的1天,無論工序名是否改變,系統都判斷是一次新的批量加工,history表會又一次增加新的兩條信息來記錄這兩個新增批量加工。
邏輯測試7:將2臺機床加工產品工序的工序名指定為“O1007”, 再啟動機床加工運行,當計數器值為1時暫停,此時history表內容不變,且系統運行窗口下方文本區給出“該工序 CNC程序不存在”的提示信息。這是由于從表1可知系統沒有工序名為“O1007”的產品工序。
以上是算法邏輯主要的運行測試,其他如新的一次批量加工開始前沒有清零機床的計數器值時,系統會給出計數器可能沒有清零的提示信息,這里不再一一列舉測試結果。
(1)機床聯網狀態顯示與管理功能測試示例
運行系統的“機床信息管理與聯通顯示”功能,在其窗口單擊“顯示機床狀態”按鈕時,此按鈕變為“停止狀態掃描”,同時系統掃描、試聯網所有機床信息數據表中的機床,以不同圖標顯示其是否成功聯網。效果如圖5所示,顯示有2臺機床是亮色,表示其成功聯網,其他圖標為暗色,表示沒有聯通。

在圖5所示窗口,如果停止狀態掃描,所有按鈕就變為可用狀態,當單擊“修改機床”按鈕,出現“修改機床信息”窗口,此時如果單擊“機床型號編碼:”旁的下拉組合框,系統會彈出所有機床類型編碼和名稱的下拉列表供選擇,當選中下拉列表中的某個機床類型時,該類型機床的操作系統、主軸速度、生產廠家等基本信息會根據“機床型號信息”數據表的內容自動填充,因此這些文本框顯示為灰色不可編輯狀態,效果如圖6所示。

(2)運行與使用情況在線監測測試
如果在“機床選擇與聯網”功能中選擇聯網了3號機床,當運行系統的“機床使用與報警情況”,出現圖7所示窗口,顯示這臺機床的此類信息;當運行系統的“機床坐標與運行監控”,出現圖8所示窗口,顯示了這臺機床的此類信息。
(3)工人操作機床批量加工“產品-工序”情況查詢、統計測試
運行“工人操作機床加工產品記錄信息查詢”功能,出現其查詢窗口。從“制造人:”旁的下拉組合框中選擇“(004)張晨迪”列表項,并指定起止時間,單擊“查詢”按鈕,出現圖9所示查詢效果。



運行“工人操作機床加工產品記錄信息統計”功能,出現其統計窗口。從“產品-工序名:”旁的下拉組合框中選擇一個列表項,再指定統計的起止時間,單擊右側“按產品-工序為主序在指定時間內統計”列表項,會出現圖10所示的統計效果,顯示這個“產品-工序”在指定時間內不同人的加工數量匯總和整體匯總值“26”,如果同一制造人在不同機床上都有多次批量加工,還會多出現一個層級的分類匯總。

(4)顯示機床運行情況測試
運行“瀏覽所有機床基本運行加工情況”功能,在其窗口中單擊“顯示機床運行情況”按鈕,其顯示變為“刷新機床運行情況”,且以列表形式顯示所有聯網機床的當前加工零件的程序信息和已加工數量等,效果如圖11所示。

本文所構建的聯網數控機床運行監控與信息管理系統從數控企業實際需求出發,解決了將現場批量加工產品的機床、工序、工人、時間和數量信息完整記錄的算法問題,并就算法的邏輯進行了系統測試,說明該算法具有科學性和實用性。整個系統實現了數控機床運行實時監控、生產過程管理和機床等基本信息管理有機融合,同時具有良好的安全性、通用性和易用性,可以為企業運行維護和科學管理提供技術支撐,具有較高的實用價值,是用計算機系統對數控機床實時監控和信息管理的一次有益嘗試。