李淑梅 李星
摘 要:本文提出了一種新型移動網(wǎng)絡數(shù)控系統(tǒng),基于Android智能移動設備,遵循當下盛行的無線傳輸協(xié)議,以自主開發(fā)的移動數(shù)控APP作為控制客戶端,以工業(yè)IPC及無線串口服務器作為服務端,采用面向連接的TCP Socket通信,實現(xiàn)了數(shù)據(jù)傳輸?shù)目煽啃院蛯崟r性,完成了新型網(wǎng)絡數(shù)控系統(tǒng)的DNC、部分遠程監(jiān)控及診斷功能,對數(shù)控技術(shù)的智能化與移動化有一定的推動作用。
關(guān)鍵詞:移動網(wǎng)絡數(shù)控;Android移動設備;無線傳輸;遠程監(jiān)控;移動化
Abstract:A new type of mobile network numeric control system based on Android smart mobile devices is proposed in this paper,it follows the current prevalence of wireless transfer protocol,keeps the movement of the self-developed CNC APP as control client and industrial IPC and wireless serial port server as the server,uses a connection-oriented TCP SOCKET communication,and has realized the real time and reliability of data transmission,completed a new network numerical control system of the DNC and part of the remote monitoring and diagnosis function,it has a certain role in promoting intelligent of numerical control technology and mobile.
Key words:Mobile network NC system;Android mobile devices;wireless transmission;remote monitor;mobile
隨著先進制造技術(shù)以及互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,數(shù)控機床與網(wǎng)絡及通信技術(shù)相結(jié)合,形成智能化、可移動的分布式數(shù)控系統(tǒng)無疑是數(shù)控技術(shù)發(fā)展的必然趨勢。[1,2]而作為移動互聯(lián)網(wǎng)時代的標志性代表產(chǎn)物,智能手機及平板電腦等已然超越PC,成為廣受推崇的智能移動終端設備?;贏ndroid操作系統(tǒng)的智能移動設備更是占據(jù)了全球智能移動80%以上的市場份額。目前,在國內(nèi)外,主要有三類形式的基于無線通信技術(shù)的網(wǎng)絡數(shù)控系統(tǒng),分別是基于手機GSM短消息業(yè)務、基于藍牙傳輸以及基于手機WEB瀏覽器的移動網(wǎng)絡數(shù)控系統(tǒng)。[3,4]但這三類數(shù)控系統(tǒng)因其在實時性、穩(wěn)定性以及數(shù)據(jù)吞吐量等方面的不足,并未被業(yè)內(nèi)所認可采納。
本文在以往網(wǎng)絡數(shù)控系統(tǒng)開發(fā)研究的基礎上,提出了一種基于Android智能移動設備的新型移動網(wǎng)絡數(shù)控系統(tǒng),該系統(tǒng)遵循WAP及IEEE802.11b無線傳輸協(xié)議,以全新自主開發(fā)的手機APP為移動控制客戶端,以集成了數(shù)字IO卡的IPC及無線串口服務器為數(shù)控服務端,采用基于TCP/IP的SOCKET網(wǎng)絡通信方式,在自定義應用層通信協(xié)議的基礎上,保證了數(shù)據(jù)傳輸?shù)目煽啃浴崟r性以及大的數(shù)據(jù)吞吐量,有望實現(xiàn)真正意義上的移動式智能化網(wǎng)絡數(shù)控系統(tǒng),同時提出了引入NAPT穿墻技術(shù)以實現(xiàn)移動網(wǎng)絡數(shù)控系統(tǒng)在廣域網(wǎng)內(nèi)的遠程監(jiān)控。
1 新型網(wǎng)絡數(shù)控系統(tǒng)的整體架構(gòu)
1.1 硬件架構(gòu)
新型網(wǎng)絡數(shù)控系統(tǒng)的硬件部分主要由6個模塊構(gòu)成,分別是移動控制客戶端、移動控制服務端、中心網(wǎng)絡提供者、簡易數(shù)控系統(tǒng)端、數(shù)據(jù)庫服務端以及CAD/CAM工作站。其整體架構(gòu)圖如圖1所示。
其中,移動控制客戶端可以是各類基于Android操作系統(tǒng)的智能手機、平板電腦等。移動控制客戶端用于與移動控制服務端進行數(shù)據(jù)交互,包括運動控制命令的交互、間接訪問數(shù)據(jù)庫的交互、DNC傳輸?shù)慕换ヒ约芭c用戶的良好互動等。
移動控制服務端由內(nèi)置數(shù)字IO卡的工控機IPC構(gòu)成,它是與簡易數(shù)控系統(tǒng)端、數(shù)據(jù)庫服務器、CAD/CAM工作站以及移動控制客戶端進行交互的直接操作者,也是中間人,通過移動控制服務端,其余四者可以進行間接的友好互動。
中心網(wǎng)絡提供者即無線路由器,它將移動控制客戶端、移動控制服務端、數(shù)據(jù)庫服務端以及簡易數(shù)控系統(tǒng)端連結(jié)成一個小型局域網(wǎng),使局域網(wǎng)內(nèi)各主機具備無線通信渠道,各主機處于同一網(wǎng)段,可實現(xiàn)實時穩(wěn)定的數(shù)據(jù)傳輸,同時網(wǎng)絡提供者可通過網(wǎng)絡交換機等標準網(wǎng)絡設備與外網(wǎng)建立連接,在后續(xù)引入NAPT穿墻技術(shù)后,可實現(xiàn)SOCKET通信情況下外網(wǎng)自由訪問內(nèi)網(wǎng)設備,達到組建真正的廣域網(wǎng)移動數(shù)控系統(tǒng)的目的,即使操作人員在遙遠的外地,也能對數(shù)控機床進行遠程操作與監(jiān)控。
簡易數(shù)控系統(tǒng)端由數(shù)控系統(tǒng)加無線串口服務器構(gòu)成。無線串口服務器主要用于將數(shù)控系統(tǒng)的串口通訊轉(zhuǎn)換為有線或無線TCP/IP通訊,使數(shù)控系統(tǒng)具有無線聯(lián)網(wǎng)功能。雖然數(shù)控系統(tǒng)本身有RJ45接口,可實現(xiàn)有線網(wǎng)絡連入,但以這種形式連入網(wǎng)絡,則一臺數(shù)控設備需要一臺IPC,配置成本提高,而且也增加了布線維護的難度。綜上考慮,決定采用無線連入方式,一臺IPC可同時控制數(shù)臺數(shù)控系統(tǒng),且省去布線維護的困難,完全采用無線控制,經(jīng)濟簡單。
數(shù)據(jù)庫建立在本地PC上,將本地PC作為服務器,操作系統(tǒng)可采用WINDOWS XP或者WIN7。因數(shù)據(jù)量并不是很大,因此對本地PC沒有特別要求。數(shù)據(jù)庫服務器作為提供給移動控制服務端讀寫的倉庫,存儲著客戶端、服務端、以及工作站等的大量數(shù)據(jù),在該系統(tǒng)中舉足輕重。
CAD/CAM工作站用于CAD/CAM軟件生成加工NC代碼,通過無線或有線傳輸發(fā)往移動控制服務端,由移動控制服務端統(tǒng)一提交至數(shù)據(jù)庫保存。
1.2 軟件架構(gòu)
新型移動網(wǎng)絡數(shù)控系統(tǒng)的軟件部分主要由3個模塊構(gòu)成,分別為移動控制APP模塊、移動控制C++服務器模塊以及數(shù)據(jù)庫管理模塊:
(1)移動控制APP模塊主要是與移動控制服務端進行數(shù)據(jù)交互,以達到對數(shù)控系統(tǒng)的簡單實時控制、機床加工位置點的實時傳輸顯示、DNC傳輸功能的實現(xiàn)、機床信息及機床加工狀態(tài)、IO狀態(tài)、PLC狀態(tài)、伺服狀態(tài)等的查詢與修改等;
(2)移動控制C++服務器模塊除了負責讀寫伺服狀態(tài)、IO狀態(tài)以及PLC狀態(tài)等以外,還負責將讀寫到的數(shù)控系統(tǒng)數(shù)據(jù)提交至服務器,并響應客戶端的數(shù)據(jù)庫操作請求,對數(shù)據(jù)庫進行讀寫操作,并返回狀態(tài)至客戶端顯示存儲;
(3)數(shù)據(jù)庫管理模塊則與上述數(shù)據(jù)庫服務器功能一致,在此不再贅述。數(shù)據(jù)庫管理模塊主要用于定時存儲機床加工狀態(tài)、PLC狀態(tài)、IO狀態(tài)、伺服反饋、加工程序、用戶信息以及加工歷史數(shù)據(jù)等。
2 網(wǎng)絡數(shù)控系統(tǒng)的整體實現(xiàn)
新型網(wǎng)絡數(shù)控系統(tǒng)的硬件選擇已經(jīng)在整體架構(gòu)里做了詳細的闡述,而硬件本身的配置及安裝等難度一般,本節(jié)主要介紹軟件部分的具體實現(xiàn)。
2.1 移動控制APP模塊
操作系統(tǒng)采用Windows 8.1,該操作系統(tǒng)具有良好的向下兼容性。開發(fā)語言采用JAVA,開發(fā)環(huán)境采用Android Studio1.0,該IDE基于IntelliJ IDEA,是Google于2014年8月推出的專為Android開發(fā)而生的集成環(huán)境。使用該IDE可以完成APP在不同屏幕尺寸下的適配,使開發(fā)者開發(fā)的APP可以安裝在目前大多數(shù)主流智能移動設備上。移動控制APP模塊的構(gòu)成如圖2所示。
其中公共包主要包括一些全局配置常量、公用方法以及公用實體類,這些內(nèi)容用于APP全局共享。用戶自管理模塊主要包括用戶個人信息的展示、用戶自定義系統(tǒng)配置參數(shù)的保存與修改以及用戶個人數(shù)控機群的自我管理等。
工具庫包含了幾個最重要的工具類的定義與實現(xiàn)。其中SocketUtils是用于Android客戶端與移動控制服務端進行數(shù)據(jù)交互的網(wǎng)絡通信庫,NetPacketUtils是用于網(wǎng)絡數(shù)據(jù)封包解包的工具類,而DBUtils則是用于Android客戶端遠程操作SQL SERVER數(shù)據(jù)庫的工具類。網(wǎng)絡數(shù)控技術(shù)的關(guān)鍵問題在于研究數(shù)控系統(tǒng)的網(wǎng)絡通信功能。[5-7]以下列出其中兩個類庫的主要屬性與行為,并做出相應解釋。
public class SocketUtils
{
private Socket sockClient;//用于與服務端通信的套接字實例
private static BufferedReader bufferReader;//用于讀取網(wǎng)絡數(shù)據(jù)的輸入流
private static PrintWriter printWriter;//用于寫入網(wǎng)絡數(shù)據(jù)的輸出流
private static final int NMSG=0x01;//數(shù)據(jù)包消息常量
private static final int NFILE=0x02;//數(shù)據(jù)包消息常量
private static final int NCONTROL=0x03;//數(shù)據(jù)包消息常量
private static final int NDBUTIL=0x04;//數(shù)據(jù)包消息常量
private boolean initSocket(){} //初始化套接字方法
private boolean openReader(Socket sock){} //獲取字符輸入流方法
private boolean openWriter(Socket sock){} //獲取字符輸出流方法
private void closeSocket(){} //關(guān)閉套接字方法
private void closeReader(){} //關(guān)閉輸入流方法
private void closeWriter(){} //關(guān)閉輸出流方法
public BufferedReader getReader(){} //向外提供輸入流接口
public PrintWriter getWriter(){} //向外提供輸出流接口
......
}
客戶端與服務端數(shù)據(jù)交互是通過SOCKET TCP套接字進行的。TCP連接是面向連接的傳輸層協(xié)議,保證數(shù)據(jù)到達對端的可靠性以及有序性,因此不用擔心數(shù)據(jù)丟失的問題。套接字就好比一條管道,數(shù)據(jù)好比水流,只有在管道建立好的情況下,水流才能到達對方。因此,必須通過initSocket方法傳遞服務端IP及開放端口,聯(lián)通服務端,而后在openReader與openWriter方法中通過套接字實例獲得IO流,其后便可以開始進行數(shù)據(jù)收發(fā)。在數(shù)據(jù)收發(fā)完畢之后,調(diào)用closeReader與closeWriter方法回收IO流資源,并關(guān)閉套接字。而getReader與getWriter是用于數(shù)據(jù)收發(fā)時對外提供的接口。
public class NetPacketUtils
{
private byte[]sMsgBuf;//接收數(shù)據(jù)緩沖區(qū)
private int nBufSize;//緩沖區(qū)總大小
private int nOffset;//緩沖區(qū)數(shù)據(jù)大小
private NetPacket netPacket;//網(wǎng)絡數(shù)據(jù)包對象
private NetPacketHead netPacketHead;//網(wǎng)絡數(shù)據(jù)包包頭對象
private boolean isFullPacket(){} //判斷是否滿包方法
private boolean isValidPacket(){} //判斷是否為無效包方法
private boolean reBufSize(int nLen){} //重新調(diào)整緩沖區(qū)大小方法
private void addMsg(byte[]sBuf,int nLen){} //向緩沖區(qū)添加數(shù)據(jù)方法
public NetPacket recvPacket(Socket sock,BufferedReader reader){} //接收數(shù)據(jù)包方法
public void sendPacket(Socket sock,PrintWriter writer){} //發(fā)送數(shù)據(jù)包方法
......
}
TCP傳輸雖然可以保證數(shù)據(jù)傳輸?shù)目煽啃耘c有序性,但因為TCP底端實現(xiàn)采用了Nagle算法,數(shù)據(jù)到達對端時有可能發(fā)生半包、粘包等問題,[8]所以必須自己制定應用層通信協(xié)議,完善收發(fā)包機制。數(shù)據(jù)包包括包頭和包體,其中包頭是具有固定長度的一個類,類中封裝了數(shù)據(jù)包類型、文件類型、命令類型以及包體長度等屬性,通過提取包頭中的包體長度屬性,就可以確定一個數(shù)據(jù)包的大小,如此就可以實現(xiàn)收發(fā)變長包的機制。經(jīng)過實測,數(shù)據(jù)收發(fā)良好且沒有丟失數(shù)據(jù)的現(xiàn)象。而NetPacketUtils的作用就是構(gòu)造好數(shù)據(jù)包對象,通過網(wǎng)絡通信庫SocketUtils對外提供的IO流,調(diào)用recvPacket與sendPacket方法進行數(shù)據(jù)包接收與發(fā)送。
UI模塊共劃分為五個主要頁面?!笆醉摗表撁媸怯脩魴C群自管理區(qū),按車床、銑床、磨床、鉆床、加工中心分為五大類,客戶可以自行添加、修改或刪除機群信息。該機群信息只匹配該用戶本身,與其他用戶無關(guān)?!拔恢谩表撁媸荄NC控制區(qū),用戶可以通過該頁面的文件選擇區(qū)域,從本地或者數(shù)據(jù)庫選擇加工程序文件,并確認實時發(fā)送到數(shù)控機床端,完成NC代碼的傳輸,同時,該頁面在后臺開啟了收發(fā)service,用戶可在該頁面實時瀏覽當前加工位置的絕對和相對坐標,當加工結(jié)束時,APP將彈出提示對話框,詢問用戶是否以文件形式保存加工歷史,加工歷史將同時提交至SQL SERVER數(shù)據(jù)庫和Android自帶輕便型sqlite數(shù)據(jù)庫,用戶也可打開頁面右上角的ActionBar,開啟遠程視頻監(jiān)控模塊,兩者結(jié)合可實現(xiàn)遠程監(jiān)控功能。“添加”頁面是提供給用戶添加具體機床信息的區(qū)域,在該區(qū)域提交之后,會將數(shù)據(jù)存入數(shù)據(jù)庫,同時該頁面還會定時讀取服務端伺服狀態(tài)、IO狀態(tài)以及其他PLC狀態(tài)等刷新顯示在該頁面,用戶修改的數(shù)據(jù)也會寫入到移動數(shù)控服務端?!翱刂啤表撁嬷饕獙崿F(xiàn)簡單的運動控制功能,包括機床的開啟關(guān)閉復位、機床以固定位移向某一軸移動以及移動時的速度倍率調(diào)整。“我的”頁面主要是用戶個人信息,這些信息同樣會存入數(shù)據(jù)庫。其中兩個界面效果如圖3所示。
業(yè)務邏輯模塊劃分成實體操作區(qū)、DNC操作區(qū)以及視頻監(jiān)控區(qū)。實體操作區(qū)實現(xiàn)各項對數(shù)據(jù)庫的具體操作,DNC操作區(qū)借助SocketUtils及NetPacketUtils完成NC代碼的上傳與下載,視頻監(jiān)控區(qū)也通過上述工具類,接收來自移動控制服務端的動畫數(shù)據(jù)幀,并以Android自帶的MediaPlayer播放監(jiān)控視頻,以方便用戶結(jié)合視頻信息與PLC狀態(tài)、IO狀態(tài)等參數(shù)信息進行遠程監(jiān)控及診斷,進一步實現(xiàn)數(shù)控系統(tǒng)的移動化與智能化。
2.2 移動控制C++服務器模塊
移動控制C++服務器模塊主要負責與多個客戶端進行通信,處理各客戶端對數(shù)據(jù)庫的讀寫操作請求、處理各客戶端讀寫數(shù)字IO卡的操作以及定時讀取PCL/IO/伺服等狀態(tài)信息等,對于界面要求不高,但服務器模塊必須具備強大的數(shù)據(jù)處理能力。服務端程序開發(fā)基于.NET FrameWork,開發(fā)環(huán)境采用Visual Studio2010,開發(fā)語言采用C++。實際處理時,運用多線程并發(fā)處理,采用同步套接字的方式,為每個客戶端連接建立收發(fā)線程,實現(xiàn)了多線程雙通道同步收發(fā)數(shù)據(jù)的機制,在大數(shù)據(jù)吞吐情況下也能實現(xiàn)自如收發(fā)。其收發(fā)流程如下圖4。
從圖中可以看出,服務端每接收到一個客戶端連接,就為該客戶端創(chuàng)建一個通信SOCKET,同時創(chuàng)建收發(fā)線程用于數(shù)據(jù)收發(fā)。這種情況在程序里表現(xiàn)為一個結(jié)構(gòu)體,其屬性如下:
struct sockForClient
{
SOCKET sockClient[MAX_CLIENT_NUM];//用于與客戶端通信的套接字句柄
SOCKADDR_IN addFrom[MAX_CLIENT_NUM];//保存客戶端地址信息的結(jié)構(gòu)體
HANDLE hRecvThread[MAX_CLIENT_NUM];//接收線程句柄
HANDLE hSendThread[MAX_CLIENT_NUM];//發(fā)送線程句柄
}sClient,*pClient;
移動控制服務器端對于網(wǎng)絡數(shù)據(jù)的封包解包機制與JAVA端極其類似,唯一區(qū)別就在于C++端多了指針的操作。對數(shù)據(jù)的處理封裝成CNetPacket類,其屬性與行為如下:
class CNetPacket
{
private:
char* m_pMsgBuf;//數(shù)據(jù)緩沖區(qū)
int m_nBufSize;//緩沖區(qū)總大小
int m_nOffset;//緩沖區(qū)數(shù)據(jù)大小
public:
BOOL IsFullPacket()const;//判斷是否滿包方法
BOOL ReBufSize(int nLen);//重新調(diào)整緩沖區(qū)大小方法
BOOL AddMsg(char* pBuf,int nLen);//向緩沖區(qū)添加數(shù)據(jù)方法
Void Poll(); //移除緩沖區(qū)首個數(shù)據(jù)包方法
};
2.3 數(shù)據(jù)庫管理模塊
數(shù)據(jù)庫管理模塊用于定時存儲機床加工狀態(tài)、PLC狀態(tài)、IO狀態(tài)、伺服反饋、加工程序、用戶信息以及加工歷史數(shù)據(jù)等。數(shù)據(jù)庫服務器采用微軟SQL SERVER2008。SQL SERVER是一個全面的數(shù)據(jù)庫平臺,,提供了企業(yè)級的數(shù)據(jù)管理,為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲功能。C++服務器端采用ADO方式連接SQL SERVER.ADO是ActivX數(shù)據(jù)對象,是面向數(shù)據(jù)庫編程的組件接口。加載ADO DLL后,可以獲得該COM對象的三個智能指針,分別是pConnection、pRecordSet、pCommand,而后便可以利用這三個智能指針根據(jù)sql語句進行建表、增刪改查以及訪問外部數(shù)據(jù)源等數(shù)據(jù)庫操作了。數(shù)據(jù)庫管理模塊具體劃分為圖5的7個模塊,每個模塊對應建立N張表,依次存入各數(shù)據(jù)信息。
3 簡單測試結(jié)果分析
測試采用了C++定時器QueryPerformanceCounter,該定時器是真正的微秒級定時器,可以用來測試數(shù)據(jù)傳輸?shù)难舆t性。其關(guān)鍵代碼段如下:
QueryPerformanceFrequency(&container);
freq=(double)container.QuadPart;
QueryPerformanceCounter(&container);
start=container.QuadPart;
recvPacket();//用于測試的發(fā)包函數(shù)
QuerPerformanceCounter(&container);
end=container.QuadPart;
runTime=(double)(end-start)/freq;
在網(wǎng)絡穩(wěn)定的情況下,對收發(fā)包進行了測試,測試結(jié)果表明,TCP傳輸一次按最大包傳送65535B字節(jié)數(shù)據(jù),單程runTime延遲時間不超過2ms,可以滿足實時監(jiān)控的要求。圖6是數(shù)據(jù)在通信兩端的收發(fā)圖。
4 結(jié)語
本文在前人研究開發(fā)的基礎上,提出了一種新型移動網(wǎng)絡數(shù)控系統(tǒng)。該網(wǎng)絡數(shù)控系統(tǒng)以當前流行的Android智能移動設備作為實時控制器,結(jié)合當下盛行的WAP及IEEE802.11b協(xié)議,對數(shù)控系統(tǒng)的智能化與移動化的發(fā)展具有一定的推動作用。在硬件層面完成了硬件的匹配選型,將6個硬件模塊連結(jié)在同一網(wǎng)段下,使其良好交互,并對外暴露數(shù)據(jù)通道,以期在后續(xù)研究中引入NAPT穿墻技術(shù)實現(xiàn)真正意義上的廣域網(wǎng)數(shù)控系統(tǒng)通信;在軟件層面,詳細剖析了3個子模塊的架構(gòu)及實現(xiàn),完成了移動數(shù)控APP的開發(fā)、C++服務器端的部分開發(fā)以及數(shù)據(jù)庫的搭建,并給出了在TCP SOCKET通信下數(shù)據(jù)收發(fā)粘包半包等問題的解決辦法,確實保證了數(shù)據(jù)通信時的可靠性和實時性,為新型網(wǎng)絡數(shù)控的實現(xiàn)打下了良好的基礎。目前整體系統(tǒng)的開發(fā)還未完成,后續(xù)將繼續(xù)深入研究,力求進一步優(yōu)化數(shù)據(jù)傳輸以及服務端并發(fā)處理的機制,同時開始數(shù)據(jù)庫服務器端的開發(fā)編程。
參考文獻:
[1]韓江,趙福明,王治森,吳炎明.網(wǎng)絡數(shù)控系統(tǒng)的概念及其技術(shù)內(nèi)容[J].中國機械工程,2001,12(10):1141-1144.
[2]周明發(fā),王治森,董伯麟,章建科,黃曉峰.無線通信在機器人及數(shù)控機床中的應用[J].制造業(yè)自動化,2006,28(9):58-64.
[3]夏廣平,富剛.基于無線網(wǎng)絡的遠程移動控制數(shù)控機床系統(tǒng)研究[J].機械設計與制造雜志社,2008,12(12),162-164.
[4]李偉榮,林尚勇.基于Web遠程運動控制系統(tǒng)的研究[J].機械設計與制造工程,2014,43(6):58-60.
[5]王銀芝,劉念聰,孫未.網(wǎng)絡數(shù)控系統(tǒng)及其關(guān)鍵技術(shù)分析[J].機械科學與技術(shù),2005,24(1):104-107.
[6]Goseelin C,Angeles J.A global performance index for the kinematic optimization of robotic manipulators[J].Journal of Mechanical Design,1991,1113(9):220-226.
[7]Yoshikawa T.Analysis and control of robot manipulators with redundancy[A].Proc First Int Sinp of Robotic Research[C],Cambridge Mass MIT press 1984:735-747.
[8]張柏軍,杜鵬.網(wǎng)絡化數(shù)控系統(tǒng)的研究和開發(fā)[J].數(shù)字技術(shù)與應用,2010,03(5):39-40.
基金項目:福建省中青年教師教育科研項目(JT180764)
作者簡介:李淑梅(1991-),女,碩士,廈門工學院機械工程系助教,主要從事數(shù)控技術(shù)方面的研究。