蘇春燕 孟祥懿 崔建輝
(①天津中德應(yīng)用技術(shù)大學(xué),天津 300350;②天津市鑫聯(lián)建輝金屬制品有限公司,天津 301505)
信息物理系統(tǒng)(Cyber-Physical Systems,CPS)是一個(gè)綜合計(jì)算、網(wǎng)絡(luò)和物理環(huán)境的多維復(fù)雜系統(tǒng),可實(shí)現(xiàn)大型工程系統(tǒng)的實(shí)時(shí)感知、動(dòng)態(tài)控制和信息服務(wù)?;贑PS的智能制造系統(tǒng)已經(jīng)成為國內(nèi)外當(dāng)前智能制造領(lǐng)域的研究熱點(diǎn)[1]。而數(shù)控機(jī)床是制造過程的基本單位,是智能化、信息化制造不可或缺的一部分[2],圍繞CPS技術(shù)體系,目前已有一些探索用計(jì)算機(jī)聯(lián)網(wǎng)數(shù)控機(jī)床進(jìn)行運(yùn)行監(jiān)控、數(shù)據(jù)采集和數(shù)據(jù)處理的文章,但其中對(duì)利用信息技術(shù)自動(dòng)記錄機(jī)床批量加工的產(chǎn)品編號(hào)、數(shù)量及時(shí)間等信息以供查詢和統(tǒng)計(jì)的研究很少,對(duì)運(yùn)行監(jiān)控與生產(chǎn)過程管理的綜合系統(tǒng)實(shí)現(xiàn)的研究也較少。本文設(shè)計(jì)的系統(tǒng)在這方面做了探索和研究,其采用C/S開發(fā)框架,使用Visual C#語言、配合SQL Server數(shù)據(jù)庫管理系統(tǒng)開發(fā)。保證只有在企業(yè)內(nèi)安裝了系統(tǒng)程序的計(jì)算機(jī)才能監(jiān)控機(jī)床運(yùn)行并記錄和管理機(jī)床信息,因此能較好地保證系統(tǒng)運(yùn)行和數(shù)據(jù)的安全性。
在調(diào)研企業(yè)生產(chǎn)實(shí)際情況和企業(yè)對(duì)信息系統(tǒng)需求基礎(chǔ)上,系統(tǒng)功能設(shè)計(jì)如圖1所示。其中①所標(biāo)注的是只有超級(jí)用戶有權(quán)限使用的功能,而②所標(biāo)注的是只有管理用戶有權(quán)限使用的功能,其他是所有用戶都能使用的功能。平臺(tái)的車間網(wǎng)絡(luò)分布拓?fù)浣Y(jié)構(gòu)如圖2所示,各個(gè)車間還可進(jìn)一步聯(lián)網(wǎng)到總監(jiān)控區(qū)統(tǒng)一監(jiān)控。
“實(shí)現(xiàn)由計(jì)算機(jī)系統(tǒng)自動(dòng)記錄每臺(tái)機(jī)床批量加工的產(chǎn)品編號(hào)、數(shù)量及時(shí)間等信息”是此系統(tǒng)的一個(gè)主要難點(diǎn)問題。系統(tǒng)對(duì)此問題的解決主要涉及以下3個(gè)方面。
機(jī)床批量加工信息的采集首先需要系統(tǒng)與機(jī)床聯(lián)網(wǎng)。由文獻(xiàn)[3-6]得到目前已有的數(shù)據(jù)采集方式主要有PLC采集、宏程序輸出、外加傳感器采集和開放式數(shù)控系統(tǒng)接口采集。其中開放式數(shù)控系統(tǒng)接口采集不需要附加硬件設(shè)備,可以實(shí)時(shí)采集不同類型機(jī)床信息,因此系統(tǒng)采用這種方式實(shí)現(xiàn)對(duì)機(jī)床聯(lián)網(wǎng)和數(shù)據(jù)讀取。
開放式數(shù)控系統(tǒng)接口,即數(shù)控機(jī)床的系統(tǒng)提供一組外部可以調(diào)用的開放函數(shù),以實(shí)現(xiàn)外部系統(tǒng)對(duì)其聯(lián)網(wǎng)和信息讀寫。這里以FANUC系統(tǒng)數(shù)控機(jī)床為例介紹,這類系統(tǒng)提供了FOCAS開發(fā)包,調(diào)用其定義的函數(shù)可實(shí)現(xiàn)機(jī)床與計(jì)算機(jī)的聯(lián)網(wǎng)通信。這些開發(fā)包中的函數(shù)允許用 C++或C#程序調(diào)用。文獻(xiàn)[7]中給出了FOCAS開放接口函數(shù)的使用說明。如果程序中使用這種通信方式,需要將該開發(fā)包提供的一組類庫文檔(如:Fwlib32.dll)復(fù)制到項(xiàng)目存放其生成可執(zhí)行文件的文件夾“……/debug”下,并將開發(fā)包提供的fwlib32.cs文件復(fù)制到項(xiàng)目的根目錄中[8],這個(gè)文件給出了包含訪問數(shù)控機(jī)床功能函數(shù)聲明的Focas1 類的定義,這些函數(shù)通常都定義為靜態(tài)、公有的,可以通過Focas1類名直接調(diào)用。另外,該類的定義中還包含相關(guān)類、類型和符號(hào)常量的聲明。
比如,F(xiàn)ocas1 類中的函數(shù)cnc_allclibhndl3()的作用是聯(lián)網(wǎng)指定機(jī)床,其調(diào)用方式是:
Focas1.cnc_allclibhndl3(機(jī)床IP地址 , 機(jī)床端口號(hào) , 延遲時(shí)間 , 連接帶回的庫句柄變量);
下面是判斷機(jī)床是否連接成功算法的偽碼描述:
ret= Focas1.cnc_allclibhndl3(……)
if (ret == Focas1.EW_OK)
顯示聯(lián)網(wǎng)成功消息框
else
顯示聯(lián)網(wǎng)失敗消息框
上面?zhèn)未a中Focas1.EW_OK 即為Focas1類中定義的符號(hào)常量EW_OK,其代表操作成功的標(biāo)記值。
又如,F(xiàn)ocas1 類中的函數(shù)cnc_freelibhndl()的常用調(diào)用方式是:
ret = Focas1.cnc_freelibhndl(連接帶回的庫句柄變量);
上面調(diào)用方式的作用是與“連接帶回的庫句柄變量”中指定的已聯(lián)網(wǎng)機(jī)床斷開連接,且將返回值存入變量ret。如果ret等于Focas1.EW_OK,也表示斷開成功。該函數(shù)參數(shù)對(duì)應(yīng)cnc_allclibhndl3()函數(shù)的第4個(gè)參數(shù)。
難點(diǎn)問題的解決還需要根據(jù)機(jī)床加工產(chǎn)品的特點(diǎn)研究一個(gè)算法,來確定并保存特定機(jī)床批量加工產(chǎn)品的數(shù)量等信息。
機(jī)床加工的產(chǎn)品常通過多道工序完成,數(shù)控機(jī)床的一個(gè)CNC程序負(fù)責(zé)一道工序。由于數(shù)控加工的工序相對(duì)集中[9],即數(shù)控機(jī)床上產(chǎn)品(工件)一次裝夾所完成的工序中,可加工完成鉆、擴(kuò)、絞和銑等這些普通
機(jī)床的多道工序,所以這里說的工序可能包括普通機(jī)床的多道工序。數(shù)控機(jī)床每運(yùn)行一次CNC程序即可完成產(chǎn)品某道工序的加工,這里的加工產(chǎn)品數(shù)是指產(chǎn)品的某道工序完成加工的數(shù)量。機(jī)床通常是讓某個(gè)工序?qū)?yīng)的CNC程序重復(fù)運(yùn)行來批量完成產(chǎn)品此工序的加工。每個(gè)數(shù)控機(jī)床都有一個(gè)計(jì)數(shù)器,記錄和顯示該機(jī)床加工產(chǎn)品累計(jì)數(shù)量。這里開發(fā)的系統(tǒng)假設(shè)的工作流程是單人單日在一單臺(tái)機(jī)床完成一批產(chǎn)品的加工任務(wù)后記錄下此產(chǎn)品-工序在這個(gè)機(jī)床批量加工的數(shù)量,并在下個(gè)批量加工任務(wù)開始前將計(jì)數(shù)器人為清零。
算法整體設(shè)計(jì)思路是建立一個(gè)獨(dú)立線程,在此線程中根據(jù)數(shù)控機(jī)床數(shù)據(jù)表中記錄的每個(gè)機(jī)床的IP地址和端口號(hào)循環(huán)掃描、聯(lián)網(wǎng)各機(jī)床,并利用機(jī)床提供的開放接口函數(shù)從當(dāng)前聯(lián)網(wǎng)機(jī)床計(jì)數(shù)器讀取累計(jì)加工產(chǎn)品數(shù)量,再將這個(gè)加工數(shù)量及工序CNC程序號(hào)、機(jī)床號(hào)和觀測時(shí)間自動(dòng)存入“產(chǎn)品工序加工記錄信息表”,即history表,這些信息可在此系統(tǒng)的信息管理中修改或刪除等,其也可為統(tǒng)計(jì)工人工作量提供參考數(shù)據(jù)。
算法具體設(shè)計(jì)是,對(duì)于一臺(tái)機(jī)床如果出現(xiàn)計(jì)數(shù)器清零(即同一工序新讀取的加工數(shù)小于數(shù)據(jù)表中存儲(chǔ)的加工數(shù))、運(yùn)行的CNC程序改變或新的一天開始等條件,則表示一個(gè)新的批量加工開始。此時(shí),系統(tǒng)就在history表中添加一條記錄此批量加工的CNC程序號(hào)、機(jī)床號(hào)和加工數(shù)量等的新記錄,否則表示繼續(xù)原來的批量加工,就只修改其對(duì)應(yīng)記錄的加工數(shù)、觀測時(shí)間的信息。此外智能判斷和提示機(jī)床批量加工前計(jì)數(shù)器未清零的情況。
記錄一臺(tái)機(jī)床在一個(gè)時(shí)間段內(nèi)、批量加工某產(chǎn)品工序的加工數(shù)算法的實(shí)現(xiàn)邏輯較復(fù)雜,這里用圖3流程圖說明。其設(shè)計(jì)前提是系統(tǒng)每掃描一遍所有機(jī)床的時(shí)間小于機(jī)床任意工序的裝夾與加工處理時(shí)間之和。
系統(tǒng)設(shè)計(jì)了機(jī)床的產(chǎn)品工序加工記錄信息表history、產(chǎn)品工序信息表proProcedure、工人信息表makerInfo和機(jī)床基本信息表cncInfo,通過這些表的關(guān)聯(lián)來記錄和處理機(jī)床的批量加工信息。其中history表包括ID、makerID、cncID、proProcedID、watchTime和quantity字段,它們依次表示記錄編號(hào)、工人編號(hào)、機(jī)床序號(hào)、產(chǎn)品工序編號(hào)、觀察時(shí)間和加工產(chǎn)品數(shù)量。
這里主要測試圖3算法邏輯是否正確。假設(shè)測試前“產(chǎn)品工序信息表proProcedure” 的具體內(nèi)容如表1所示,而history表的記錄為空,“機(jī)床基本信息表cncInfo”所列機(jī)床中只有編號(hào)為2和3的2臺(tái)機(jī)床處于聯(lián)網(wǎng)狀態(tài)。
表1 系統(tǒng)產(chǎn)品工序信息數(shù)據(jù)表proProcedure 內(nèi)容
測試基本操作:選擇“聯(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í)所有聯(lián)網(wǎng)機(jī)床的基本信息以圖4展示的列表信息顯示,如果單擊此圖窗口中的“停止掃描聯(lián)網(wǎng)所有機(jī)床”按鈕,即可停止循環(huán)掃描。進(jìn)行邏輯功能測試前,首先啟動(dòng)“聯(lián)網(wǎng)所有機(jī)床”功能。
邏輯測試1:將2臺(tái)數(shù)控機(jī)床加工產(chǎn)品工序的工序名均指定為“O1000”, 啟動(dòng)機(jī)床加工工序,當(dāng)兩臺(tái)機(jī)床計(jì)數(shù)器的值都為1時(shí)暫停機(jī)床,此時(shí)history表內(nèi)容如表2所示。從表1可知工序名為“O1000”的“產(chǎn)品工序序號(hào)”是“1”,因此表2中proProcedID字段值為“1”。由于不能自動(dòng)采集操作工人信息,這里 makerID的值設(shè)置為默認(rèn)值“0000”, 可使用此軟件系統(tǒng)手動(dòng)輸入真正操作機(jī)床的工人編號(hào)。
表2 運(yùn)行測試1后history數(shù)據(jù)表內(nèi)容
邏輯測試2:啟動(dòng)2臺(tái)數(shù)控機(jī)床加工程序,當(dāng)其計(jì)數(shù)器值均為5時(shí)暫停運(yùn)行,此時(shí)由于在同一工作日,機(jī)床CNC程序沒有變化,仍然為“O1000”,計(jì)數(shù)器的值有所增加,系統(tǒng)判定這是同一次批量加工,所以history表中記錄的quantity字段值由“1”變?yōu)椤?”。
邏輯測試3:將2臺(tái)數(shù)控機(jī)床的計(jì)數(shù)器值都清零,啟動(dòng)加工程序,當(dāng)兩臺(tái)機(jī)床計(jì)數(shù)器值為1時(shí)暫停運(yùn)行,此時(shí)雖然機(jī)床的 CNC程序沒有變化,但計(jì)數(shù)器的值由5變1,減少了,系統(tǒng)就判定已經(jīng)開始了一次新的批量加工,所以history表中會(huì)多出2條分別表示兩臺(tái)機(jī)床批量加工產(chǎn)品信息的新記錄,其quantity字段值為當(dāng)時(shí)機(jī)床計(jì)數(shù)器的值“1”。
邏輯測試4:將2臺(tái)數(shù)控機(jī)床加工產(chǎn)品工序的工序名均指定為“O1001”, 并清零計(jì)數(shù)器的值,啟動(dòng)機(jī)床加工,當(dāng)兩臺(tái)機(jī)床計(jì)數(shù)器值為2時(shí)暫停機(jī)床,此時(shí)由于工序名改變,系統(tǒng)確定一次新的批量加工開始,所以history表中會(huì)再次多出兩條分別表示這兩臺(tái)機(jī)床批量加工產(chǎn)品信息的新記錄,其quantity字段值為當(dāng)時(shí)機(jī)床計(jì)數(shù)器的值2。從表1可知工序名為“O1001”的“產(chǎn)品工序序號(hào)”是“2”,因此新增兩條記錄的proProcedID字段值為“2”。
邏輯測試5:啟動(dòng)其中1臺(tái)數(shù)控機(jī)床的加工運(yùn)行,當(dāng)這臺(tái)機(jī)床計(jì)數(shù)器數(shù)值為3時(shí)暫停,此時(shí)由于工序名沒有變,兩臺(tái)機(jī)床當(dāng)前計(jì)數(shù)器值均大于或等于以前的值,系統(tǒng)判定這是同一次批量加工,所以history表中測試4中新增的兩條記錄的quantity字段值一個(gè)不變,另一個(gè)變?yōu)樾碌臋C(jī)床計(jì)數(shù)器值“3”。
邏輯測試6:修改計(jì)算機(jī)系統(tǒng)時(shí)間為后面新的1天,將其中1臺(tái)機(jī)床加工產(chǎn)品工序的工序名指定為“O1002”, 另1臺(tái)工序名不變,清零這2臺(tái)機(jī)床計(jì)數(shù)器值,然后啟動(dòng)機(jī)床加工運(yùn)行,當(dāng)其計(jì)數(shù)器值都為2時(shí)暫停機(jī)床運(yùn)行,此時(shí)由于系統(tǒng)時(shí)間為后面新的1天,無論工序名是否改變,系統(tǒng)都判斷是一次新的批量加工,history表會(huì)又一次增加新的兩條信息來記錄這兩個(gè)新增批量加工。
邏輯測試7:將2臺(tái)機(jī)床加工產(chǎn)品工序的工序名指定為“O1007”, 再啟動(dòng)機(jī)床加工運(yùn)行,當(dāng)計(jì)數(shù)器值為1時(shí)暫停,此時(shí)history表內(nèi)容不變,且系統(tǒng)運(yùn)行窗口下方文本區(qū)給出“該工序 CNC程序不存在”的提示信息。這是由于從表1可知系統(tǒng)沒有工序名為“O1007”的產(chǎn)品工序。
以上是算法邏輯主要的運(yùn)行測試,其他如新的一次批量加工開始前沒有清零機(jī)床的計(jì)數(shù)器值時(shí),系統(tǒng)會(huì)給出計(jì)數(shù)器可能沒有清零的提示信息,這里不再一一列舉測試結(jié)果。
(1)機(jī)床聯(lián)網(wǎng)狀態(tài)顯示與管理功能測試示例
運(yùn)行系統(tǒng)的“機(jī)床信息管理與聯(lián)通顯示”功能,在其窗口單擊“顯示機(jī)床狀態(tài)”按鈕時(shí),此按鈕變?yōu)椤巴V範(fàn)顟B(tài)掃描”,同時(shí)系統(tǒng)掃描、試聯(lián)網(wǎng)所有機(jī)床信息數(shù)據(jù)表中的機(jī)床,以不同圖標(biāo)顯示其是否成功聯(lián)網(wǎng)。效果如圖5所示,顯示有2臺(tái)機(jī)床是亮色,表示其成功聯(lián)網(wǎng),其他圖標(biāo)為暗色,表示沒有聯(lián)通。
在圖5所示窗口,如果停止?fàn)顟B(tài)掃描,所有按鈕就變?yōu)榭捎脿顟B(tài),當(dāng)單擊“修改機(jī)床”按鈕,出現(xiàn)“修改機(jī)床信息”窗口,此時(shí)如果單擊“機(jī)床型號(hào)編碼:”旁的下拉組合框,系統(tǒng)會(huì)彈出所有機(jī)床類型編碼和名稱的下拉列表供選擇,當(dāng)選中下拉列表中的某個(gè)機(jī)床類型時(shí),該類型機(jī)床的操作系統(tǒng)、主軸速度、生產(chǎn)廠家等基本信息會(huì)根據(jù)“機(jī)床型號(hào)信息”數(shù)據(jù)表的內(nèi)容自動(dòng)填充,因此這些文本框顯示為灰色不可編輯狀態(tài),效果如圖6所示。
(2)運(yùn)行與使用情況在線監(jiān)測測試
如果在“機(jī)床選擇與聯(lián)網(wǎng)”功能中選擇聯(lián)網(wǎng)了3號(hào)機(jī)床,當(dāng)運(yùn)行系統(tǒng)的“機(jī)床使用與報(bào)警情況”,出現(xiàn)圖7所示窗口,顯示這臺(tái)機(jī)床的此類信息;當(dāng)運(yùn)行系統(tǒng)的“機(jī)床坐標(biāo)與運(yùn)行監(jiān)控”,出現(xiàn)圖8所示窗口,顯示了這臺(tái)機(jī)床的此類信息。
(3)工人操作機(jī)床批量加工“產(chǎn)品-工序”情況查詢、統(tǒng)計(jì)測試
運(yùn)行“工人操作機(jī)床加工產(chǎn)品記錄信息查詢”功能,出現(xiàn)其查詢窗口。從“制造人:”旁的下拉組合框中選擇“(004)張晨迪”列表項(xiàng),并指定起止時(shí)間,單擊“查詢”按鈕,出現(xiàn)圖9所示查詢效果。
運(yùn)行“工人操作機(jī)床加工產(chǎn)品記錄信息統(tǒng)計(jì)”功能,出現(xiàn)其統(tǒng)計(jì)窗口。從“產(chǎn)品-工序名:”旁的下拉組合框中選擇一個(gè)列表項(xiàng),再指定統(tǒng)計(jì)的起止時(shí)間,單擊右側(cè)“按產(chǎn)品-工序?yàn)橹餍蛟谥付〞r(shí)間內(nèi)統(tǒng)計(jì)”列表項(xiàng),會(huì)出現(xiàn)圖10所示的統(tǒng)計(jì)效果,顯示這個(gè)“產(chǎn)品-工序”在指定時(shí)間內(nèi)不同人的加工數(shù)量匯總和整體匯總值“26”,如果同一制造人在不同機(jī)床上都有多次批量加工,還會(huì)多出現(xiàn)一個(gè)層級(jí)的分類匯總。
(4)顯示機(jī)床運(yùn)行情況測試
運(yùn)行“瀏覽所有機(jī)床基本運(yùn)行加工情況”功能,在其窗口中單擊“顯示機(jī)床運(yùn)行情況”按鈕,其顯示變?yōu)椤八⑿聶C(jī)床運(yùn)行情況”,且以列表形式顯示所有聯(lián)網(wǎng)機(jī)床的當(dāng)前加工零件的程序信息和已加工數(shù)量等,效果如圖11所示。
本文所構(gòu)建的聯(lián)網(wǎng)數(shù)控機(jī)床運(yùn)行監(jiān)控與信息管理系統(tǒng)從數(shù)控企業(yè)實(shí)際需求出發(fā),解決了將現(xiàn)場批量加工產(chǎn)品的機(jī)床、工序、工人、時(shí)間和數(shù)量信息完整記錄的算法問題,并就算法的邏輯進(jìn)行了系統(tǒng)測試,說明該算法具有科學(xué)性和實(shí)用性。整個(gè)系統(tǒng)實(shí)現(xiàn)了數(shù)控機(jī)床運(yùn)行實(shí)時(shí)監(jiān)控、生產(chǎn)過程管理和機(jī)床等基本信息管理有機(jī)融合,同時(shí)具有良好的安全性、通用性和易用性,可以為企業(yè)運(yùn)行維護(hù)和科學(xué)管理提供技術(shù)支撐,具有較高的實(shí)用價(jià)值,是用計(jì)算機(jī)系統(tǒng)對(duì)數(shù)控機(jī)床實(shí)時(shí)監(jiān)控和信息管理的一次有益嘗試。