蘇春燕,孟祥懿,崔建輝
(1.天津中德應(yīng)用技術(shù)大學(xué) 軟件與通信學(xué)院,天津 300350; 2.天津中德應(yīng)用技術(shù)大學(xué) 機(jī)械工程學(xué)院,天津 300350; 3.天津市鑫聯(lián)建輝金屬制品有限公司 經(jīng)理辦公室,天津 301505)
制造業(yè)是國(guó)民經(jīng)濟(jì)的主體,信息化和工業(yè)化兩化融合將帶動(dòng)制造業(yè)發(fā)展。信息物理系統(tǒng)(簡(jiǎn)稱(chēng)CPS)被視為支撐兩化融合的綜合技術(shù)體系,是一個(gè)綜合計(jì)算、網(wǎng)絡(luò)和物理環(huán)境的多維復(fù)雜系統(tǒng)。目前基于CPS的智能制造系統(tǒng)已經(jīng)成為國(guó)內(nèi)外這一領(lǐng)域的研究熱點(diǎn)[1]。而數(shù)控機(jī)床是制造過(guò)程的基本單位,是智能化、信息化制造不可或缺的一部分[2],圍繞CPS技術(shù)體系,結(jié)合我國(guó)數(shù)控機(jī)床企業(yè)的實(shí)際需求,探索研究“數(shù)控機(jī)床的遠(yuǎn)程運(yùn)行監(jiān)控和信息管理系統(tǒng)開(kāi)發(fā)”變得緊迫和具有現(xiàn)實(shí)意義。目前已有不少論文涉及對(duì)數(shù)控機(jī)床基本運(yùn)行數(shù)據(jù)的遠(yuǎn)程監(jiān)控系統(tǒng),本文的技術(shù)特點(diǎn)有:
(1)實(shí)現(xiàn)數(shù)控機(jī)床基本運(yùn)行數(shù)據(jù)遠(yuǎn)程監(jiān)控,數(shù)據(jù)的呈現(xiàn)方式有所創(chuàng)新;
(2)研究數(shù)控企業(yè)需求,建立了符合3個(gè)范式的較合理的數(shù)據(jù)模型,對(duì)企業(yè)的基礎(chǔ)信息和生產(chǎn)過(guò)程信息進(jìn)行了有效管理;
(3)改進(jìn)實(shí)現(xiàn)數(shù)控機(jī)床批量加工“產(chǎn)品-工序”時(shí)間、數(shù)量信息的遠(yuǎn)程實(shí)時(shí)自動(dòng)記錄,文章詳細(xì)探討了其改進(jìn)實(shí)現(xiàn)的算法;
(4)實(shí)現(xiàn)數(shù)控企業(yè)的基本信息和產(chǎn)品批量加工信息的綜合管理,包括數(shù)據(jù)維護(hù)、信息查詢(xún)和統(tǒng)計(jì)等。
作為科技特派員所去數(shù)控企業(yè)“天津市鑫聯(lián)建輝金屬制品有限公司”有多個(gè)數(shù)控機(jī)床車(chē)間,這些機(jī)床一般本身帶有網(wǎng)絡(luò)接口,或可通過(guò)連接外部設(shè)備添加網(wǎng)絡(luò)接口。企業(yè)管理層希望在與計(jì)算機(jī)聯(lián)網(wǎng)數(shù)控機(jī)床基礎(chǔ)上開(kāi)發(fā)軟件系統(tǒng),實(shí)現(xiàn)在系統(tǒng)平臺(tái)遠(yuǎn)程監(jiān)控?cái)?shù)控機(jī)床的運(yùn)行狀態(tài);查看不同型號(hào)、廠(chǎng)家的機(jī)床數(shù)量;且自動(dòng)遠(yuǎn)程記錄每個(gè)聯(lián)網(wǎng)機(jī)床批量加工產(chǎn)品的數(shù)量和時(shí)間,并提供相關(guān)信息的查詢(xún)和統(tǒng)計(jì)。
根據(jù)企業(yè)引入信息技術(shù)改進(jìn)生產(chǎn)和管理的設(shè)想和文獻(xiàn)[3]中介紹的提取問(wèn)題域中事物方法,確定出系統(tǒng)需處理的事物實(shí)體有:機(jī)床基本信息、機(jī)床加工產(chǎn)品記錄信息、工人信息、產(chǎn)品信息、產(chǎn)品工序信息、系統(tǒng)用戶(hù)信息、機(jī)床廠(chǎng)家信息、機(jī)床類(lèi)型信息、機(jī)床系統(tǒng)類(lèi)型信息和工人級(jí)別信息。
由文獻(xiàn)[4]可知目前數(shù)據(jù)計(jì)算與信息處理方面軟件有瀏覽器/服務(wù)器(B/S)和客戶(hù)端/服務(wù)器(C/S) 兩種架構(gòu),基于監(jiān)控的數(shù)控機(jī)床往往在企業(yè)內(nèi)部的車(chē)間這樣的較小范圍內(nèi),負(fù)責(zé)監(jiān)控的計(jì)算機(jī)數(shù)量比較有限,且用戶(hù)界面要求豐富和容易實(shí)現(xiàn),因此,本文系統(tǒng)采用C/S開(kāi)發(fā)框架,具體使用了這一架構(gòu)中較成熟系統(tǒng)開(kāi)發(fā)語(yǔ)言Visual C#,配合SQL Server數(shù)據(jù)庫(kù)管理系統(tǒng)開(kāi)發(fā)。這種架構(gòu)只有在企業(yè)內(nèi)安裝了客戶(hù)端程序的計(jì)算機(jī)才能監(jiān)控機(jī)床運(yùn)行,運(yùn)行和數(shù)據(jù)的安全性較好,軟件更新時(shí)需要維護(hù)的計(jì)算機(jī)數(shù)量也有限。
結(jié)合前一節(jié)對(duì)企業(yè)生產(chǎn)的實(shí)際情況和對(duì)信息系統(tǒng)需求調(diào)研的基礎(chǔ)上,這里介紹的所開(kāi)發(fā)系統(tǒng)包括6個(gè)功能模塊,具體有基礎(chǔ)數(shù)據(jù)設(shè)置、機(jī)床管理、機(jī)床運(yùn)行監(jiān)控、加工產(chǎn)品信息管理、工人管理和系統(tǒng)管理。具體功能如圖1所示。其中①所標(biāo)注功能只有超級(jí)用戶(hù)有權(quán)限使用,即處于可用狀態(tài),而②所標(biāo)注功能只有對(duì)管理用戶(hù)處于可用狀態(tài)。其它功能對(duì)所有級(jí)別用戶(hù)均有使用權(quán)限。
圖1中“基礎(chǔ)數(shù)據(jù)設(shè)置”模塊允許使用的廠(chǎng)家根據(jù)實(shí)際情況事先定制一些基礎(chǔ)數(shù)據(jù),如:設(shè)置企業(yè)所有機(jī)床系統(tǒng)類(lèi)型、生產(chǎn)廠(chǎng)家以及所有工人級(jí)別等信息,這樣在其它 功能窗口的數(shù)據(jù)輸入部分就可以將某個(gè)基礎(chǔ)數(shù)據(jù)的值綁定到下拉組合框中,方便操作人員選擇使用,此設(shè)計(jì)使系統(tǒng)更具靈活和開(kāi)放性。

圖1 系統(tǒng)功能設(shè)計(jì)結(jié)構(gòu)
由于數(shù)控企業(yè)有多個(gè)數(shù)控機(jī)床車(chē)間,系統(tǒng)需要遠(yuǎn)程實(shí)時(shí)采集、記錄和處理各數(shù)控機(jī)床加工信息,這就要求系統(tǒng)運(yùn)行時(shí)盡量減少讀寫(xiě)數(shù)據(jù)庫(kù)數(shù)據(jù)的延遲時(shí)間,因此系統(tǒng)運(yùn)行平臺(tái)的設(shè)計(jì)是,在每個(gè)車(chē)間建立車(chē)間數(shù)據(jù)庫(kù)服務(wù)器,負(fù)責(zé)存儲(chǔ)本車(chē)間的運(yùn)行數(shù)據(jù),并設(shè)置企業(yè)級(jí)系統(tǒng)數(shù)據(jù)庫(kù)主服務(wù)器,對(duì)整個(gè)企業(yè)的運(yùn)行數(shù)據(jù)進(jìn)行維護(hù)、查詢(xún)和統(tǒng)計(jì)。這個(gè)數(shù)據(jù)處理的需求參考文獻(xiàn)[5]采用數(shù)據(jù)復(fù)制和分割技術(shù)實(shí)現(xiàn),即將工人信息、產(chǎn)品信息、產(chǎn)品工序信息、機(jī)床廠(chǎng)家信息、機(jī)床類(lèi)型信息、機(jī)床系統(tǒng)類(lèi)型信息、工人級(jí)別信息這些數(shù)據(jù)表從主數(shù)據(jù)庫(kù)服務(wù)器復(fù)制到各個(gè)車(chē)間的數(shù)據(jù)庫(kù)服務(wù)器,并定期將主服務(wù)器中的這些數(shù)據(jù)表信息更新復(fù)制到各個(gè)車(chē)間數(shù)據(jù)庫(kù)服務(wù)器。將包含機(jī)床網(wǎng)址和端口號(hào)的“機(jī)床基本信息數(shù)據(jù)表”和“機(jī)床加工產(chǎn)品記錄信息數(shù)據(jù)表”中各個(gè)車(chē)間的數(shù)據(jù)記錄分割到車(chē)間數(shù)據(jù)庫(kù)服務(wù)器,定期用這兩個(gè)分割到車(chē)間數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)表的數(shù)據(jù)更新主服務(wù)器中對(duì)應(yīng)數(shù)據(jù)表的數(shù)據(jù)。在各個(gè)車(chē)間和企業(yè)級(jí)信息管理部門(mén)分別安裝、配置系統(tǒng)。整個(gè)平臺(tái)的網(wǎng)絡(luò)分布拓?fù)浣Y(jié)構(gòu)如圖2所示。

圖2 系統(tǒng)網(wǎng)絡(luò)分布拓?fù)浣Y(jié)構(gòu)
本系統(tǒng)使用SQL Server數(shù)據(jù)庫(kù)管理系統(tǒng)存儲(chǔ)和處理數(shù)據(jù)。建立符合1-3范式[6]、能存儲(chǔ)企業(yè)基礎(chǔ)生產(chǎn)信息和生產(chǎn)過(guò)程信息的合理數(shù)據(jù)模型是文中系統(tǒng)的一個(gè)創(chuàng)新點(diǎn)。系統(tǒng)設(shè)計(jì)的數(shù)據(jù)表與事物之間的對(duì)應(yīng)關(guān)系是:cncInfo-機(jī)床基本信息、history-機(jī)床加工的產(chǎn)品工序記錄信息、makerInfo-工人信息、proInfo-產(chǎn)品信息、proProcedure-產(chǎn)品工序信息、userInfo-系統(tǒng)用戶(hù)信息、CNCFactory-機(jī)床廠(chǎng)家信息、machineModel-機(jī)床型號(hào)信息、operateType-機(jī)床系統(tǒng)類(lèi)型信息、popeModel-工人級(jí)別信息。
根據(jù)文獻(xiàn)[7]引用完整性設(shè)置方式,系統(tǒng)通過(guò)外鍵建立各個(gè)表之間的關(guān)系,并且設(shè)置關(guān)系表的“級(jí)聯(lián)”更新和“設(shè)置Null”刪除規(guī)則。此系統(tǒng)的數(shù)據(jù)表及相互關(guān)系如圖3所示。其建立關(guān)系的方式是:表makerInfo的主鍵makerID在其關(guān)聯(lián)表history中作為外鍵makerID;表proProcedure的主鍵ID在其關(guān)聯(lián)表history中作為外鍵proProcedID;表cncInfo的主鍵ID在其關(guān)聯(lián)表history中作為外鍵cncID;表proInfo的主鍵ID在其關(guān)聯(lián)表proProcedure中作為外鍵proID;表machineModel的主鍵machineTypeID在其關(guān)聯(lián)表cncInfo中作為外鍵machineTypeID。
系統(tǒng)實(shí)現(xiàn)了數(shù)控機(jī)床基本運(yùn)行數(shù)據(jù)遠(yuǎn)程監(jiān)控,在各類(lèi)數(shù)據(jù)呈現(xiàn)方面做了一些創(chuàng)新。下面介紹其實(shí)現(xiàn)的主要關(guān)鍵技術(shù)和運(yùn)行測(cè)試效果。
3.1.1 關(guān)鍵技術(shù)-數(shù)控機(jī)床的聯(lián)網(wǎng)與數(shù)據(jù)讀寫(xiě)
由文獻(xiàn)[8]~文獻(xiàn)[11]得到目前已有的數(shù)據(jù)采集方 式主要有PLC采集、宏程序輸出、外加傳感器采集和開(kāi)放式數(shù)控系統(tǒng)接口采集。其中只有開(kāi)放式數(shù)控系統(tǒng)接口采集不需要附加硬件設(shè)備,具有能夠?qū)崟r(shí)采集多種類(lèi)型機(jī)床信息、實(shí)現(xiàn)技術(shù)難度低、實(shí)施成本低的優(yōu)點(diǎn)。因此本系統(tǒng)調(diào)用數(shù)控機(jī)床本身提供的開(kāi)放函數(shù)實(shí)現(xiàn)對(duì)數(shù)控機(jī)床的聯(lián)網(wǎng)和數(shù)據(jù)讀取。

圖3 系統(tǒng)數(shù)據(jù)模式設(shè)計(jì)
以FANUC系統(tǒng)數(shù)控機(jī)床為例,其提供了Focas開(kāi)發(fā)包,其中豐富的函數(shù)允許PC機(jī)與數(shù)控系統(tǒng)聯(lián)網(wǎng)并實(shí)現(xiàn)數(shù)據(jù)讀寫(xiě)。這些函數(shù)可以用C++或C#程序調(diào)用。FANUC公司給出了Focas的開(kāi)放接口函數(shù)的使用說(shuō)明。如果程序中要使用Focas開(kāi)發(fā)包提供的函數(shù)訪(fǎng)問(wèn)數(shù)控機(jī)床,需要將該開(kāi)發(fā)包提供的一組類(lèi)庫(kù)文檔(如:Fwlib.dll)復(fù)制到項(xiàng)目存放其生成可執(zhí)行文件的文件夾“……/debug”下,并在項(xiàng)目的根目錄中添加其提供的fwlib32.cs文件[12],這個(gè)文件給出了Focas1類(lèi)的定義聲明,其中包含該類(lèi)用到的符號(hào)常量和其它類(lèi)的定義,以及這個(gè)類(lèi)包含的操作數(shù)控機(jī)床函數(shù)定義的首部,這些函數(shù)通常都定義為靜態(tài)、公有的,可以通過(guò)類(lèi)名直接調(diào)用。
如下面這段代碼是用Focas1類(lèi)提供的函數(shù)連接指定網(wǎng)址和端口機(jī)床的程序段。
ret=Focas1.cnc_allclibhndl3(Convert.ToString(txtIp.Text) Convert.ToUInt16(txtPort.Text),Convert.ToUInt16
(txtTimeOut.Text),out CncComCtrlProd.module Class.
MyModule.Flibhndl);
if (ret== Focas1.EW_OK)
…… // 顯示聯(lián)網(wǎng)成功
else
…… // 顯示聯(lián)網(wǎng)失敗
上面程序段中首先調(diào)用了Focas1類(lèi)的cnc_allclibhndl3()函數(shù)來(lái)實(shí)現(xiàn)與數(shù)控機(jī)床連接,返回值存入ret變量。函數(shù)第1個(gè)參數(shù)是從文本框txtIp中讀取的機(jī)床IP地址,并轉(zhuǎn)化為字符串類(lèi)型,第2個(gè)參數(shù)是從文本框txtPort讀取的機(jī)床端口號(hào),并轉(zhuǎn)化為整數(shù)類(lèi)型,第3個(gè)參數(shù)是從文本框txtTimeOut讀取的延遲時(shí)間,并轉(zhuǎn)化為整數(shù)類(lèi)型,第4個(gè)參數(shù)是帶回的表示此機(jī)床連接的庫(kù)句柄變量Flibhndl,此變量定義在項(xiàng)目CncComCtrlProd的moduleClass文件夾的MyModule類(lèi)中,并設(shè)為公有、靜態(tài)類(lèi)型變量,因此可以直接通過(guò)類(lèi)名調(diào)用。如果函數(shù)返回變量ret等于Focas1.EW_OK,則表示這個(gè)連接操作成功,否則表示失敗。
而語(yǔ)句“ret=Focas1.cnc_freelibhndl(CncComCtrlProd.moduleClass.MyModule.Flibhndl);”表示斷開(kāi)前面建立的 操作庫(kù)函數(shù)的句柄為CncComCtrlProd.moduleClass.MyModule.
Flibhndl的連接,返回值賦給變量ret,同樣如果ret等于Focas1.EW_OK,表示斷開(kāi)連接操作成功。
3.1.2 運(yùn)行測(cè)試效果-基本運(yùn)行數(shù)據(jù)遠(yuǎn)程監(jiān)控
圖4顯示了“機(jī)床選擇與聯(lián)網(wǎng)”功能的系統(tǒng)運(yùn)行測(cè)試效果,可以手動(dòng)在文本框輸入機(jī)床IP地址等,也可以從下方的信息列表中雙擊某個(gè)機(jī)床信息,其IP地址和端口號(hào)等信息則自動(dòng)寫(xiě)入上方對(duì)應(yīng)文本框中,然后單擊“連接”按鈕,就實(shí)現(xiàn)與指定機(jī)床的連接,并用消息框顯示連接是否成功。

圖4 “特定機(jī)床聯(lián)網(wǎng)”運(yùn)行效果
圖5顯示了“機(jī)床使用與報(bào)警情況”功能的系統(tǒng)運(yùn)行測(cè)試效果,其展示了遠(yuǎn)程監(jiān)測(cè)所聯(lián)網(wǎng)的特定機(jī)床的使用數(shù)據(jù)。而“機(jī)床坐標(biāo)與運(yùn)行監(jiān)測(cè)”功能則能顯示機(jī)床的運(yùn)行狀態(tài)、坐標(biāo)、主軸轉(zhuǎn)速和單次加工時(shí)間等信息。

圖5 “機(jī)床使用與報(bào)警情況”運(yùn)行效果
圖6是“所有機(jī)床基本加工運(yùn)行情況瀏覽”的運(yùn)行測(cè)試效果,其以列表形式展示了聯(lián)網(wǎng)的所有遠(yuǎn)程機(jī)床的IP地址、當(dāng)前加工零件的程序名-程序段和已加工數(shù)量等信息。

圖6 “所有機(jī)床基本加工運(yùn)行情況瀏覽”運(yùn)行效果
當(dāng)在“機(jī)床信息管理與連通顯示”窗口單擊“顯示機(jī)床狀態(tài)”按鈕時(shí),其變?yōu)椤巴V範(fàn)顟B(tài)掃描”,同時(shí)掃描、試聯(lián)網(wǎng)所有機(jī)床基本信息表中的機(jī)床,以不同的圖標(biāo)顯示其是否成功聯(lián)網(wǎng)。效果如圖7所示,這里有兩臺(tái)顯示圖標(biāo)為淺色的機(jī)床成功聯(lián)網(wǎng)。
運(yùn)行系統(tǒng)的“聯(lián)網(wǎng)所有機(jī)床”功能時(shí)系統(tǒng)循環(huán)重復(fù)掃描、聯(lián)網(wǎng)所有機(jī)床,讀取當(dāng)前聯(lián)網(wǎng)機(jī)床的“產(chǎn)品-工序”批量加工信息存入history數(shù)據(jù)表,直到人為選擇停止這一功能。對(duì)于這些信息通過(guò)遠(yuǎn)程聯(lián)網(wǎng)的準(zhǔn)確提取和記錄是本系統(tǒng)的一個(gè)創(chuàng)新點(diǎn)。
3.2.1 關(guān)鍵技術(shù)-“自動(dòng)記錄機(jī)床批量加工‘產(chǎn)品-工序’信息”改進(jìn)算法
系統(tǒng)此功能的整體設(shè)計(jì)思路是建立一個(gè)獨(dú)立的線(xiàn)程,在其中實(shí)現(xiàn)依據(jù)數(shù)控機(jī)床數(shù)據(jù)表中記錄的機(jī)床IP地址和端口循環(huán)掃描聯(lián)網(wǎng)每個(gè)數(shù)控機(jī)床,再將聯(lián)網(wǎng)機(jī)床的批量加工信息存入數(shù)據(jù)表。線(xiàn)程的建立方式在程序設(shè)計(jì)中已經(jīng)成熟,聯(lián)網(wǎng)機(jī)床技術(shù)在前一節(jié)中已經(jīng)介紹,而數(shù)據(jù)表的設(shè)計(jì)在前面系統(tǒng)數(shù)據(jù)模式中也已經(jīng)介紹。因此這里只解釋根據(jù)數(shù)控機(jī)床加工產(chǎn)品的特點(diǎn),確定并保存特定機(jī)床批量加工“產(chǎn)品-工序”信息的改進(jìn)算法。項(xiàng)目初期我們已對(duì)這個(gè)算法進(jìn)行研究和實(shí)現(xiàn),這里又進(jìn)行了更精確改進(jìn)研究和建模。

圖7 “顯示機(jī)床連接狀態(tài)”運(yùn)行效果
機(jī)床加工的產(chǎn)品常通過(guò)多道工序完成,數(shù)控機(jī)床的一個(gè)CNC程序負(fù)責(zé)一道工序。由于數(shù)控加工的工序相對(duì)集中[13],即數(shù)控機(jī)床上產(chǎn)品(工件)一次裝夾所完成的工序中,可加工完成鉆、擴(kuò)、絞和銑等這些普通機(jī)床的多道工序,所以這里說(shuō)的工序可能包括普通機(jī)床的多道工序。數(shù)控機(jī)床每運(yùn)行一次CNC程序即可完成產(chǎn)品某道工序的加工,這里的加工產(chǎn)品數(shù)是指產(chǎn)品的某個(gè)工序完成的加工數(shù)量。機(jī)床通常是讓某個(gè)工序?qū)?yīng)的CNC程序重復(fù)運(yùn)行,來(lái)完成此“產(chǎn)品-工序”的批量加工。每個(gè)數(shù)控機(jī)床都有一個(gè)累加計(jì)數(shù)器,記錄該機(jī)床加工“產(chǎn)品-工序”累計(jì)數(shù)量。這里開(kāi)發(fā)的系統(tǒng)假設(shè)的工作流程是一個(gè)人在一個(gè)工作日內(nèi)的一臺(tái)機(jī)床完成一批“產(chǎn)品-工序”的加工任務(wù)后記錄下在這個(gè)機(jī)床已批量加工此“產(chǎn)品-工序”數(shù)量,然后將累加計(jì)數(shù)器人為清零為下一次批量加工的計(jì)數(shù)做準(zhǔn)備。即當(dāng)變更了工作機(jī)床、操作人員、工作日或加工“產(chǎn)品-工序”編號(hào)(即CNC程序)時(shí),就確定開(kāi)始了一次新的批量加工。系統(tǒng)被設(shè)計(jì)成能自動(dòng)采集保存某次批量加工產(chǎn)品的機(jī)床號(hào)、產(chǎn)品-工序編號(hào)、時(shí)間和累加計(jì)數(shù)器的數(shù)量等信息,這些“機(jī)床批量加工產(chǎn)品-工序”的相關(guān)信息被自動(dòng)保存在“產(chǎn)品工序生產(chǎn)記錄信息表”history數(shù)據(jù)表,此表中還設(shè)置了批量加工產(chǎn)品的工人編號(hào)(makerID)字段,其需要在“工人操作機(jī)床加工產(chǎn)品記錄信息管理”功能中手工輸入。
算法還提供了智能判斷和提示機(jī)床新的批量加工前計(jì)數(shù)器未清零的情況,在項(xiàng)目初期的算法實(shí)現(xiàn)中,考慮到服務(wù)企業(yè)是將加工工件手工裝夾,時(shí)間較長(zhǎng),而每個(gè)工序單次加工時(shí)間也多于2 min~3 min,因此,假設(shè)系統(tǒng)每掃描一遍所有機(jī)床的時(shí)間小于機(jī)床任意工序的裝夾與單次加工處理時(shí)間之和,在記錄開(kāi)始一次新的批量時(shí)以“當(dāng)前加工數(shù)>0”作為提示沒(méi)有將計(jì)數(shù)器清零的條件。但是考慮到將來(lái)有可能實(shí)現(xiàn)機(jī)械手的自動(dòng)裝夾,使裝夾時(shí)間大大減少,且有些工序時(shí)間較短,因此工序的每次裝夾時(shí)間和單次加工處理時(shí)間之和可能小于系統(tǒng)的每掃描一遍所有機(jī)床的時(shí)間,因此為了提高系統(tǒng)對(duì)未來(lái)變化的適應(yīng)能力,這個(gè)改進(jìn)算法的設(shè)計(jì)是讀取、計(jì)算每臺(tái)機(jī)床兩次掃描的時(shí)間間隔disTime和機(jī)床工序的單次加工時(shí)間proTime,在記錄開(kāi)始一次新的批量時(shí)以“當(dāng)前加工數(shù)>disTime/proTime”作為提示沒(méi)有將計(jì)數(shù)器清零的條件,在提示中進(jìn)一步給出此機(jī)床號(hào)、CNC程序名、可能的多出加工量和批量加工初始時(shí)間。當(dāng)disTime≥proTime且計(jì)數(shù)器的原計(jì)數(shù)值≤disTime/proTime時(shí)可能會(huì)出現(xiàn)智能提示失效或提示的多出加工量出現(xiàn)誤差。這個(gè)誤差的上線(xiàn)是disTime/proTime,這取決于機(jī)床開(kāi)始加工時(shí)系統(tǒng)的掃描位置。但這個(gè)誤差會(huì)在極個(gè)別情況下出現(xiàn),且很少在裝夾時(shí)間加上單次加工時(shí)間小于掃描間隔時(shí)間的情況。
另外此提示正確實(shí)現(xiàn)的前提是在所有機(jī)床工作前系統(tǒng)已經(jīng)啟動(dòng)并開(kāi)始掃描機(jī)床。系統(tǒng)還允許根據(jù)實(shí)際機(jī)床加工情況對(duì)這些數(shù)據(jù)進(jìn)行修改、插入等管理。這些信息也可以用于查詢(xún)、統(tǒng)計(jì)機(jī)床的使用情況,并為統(tǒng)計(jì)工人工作量提供了參考數(shù)據(jù)。
對(duì)于記錄一臺(tái)機(jī)床在一個(gè)時(shí)間段內(nèi)、批量加工某產(chǎn)品工序的加工數(shù)此改進(jìn)算法的實(shí)現(xiàn)邏輯比較復(fù)雜,這里用圖8的流程說(shuō)明。該圖的算法大致流程是:當(dāng)“產(chǎn)品工序信息表(proProcedure)”中不存在“當(dāng)前CNC工序名”,顯示“CNC程序不存在”錯(cuò)誤提示并結(jié)束這個(gè)處理,否則繼續(xù)。讀取此產(chǎn)品-工序的編號(hào)(IP)和工序名(procedureName)分別存入變量proProcedID和procedureName,讀取history表記錄個(gè)數(shù)存入變量hisID,從history表讀取當(dāng)前機(jī)床的最后一個(gè)批量加工記錄時(shí)間,如果沒(méi)有此機(jī)床的加工記錄,則智能判斷累加計(jì)數(shù)器是否清零后,在history表添加新的加工記錄并結(jié)束這個(gè)處理,否則繼續(xù),從是否是同已CNC程序、是否是同一天和以前的加工數(shù)是否大于當(dāng)前讀取的加工數(shù)等條件判定是否是同一批次的加工,以決定是添加新的批量加工記錄,還是修改history表中對(duì)應(yīng)記錄的加工數(shù)量。
3.2.2 運(yùn)行測(cè)試效果-“自動(dòng)記錄所有聯(lián)網(wǎng)機(jī)床批量加工產(chǎn)品信息”系統(tǒng)實(shí)現(xiàn)
選擇系統(tǒng)的“聯(lián)網(wǎng)所有機(jī)床”功能,此時(shí)系統(tǒng)以圖9所示的列表形式顯示所有聯(lián)網(wǎng)機(jī)床的基本信息,窗口下方的文本區(qū)可顯示新的批量加工時(shí)計(jì)數(shù)器未清零的智能提示或機(jī)床CNC程序信息不存在等信息。列表的具體內(nèi)容會(huì)隨著每次循環(huán)掃描機(jī)床聯(lián)網(wǎng)狀況而變化,另外,機(jī)床批量加工產(chǎn)品-工序信息會(huì)被存入history數(shù)據(jù)表,后面是這一測(cè)試結(jié)果。而當(dāng)單擊此圖窗口中的“停止掃描聯(lián)網(wǎng)所有機(jī)床”按鈕,即可停止這一循環(huán)掃描。
假設(shè)這一功能的測(cè)試前,系統(tǒng)中“產(chǎn)品工序信息數(shù)據(jù)表proProcedure”的具體內(nèi)容見(jiàn)表1,而history數(shù)據(jù)表的記錄為空。
這一算法邏輯功能的測(cè)試環(huán)境是“機(jī)床基本信息數(shù)據(jù)表cncInfo”所列機(jī)床中只有編號(hào)為2和3的兩臺(tái)機(jī)床處于開(kāi)機(jī)聯(lián)網(wǎng)狀態(tài),運(yùn)行此系統(tǒng)并選擇“聯(lián)網(wǎng)所有機(jī)床”功能。
算法邏輯測(cè)試1:將兩臺(tái)數(shù)控機(jī)床加工產(chǎn)品工序的程序名均指定為“O1000”,設(shè)定該工序單次加工時(shí)間為3 min,而測(cè)試時(shí)系統(tǒng)掃描所有機(jī)床的時(shí)間為2 min,累加計(jì)數(shù)器的 值清零,分別啟動(dòng)兩臺(tái)機(jī)床這個(gè)加工工序,此時(shí)觀察系統(tǒng)的history數(shù)據(jù)表的內(nèi)容首先變?yōu)楸?所示。這是由于從表1提供的表可知CNC程序名為“O1000”的“產(chǎn)品工序序號(hào)”是“1”,因此表2中proProcedID字段的值為“1”。由于系統(tǒng)不能自動(dòng)采集操作工人信息,這里makerID的值設(shè)置為默認(rèn)值“0000”,可使用此軟件系統(tǒng)手動(dòng)輸入真正的操作機(jī)床的工人編號(hào),而系統(tǒng)掃描時(shí)間間隔為2 min,其小于系統(tǒng)單次加工時(shí)間3 min,所以第1次掃描到這兩臺(tái)機(jī)床時(shí)累加計(jì)數(shù)器的值為0,quantity字段的值也為0,且2除以3取整為0,當(dāng)前加工數(shù)0不大于這個(gè)值,因此在圖9的下方提示區(qū)中沒(méi)有給出提示信息。

圖8 “記錄特定機(jī)床批量加工某個(gè)產(chǎn)品的生產(chǎn)信息”算法

圖9 “聯(lián)網(wǎng)所有機(jī)床”功能運(yùn)行效果

表1 系統(tǒng)產(chǎn)品工序信息數(shù)據(jù)表proProcedure內(nèi)容

表2 運(yùn)行測(cè)試1后history數(shù)據(jù)表內(nèi)容
繼續(xù)運(yùn)行機(jī)床,并刷新history數(shù)據(jù)表的內(nèi)容,發(fā)現(xiàn)隨著累加計(jì)數(shù)器的值依次增加,quantity數(shù)據(jù)表的內(nèi)容依次變?yōu)?、2、3,此時(shí)停止3號(hào)機(jī)床,獨(dú)自運(yùn)行2號(hào)機(jī)床,直到其累加計(jì)數(shù)器和quantity字段的值都為6,停止2號(hào)機(jī)床運(yùn)行。這是由于在同一工作日,機(jī)床的CNC程序沒(méi)有變化,且累加計(jì)數(shù)器的數(shù)值不斷遞增,系統(tǒng)判定這是同一次的批量加工,所以表2中記錄的quantity字段值由“0”分別變?yōu)榱恕?”和“3”。這一變化表現(xiàn)在表3中。
算法邏輯測(cè)試2:在前面測(cè)試1的基礎(chǔ)上,將兩臺(tái)數(shù)控機(jī)床加工產(chǎn)品工序的程序名均指定為“O1001”,設(shè)定該工序單次加工時(shí)間為4 min,而測(cè)試時(shí)系統(tǒng)掃描所有機(jī)床的時(shí)間還為2 min,將2號(hào)機(jī)床的計(jì)數(shù)器清零,而3號(hào)機(jī)床不清零,分別啟動(dòng)兩臺(tái)機(jī)床,此時(shí)觀察系統(tǒng)的history數(shù)據(jù)表的內(nèi)容首先變?yōu)楸?所示,在圖9的下方的文本區(qū)中給出“3號(hào)機(jī)床沒(méi)有將前次加工計(jì)數(shù)器清零”的智能提示,表3中多出了兩條分別表示這兩臺(tái)機(jī)床批量加工產(chǎn)品信息的記錄。這是由于工序名改變,表示機(jī)床加工工序改變,系統(tǒng)確定一次新的批量加工開(kāi)始。從表1可知程序名為“O1001”的“產(chǎn)品工序序號(hào)”是“2”,因此表3中新增記錄的proProcedID字段值為“2”。由于3號(hào)機(jī)床計(jì)數(shù)器值沒(méi)有清零,所以最初提取的兩臺(tái)機(jī)床加工數(shù)量分別為0和3,3大于2除以4的整除值0,系統(tǒng)給出3號(hào)機(jī)床沒(méi)有將累加器清零的提示。

表3 運(yùn)行測(cè)試2后history數(shù)據(jù)表內(nèi)容
繼續(xù)運(yùn)行機(jī)床,當(dāng)計(jì)數(shù)器的值依次增加時(shí),可以觀察到history數(shù)據(jù)表的值也會(huì)隨之增加。當(dāng)計(jì)數(shù)器的值依次變?yōu)?和5時(shí)停止機(jī)床,表3的第3、第4條記錄中quantity字段的值也隨之變?yōu)檎{(diào)整后的值2和5,這一變化反映在表4中。后期可以手動(dòng)將4號(hào)記錄的5減去原來(lái)計(jì)數(shù)器值3變?yōu)?。
算法邏輯測(cè)試3:在前面測(cè)試2的基礎(chǔ)上,將兩臺(tái)機(jī)床的累加計(jì)數(shù)器的值都清零,重新啟動(dòng)機(jī)床,此時(shí)觀察history數(shù)據(jù)表,得到表4所示的運(yùn)行效果,在其中又多出兩行表示新的批量加工的記錄。由于累加計(jì)數(shù)器清零,在沒(méi)有改變運(yùn)行的CNC程序名和同一天的情況下,以前的加工數(shù)量2和5大于當(dāng)前從計(jì)數(shù)器提取的加工數(shù)值0,系統(tǒng)就判定已經(jīng)開(kāi)始了一次新的批量加工,在history數(shù)據(jù)表中添加了兩條新記錄表示,其quantity字段最初值就為計(jì)數(shù)器值0,當(dāng)計(jì)數(shù)器值變?yōu)?時(shí),停止機(jī)床運(yùn)行,此時(shí)數(shù)據(jù)表中5、6行的quantity字段的內(nèi)容也隨之變?yōu)?,這一變化反映在表5中。

表4 運(yùn)行測(cè)試3后history數(shù)據(jù)表內(nèi)容
算法邏輯測(cè)試4:在前面測(cè)試3的基礎(chǔ)上,修改計(jì)算機(jī)的系統(tǒng)時(shí)間為后面新的1天,將2號(hào)機(jī)床加工產(chǎn)品工序的CNC程序名指定為“O1002”,其加工時(shí)間設(shè)置為1.5 min,小于系統(tǒng)掃描所有機(jī)床的時(shí)間2 min,3號(hào)機(jī)床加工產(chǎn)品工序程序名不變。注意這里沒(méi)有將兩臺(tái)機(jī)床的計(jì)數(shù)器值清零,其值均為1。然后啟動(dòng)兩臺(tái)數(shù)控機(jī)床。重復(fù)多次設(shè)置這個(gè)測(cè)試4的初始運(yùn)行條件并反復(fù)測(cè)試。多數(shù)測(cè)試結(jié)果是運(yùn)行軟件系統(tǒng)的圖9所示窗口下方文本區(qū)會(huì)多出兩個(gè)分別提示2號(hào)和3號(hào)機(jī)床計(jì)數(shù)器沒(méi)有清零的提示信息,有時(shí)個(gè)別只有一個(gè)3號(hào)機(jī)床計(jì)數(shù)器沒(méi)有清零的提示信息。而每次觀察history數(shù)據(jù)表會(huì)多出兩行表示新的批量加工信息的記錄。這是由于2號(hào)機(jī)床的CNC程序名變化確定了一次新的批量加工,而3號(hào)機(jī)床與以前的批量加工記錄不在同一天確定了新批量加工。第1次掃描聯(lián)網(wǎng)2號(hào)機(jī)床時(shí),其可能已經(jīng)完成一次加工任務(wù)也可能還沒(méi)有完成,這要看機(jī)床開(kāi)始加工時(shí)的計(jì)算機(jī)掃描位置,從其累加計(jì)數(shù)器讀取的當(dāng)前加工數(shù)為2或1,這個(gè)數(shù)可能大于2整除1.5的值,也可能不大于,而且原計(jì)數(shù)器中的值1也等于2整除1.5的值。而第1次掃描聯(lián)網(wǎng)3號(hào)機(jī)床時(shí),其一定沒(méi)有完成一次加工任務(wù),從其累加器讀取的當(dāng)前加工數(shù)為1,這個(gè)數(shù)大于2整除4的值,一定會(huì)有未清零的智能提示。另外從表1可知2號(hào)機(jī)床程序名為“O1002”的“產(chǎn)品工序序號(hào)”是“3”,因此history數(shù)據(jù)表中其新增2號(hào)機(jī)床記錄的proProcedID字段值為3,3號(hào)機(jī)床新增記錄的此字段值還為“2”。如果每臺(tái)機(jī)床計(jì)數(shù)器值為3時(shí)停止其運(yùn)行,此時(shí)history數(shù)據(jù)表內(nèi)容見(jiàn)表5。后期可以手動(dòng)將表5中7、8號(hào)記錄的quantity字段的值復(fù)查修改。

表5 運(yùn)行測(cè)試4后history數(shù)據(jù)表內(nèi)容
算法邏輯測(cè)試5:在前面測(cè)試5的基礎(chǔ)上,2號(hào)機(jī)床加工產(chǎn)品工序的工序名指定為“O1003”,其加工時(shí)間設(shè)置為1.5 min,累加器不清零,只啟動(dòng)此2號(hào)機(jī)床,多次重復(fù)這個(gè)測(cè)試5的初始條件并測(cè)試。會(huì)發(fā)現(xiàn)每次圖9所示窗口下方文本區(qū)會(huì)多出1個(gè)提示2號(hào)機(jī)床計(jì)數(shù)器沒(méi)有清零的信息。這是由于原來(lái)沒(méi)有清零計(jì)數(shù)器的值3大于掃描間隔時(shí)間2整除工序單次加工時(shí)間1.5,此時(shí)一定會(huì)有沒(méi)有清零的提示出現(xiàn)。
算法邏輯測(cè)試6:在前面測(cè)試5的基礎(chǔ)上,將兩臺(tái)機(jī)床加工產(chǎn)品工序的工序名指定為“O1007”,再啟動(dòng)機(jī)床加工運(yùn)行,此時(shí)系統(tǒng)的如圖9所示界面的下方的文本區(qū)給出“該工序CNC程序不存在”的提示信息。這是由于從表1可知系統(tǒng)沒(méi)有工序名為“O1007”的產(chǎn)品工序。
這里的綜合管理是指信息的基本維護(hù)、查詢(xún)和統(tǒng)計(jì)。在信息基本維護(hù)功能中此系統(tǒng)在技術(shù)實(shí)現(xiàn)中充分利用數(shù)據(jù)表的多表關(guān)聯(lián),避免數(shù)據(jù)重復(fù)輸入,這既減少錄入信息又避免重復(fù)錄入引起的錯(cuò)誤。
3.3.1 關(guān)鍵技術(shù)-復(fù)雜數(shù)據(jù)查詢(xún)和統(tǒng)計(jì)技術(shù)
參考文獻(xiàn)[14]中的SQL查詢(xún)相關(guān)技術(shù),系統(tǒng)用SQL語(yǔ)言實(shí)現(xiàn)了復(fù)雜的跨越多表的數(shù)據(jù)查詢(xún)和統(tǒng)計(jì)處理,下面就以“工人加工產(chǎn)品-工序信息統(tǒng)計(jì)”功能的部分語(yǔ)句為例,對(duì)其使用方式進(jìn)行注釋說(shuō)明。
后面的3段代碼組合完成了用select語(yǔ)句實(shí)現(xiàn)跨多表查詢(xún)統(tǒng)計(jì)功能,第一段是存入變量Sut_SQL的SQL代碼,其表示數(shù)據(jù)表history通過(guò)關(guān)鍵字段分別連接makerInfo、cncInfo和proProcedure表聯(lián)合查詢(xún)統(tǒng)計(jì)history數(shù)據(jù)表的quantity字段匯總值,這一字段名顯示為“加工數(shù)量匯總”,并顯示作為分類(lèi)統(tǒng)計(jì)依據(jù)的各個(gè)字段,如:以“制造人姓名”為字段名顯示makerInfo數(shù)據(jù)表的makerName字段值。
Sut_SQL="select m.makerName as 制造人姓名,p.proID as 產(chǎn)品序號(hào),p.procedureName as 工序名,c.cncName as 機(jī)床名稱(chēng),sum(h.quantity) as 加工數(shù)量匯總 from history h inner join makerInfo m on h.makerID=m.makerID inner join cncInfo c on h.cncID=c.ID inner join proProcedure p on h.proProcedID=p.ID";
下面是第二段存入變量Static_SQL1的SQL代碼,其表示分類(lèi)統(tǒng)計(jì)依據(jù)的字段依次是makerInfo數(shù)據(jù)表的makerName、proProcedure數(shù)據(jù)表的proID和cncInfo數(shù)據(jù)表的cncName。
Static_SQL1="group by m.makerName, p.proID,p.procedureName,c.cncName WITH ROLLUP";
下面是第三段存入變量Static_SQL的代碼,其假設(shè)“where”后面變量StaticValue中存儲(chǔ)著由用戶(hù)界面選擇決定的統(tǒng)計(jì)條件,用連接符“+”將其與前面賦值的兩個(gè)變量連接成一個(gè)完整的滿(mǎn)足指定條件的多表聯(lián)合的查詢(xún)統(tǒng)計(jì)語(yǔ)句。
Static_SQL=Sut_SQL+"where"+StaticValue+Static_SQL1;
3.3.2 運(yùn)行測(cè)試效果-“信息綜合管理功能”系統(tǒng)實(shí)現(xiàn)
單擊前面圖7所示窗口中“列表模式”按鈕,則會(huì)出現(xiàn)圖10所示的以列表形式展示機(jī)床基本信息的管理界面。單擊前面圖7中“添加機(jī)床”按鈕或這里圖10的“添加”按鈕都可進(jìn)入圖11所示的添加機(jī)床信息窗口。

圖10 列表形式的機(jī)床信息管理

圖11 “添加機(jī)床信息”運(yùn)行窗口
圖11展示了“添加機(jī)床信息”功能,是系統(tǒng)基本維護(hù)功能的示例。當(dāng)單擊“機(jī)床型號(hào)編碼:”旁的下拉組合框時(shí),系統(tǒng)會(huì)給出所有機(jī)床類(lèi)型編碼和名稱(chēng)的列表供使用者選擇,當(dāng)選擇某種類(lèi)型機(jī)床時(shí),該類(lèi)型機(jī)床的操作系統(tǒng)、主軸速度、生產(chǎn)廠(chǎng)家等基本信息會(huì)根據(jù)“機(jī)床型號(hào)信息”數(shù)據(jù)表的內(nèi)容自動(dòng)填充,因此這些文本框都設(shè)置為只讀狀態(tài),不允許用戶(hù)自己添加。
圖12展示了在指定的時(shí)間段在2號(hào)機(jī)床批量加工的所有“產(chǎn)品-工序”的制造人、機(jī)床、制造時(shí)間、產(chǎn)品編號(hào)、工序名和加工數(shù)量等產(chǎn)品工序的批量加工查詢(xún)信息。
圖13展示了在指定時(shí)間段內(nèi),對(duì)于1號(hào)機(jī)床,以機(jī)床為主序的機(jī)床批量加工數(shù)量的分類(lèi)匯總。其說(shuō)明在設(shè)定時(shí)間段內(nèi)這臺(tái)機(jī)床只加工了1號(hào)產(chǎn)品,加工的工序有數(shù)控車(chē)二序、數(shù)控車(chē)三序和數(shù)控車(chē)一序其中數(shù)控車(chē)一序有兩個(gè)人在這臺(tái)機(jī)床完成,總計(jì)為11臺(tái),設(shè)定時(shí)間段內(nèi)這臺(tái)機(jī)床總計(jì)加工零件數(shù)為15。
本文所構(gòu)建的數(shù)控機(jī)床遠(yuǎn)程運(yùn)行監(jiān)控與信息管理系統(tǒng)從數(shù)控企業(yè)實(shí)際需求出發(fā),改進(jìn)了將現(xiàn)場(chǎng)批量加工產(chǎn)品的機(jī)床、工序、工人、時(shí)間和數(shù)量信息完整記錄的算法,并就算法的邏輯進(jìn)行了系統(tǒng)測(cè)試,說(shuō)明該算法具有科學(xué)性、準(zhǔn)確性和實(shí)用性。其建立了完整的數(shù)據(jù)模型,整個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)科學(xué)合理,能部分滿(mǎn)足企業(yè)根據(jù)自身情況定制系統(tǒng)基礎(chǔ)數(shù)據(jù)的要求,系統(tǒng)實(shí)現(xiàn)了企業(yè)基本數(shù)據(jù)和生產(chǎn)過(guò)程數(shù)據(jù)的維護(hù)、查詢(xún)和統(tǒng)計(jì)等綜合功能。考慮到系統(tǒng)信息通信安全和企業(yè)目前的主要需求,此系統(tǒng)暫時(shí)只實(shí)現(xiàn)了遠(yuǎn)程監(jiān)測(cè)功能而沒(méi)有涉及遠(yuǎn)程控制功能,下一步的工作,將考慮利用數(shù)控機(jī)床系統(tǒng)提供的開(kāi)放接口中包含的一系列寫(xiě)入機(jī)床信息的函數(shù),探索真正實(shí)現(xiàn)數(shù)控機(jī)床的遠(yuǎn)程控制功能。

圖12 “查詢(xún)工人操作機(jī)床批量加工產(chǎn)品信息”運(yùn)行效果

圖13 “統(tǒng)計(jì)工人操作機(jī)床批量加工產(chǎn)品信息”運(yùn)行效果