前言
這次主要要實現的功能是在線管理NC程式管理,希望通過遠程對Fanuc設備中的nc程式進行增刪改查管理,在測試的過程中發現個問題在這裡記錄下:設備內存中有nc程序卻檢索不到,無法刪除。
上傳nc程式
首先我通過程式往機臺上傳一個O4205.nc程序,這裡用到的函數是cnc_dwnstart4、cnc_download4、cnc_dwnend4,然後在cnc_dwnstart4中指定了上傳目錄為"//CNC_MEM/USER/PATH1/" ,然後在設備的PATH1目錄中我們就可以看到O4205程式了。
public short Ins(string data, int len, string path){ short ret = Focas1.cnc_dwnstart4(h1, 0, path); if (ret != Focas1.EW_OK) { return 0; } int n = 0; len = data.Length; while (len > 0) { n = len; ret = Focas1.cnc_download4(h1, ref n, data); if (ret == (short)Focas1.focas_ret.EW_BUFFER) { continue; } if (ret == Focas1.EW_OK) { data += n; len -= n; } if (ret != Focas1.EW_OK) { break; } } ret = Focas1.cnc_dwnend3(h1); if (ret == Focas1.EW_OK) { ret = 0; } else { ret = 1; } return ret;}上傳注意事項
這裡我們上傳的時候需要對nc文件進行解析,將內容解析成string類型,並在文件中添加文件名,以<文件名(不保留後綴)>方式插入,每個換行需加入\n結尾且第一行必須有\n,添加文件名的時候要去除後綴(不去除也能上傳成功,但是在搜索程式的時候就沒法找到該程式)。
//示例源文件O4205.nc:%N0010 G40 G17 G90 G70N0020 G91 G28 Z0.0N0030 T06 M06%//解析後內容為字符串\n<O4205>\n //文件名不要跟後綴,否則無法檢索到N0010 G40 G17 G90 G70\nN0020 G91 G28 Z0.0\nN0030 T06 M06\n%獲取目錄中的程式
在機臺上我發現程式目錄有多個,說明用戶平時可能會在其他文件目錄中存放程式,即然時管理程式那麼自然要考慮全面了,所以在獲取程式的時候我們對其他目錄也進行了檢索(該程序每次只支持獲取10條程式,要讀完只能循環遍歷了)。在拿到對應的程式後發現,只有PATH1中的程式,其他目錄中的程式一個都沒有。
/// <summary>/// 讀取程序目錄/// </summary>/// <param name="model">實體</param>/// <param name="type">設置讀取類型0 : "程序編號" only 1 : "Program number"and"Comment備註信息" 2 : "Program number", "Comment" and "Program size"</param >/// <param name="top_prog">開始讀取程序號</param>/// <param name="num_prog">要讀的程序數量</param>/// <returns></returns>public Focas1.PRGDIR2 ReadProgDir(short type, short top_prog, short num_prog){ Focas1.PRGDIR2 buf = new Focas1.PRGDIR2(); h1 = (ushort)Focas1.cnc_rdprogdir2(h1, type, ref top_prog, ref num_prog, buf); if (h1 == Focas1.EW_OK) { return buf; } return null;}刪除指定程式
然後我又嘗試往PATH2裡面上傳一個O4205.nc程式(PATH1的刪除),設備中可以看到O4205.nc程式說明上傳是沒問題的,緊接著我們來測試刪除該程式,可是通過遠程來刪除的時候卻刪除失敗(顯示EW_DATA(5)錯誤)。同樣的操作在PATH1中卻能實現,這就讓我鬱悶了。
/// <summary>/// 刪除指定程序/// </summary>/// <param name="ip">fanuc ip</param>/// <param name="timeOut">延時 </param>/// <param name="number">設置程序號 </param>/// <returns>retern 1 成功</returns>public bool Del(){ short fl = Focas1.cnc_delete(h1, number); if (fl == Focas1.EW_OK) { return true; } return false;}發現問題
通過多次的嘗試發現,只有PATH1中的程式可以正常的實現增刪改查操作(其他目錄只能上傳,無法遠程檢索和刪除),這裡主要問題在前臺目錄設置,因為設備中設置了前臺目錄為"//CNC_MEM/USER/PATH1/",所以我們在只能檢索和操作到PATH1目錄中的nc程式。因此我們如何想遠程管理USER目錄下的所有程式,我們就要將前臺目錄進行修改成"//CNC_MEM/USER「,這樣只要是USER目錄下的內容都能被遠程獲取和操作了。
修改「前臺目錄」
首先將工具機模式打到「編輯」狀態(一定要切換狀態,否則會「設置前臺目錄失敗」),然後通過操作上下鍵與輸入鍵將目錄切換至USER文件夾下,然後按顯示屏下方「操作」選項,進入之後通過顯示屏下面右側的拓展鍵翻頁,找到「向前改變」按鈕,按下該按鈕就可以將USER設定成前臺目錄了。