public ReturnCodes.Code Connect() { try { var connectReturnCode = (ReturnCodes.Code)Focas1.cnc_allclibhndl3(ipAddress, portNumber, timeout, out focasHandle); if (connectReturnCode == ReturnCodes.Code.NORMAL) { connected = true; return(connectReturnCode); } else { connected = false; Focas1.ODBERR error = new Focas1.ODBERR(); return((ReturnCodes.Code)Focas1.cnc_getdtailerr(focasHandle, error)); } } catch (Exception ex) { connected = false; return(ReturnCodes.Code.UNANTICIPATED_EXCEPTION); } }
private void btnDownLoad_Click(object sender, EventArgs e) { Fanuc.ODBERR odberr = new Focas1.ODBERR(); string data = txtProgram.Text; data = data.Replace("\r\n", "\n"); short ret = Fanuc.download(Fanuc.h, 0, data, odberr); if (ret != Fanuc.EW_OK) { MessageBox.Show("下载出错:" + ret); } }
private short DownToolOffset(ushort handle, string value, out string error) { error = ""; //0:NC程序(NC program);1:工件偏移(Tool offset data);2:参数Parameter;3:螺距补偿Pitch error compensation data;4:用户宏变量Custom macro variables;5:Work zero offset data short type = 1; short nRet = Focas1.cnc_dwnstart4(handle, type, null); if (nRet != Focas1.EW_OK) { error = $"下载刀补值失败!错误代号[{nRet}],参数[{value}]"; return(nRet); } byte[] buf = new byte[257]; byte[] beginBuf = new byte[2]; beginBuf[0] = 0x25; beginBuf[1] = 0x0A; Array.Copy(beginBuf, buf, beginBuf.Length); byte[] tempbuf = System.Text.Encoding.Default.GetBytes(value); // for String of CNC program Array.Copy(tempbuf, 0, buf, beginBuf.Length, tempbuf.Length); byte[] endBuf = new byte[1]; endBuf[0] = 0x25; Array.Copy(endBuf, 0, buf, beginBuf.Length + tempbuf.Length, endBuf.Length); int len = beginBuf.Length + tempbuf.Length + endBuf.Length; do { nRet = Focas1.cnc_download4(handle, ref len, buf); } while (nRet == 10); //// Focas1.focas_ret.EW_BUFFER ); if (nRet != Focas1.EW_OK) { nRet = Focas1.cnc_dwnend3(handle); error = $"下载刀补值失败!错误代号[{nRet}],参数[{value}]"; return(nRet); } nRet = Focas1.cnc_dwnend3(handle); if (nRet == 5) { Focas1.ODBERR odberr = new Focas1.ODBERR(); nRet = Focas1.cnc_getdtailerr(handle, odberr); short dataError = odberr.err_no; ////1 : A character which is unavailable for NC program is detected. ////2 : When TV check is effective, a block which includes odd number of characters (including 'LF' at the end of the block) is detected. ////3 : The registered program count is full. ////4 : The same program number has already been registered. ////5 : The same program number is selected on CNC. } if (nRet != Focas1.EW_OK) { error = $"下载刀补值失败!错误代号[{nRet}],参数[{value}]"; return(nRet); } return(nRet); }
private bool DownToCNC(string fileName, bool bSetMainProg = false) { short ret; // Return code string ip = IP; ushort Flibhndl = 0; ret = Focas1.cnc_allclibhndl3(ip, 8193, 3, out Flibhndl); if (ret != Focas1.EW_OK) { Flibhndl = 0; return false; } ret = Focas1.cnc_dwnstart4(Flibhndl, 0, CNCPath); if (ret != Focas1.EW_OK) { return false; } string drive = ""; Focas1.ODBPDFDRV odbpdfdrv = new Focas1.ODBPDFDRV(); ret = Focas1.cnc_rdpdf_drive(Flibhndl, odbpdfdrv); switch (odbpdfdrv.max_num) { case 1: drive = "//" + odbpdfdrv.drive1 + "/";// break; } GetProgramDir(drive); string progName = ""; try { FileStream downfilename = new FileStream(fileName, FileMode.Open, FileAccess.Read); byte[] buf = new byte[257]; // for String of CNC program int len; // Number of character // Send CNC program to CNC while (true) { // Read 256 characters from PC file len = downfilename.Read(buf, 0, 256); #region 解析NC程序名称 if ((bSetMainProg) && (progName == "")) { int iBegin = -1; int iEnd = -1; int index = 0; foreach (byte b in buf) { if (iBegin == -1) //检测开始 { if (b == 0x4F) //O { iBegin = index; } } else //检测完成 { if (b == 0x28) //( { iEnd = index; break; } } index++; } if (iBegin >= 0 && iEnd >= 0) { byte[] progBuf = new byte[iEnd - iBegin]; Array.Copy(buf, iBegin, progBuf, 0, iEnd - iBegin); progName = System.Text.Encoding.Default.GetString(progBuf); } } #endregion // If readed number of character is 0 then break if (len == 0) { break; } // Send program to CNC do { ret = Focas1.cnc_download4(Flibhndl, ref len, buf); } while (ret == 10); // Focas1.focas_ret.EW_BUFFER ; //说明缓存已满或为空,继续尝试 if (ret != Focas1.EW_OK) { //DispError(ret, "cnc_download4()"); ret = Focas1.cnc_dwnend4(Flibhndl); return false; } } // Close PC file downfilename.Close(); // End of download ret = Focas1.cnc_dwnend4(Flibhndl); if (ret != Focas1.EW_OK) { if (ret == 5) { Focas1.ODBERR err = new Focas1.ODBERR(); ret = Focas1.cnc_getdtailerr(Flibhndl, err); switch (err.err_no) { case 1: //A character which is unavailable for NC program is detected. MessageBox.Show("NC程序中存在无效字符!", "程序下载错误", MessageBoxButton.OK, MessageBoxImage.Information); break; case 2: //When TV check is effective, a block which includes odd number of characters(including 'LF' at the end of the block) is detected. MessageBox.Show("当TV检测有效时,一个程序段中的字符数(从紧跟在一个EOB后的代码起到下一个EOB止,包括使用'LF'字符的情况)是奇数!", "程序下载错误", MessageBoxButton.OK, MessageBoxImage.Information); break; case 3: //The registered program count is full. MessageBox.Show("系统中程序已满!", "程序下载错误", MessageBoxButton.OK, MessageBoxImage.Information); break; case 4: //The same program number has already been registered. MessageBox.Show("系统中已经存在相同程序!", "程序下载错误", MessageBoxButton.OK, MessageBoxImage.Information); break; case 5: //The same program number is selected on CNC. MessageBox.Show("相同程序号的程序在CNC侧被选中!", "程序下载错误", MessageBoxButton.OK, MessageBoxImage.Information); break; default: break; } } else { //DispError(ret, "cnc_dwnend4()"); } return false; } MessageBox.Show("下载完成!", "程序下载", MessageBoxButton.OK, MessageBoxImage.Information); #region 刷新CNC program #endregion //if ((bSetMainProg) && (progName != "")) //设置主程序 //{ // ret = Focas1.cnc_pdf_slctmain(Flibhndl, this.lbCNCPath.Text + progName); // if (ret != Focas1.EW_OK) // { // MessageBox.Show("设置主程序失败,错误号" + ret, "自动切换程序", MessageBoxButton.OK, MessageBoxImage.Error); // return false; // } //} } catch (FileNotFoundException) { // If can not open PC file MessageBox.Show("无法打开文件...", "程序下载", MessageBoxButton.OK, MessageBoxImage.Error); return false; } return true; }
private string GetSlopeControlDataErrorMessage(ushort flib) { Focas1.ODBERR err = new Focas1.ODBERR(); Focas1.cnc_getdtailerr(flib, err); string err_msg = ""; switch (err.err_no) { case 1: err_msg = "peak power(第" + err.err_dtno.ToString() + "个)"; break; case 2: err_msg = "initial frequency(第" + err.err_dtno.ToString() + "个)"; break; case 3: err_msg = "initial duty(第" + err.err_dtno.ToString() + "个)"; break; case 4: err_msg = "step frequency(第" + err.err_dtno.ToString() + "个)"; break; case 5: err_msg = "step duty(第" + err.err_dtno.ToString() + "个)"; break; case 6: err_msg = "step time(第" + err.err_dtno.ToString() + "个)"; break; case 7: err_msg = "step number(第" + err.err_dtno.ToString() + "个)"; break; case 8: err_msg = "piercing time(第" + err.err_dtno.ToString() + "个)"; break; case 9: err_msg = "assist gas pressure(第" + err.err_dtno.ToString() + "个)"; break; case 10: err_msg = "assist gas select(第" + err.err_dtno.ToString() + "个)"; break; case 11: err_msg = "assist gas setting time(第" + err.err_dtno.ToString() + "个)"; break; case 12: err_msg = "reference displace(第" + err.err_dtno.ToString() + "个)"; break; case 13: err_msg = "reference displace 2(第" + err.err_dtno.ToString() + "个)"; break; default: err_msg = "其他错误" + err.err_no.ToString() + "(第" + err.err_dtno.ToString() + "个)"; break; } return(err_msg); }
private string GetEdgeCuttingDataErrorMessage(ushort flib) { Focas1.ODBERR err = new Focas1.ODBERR(); Focas1.cnc_getdtailerr(flib, err); string err_msg = ""; switch (err.err_no) { case 1: err_msg = "Edge operation angle(第" + err.err_dtno.ToString() + "个)"; break; case 2: err_msg = "Peak power in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 3: err_msg = "Frequency in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 4: err_msg = "Duty in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 5: err_msg = "Time in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 6: err_msg = "Assist gas pressure in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 7: err_msg = "Assist gas type in piercing(第" + err.err_dtno.ToString() + "个)"; break; case 8: err_msg = "Return distance(第" + err.err_dtno.ToString() + "个)"; break; case 9: err_msg = "Return speed(第" + err.err_dtno.ToString() + "个)"; break; case 10: err_msg = "Return frequency(第" + err.err_dtno.ToString() + "个)"; break; case 11: err_msg = "Return pulse duty(第" + err.err_dtno.ToString() + "个)"; break; case 12: err_msg = "Standard displacement(第" + err.err_dtno.ToString() + "个)"; break; default: err_msg = "其他错误" + err.err_no.ToString() + "(第" + err.err_dtno.ToString() + "个)"; break; } return(err_msg); }
private string GetCuttingDataErrorMessage(ushort flib) { Focas1.ODBERR err = new Focas1.ODBERR(); Focas1.cnc_getdtailerr(flib, err); string err_msg = ""; switch (err.err_no) { case 1: err_msg = "feedrate(第" + err.err_dtno.ToString() + "个)"; break; case 2: err_msg = "cutting peak power(第" + err.err_dtno.ToString() + "个)"; break; case 3: err_msg = "cutting frequency(第" + err.err_dtno.ToString() + "个)"; break; case 4: err_msg = "cutting duty(第" + err.err_dtno.ToString() + "个)"; break; case 5: err_msg = "assist gas pressure(第" + err.err_dtno.ToString() + "个)"; break; case 6: err_msg = "assist gas select(第" + err.err_dtno.ToString() + "个)"; break; case 7: err_msg = "assist gas setting time(第" + err.err_dtno.ToString() + "个)"; break; case 8: err_msg = "reference displace(第" + err.err_dtno.ToString() + "个)"; break; case 9: err_msg = "beam radius offset(第" + err.err_dtno.ToString() + "个)"; break; case 10: err_msg = "edge cutting select(第" + err.err_dtno.ToString() + "个)"; break; case 11: err_msg = "start-up select(第" + err.err_dtno.ToString() + "个)"; break; case 12: err_msg = "power control(第" + err.err_dtno.ToString() + "个)"; break; case 13: err_msg = "reference displace 2(第" + err.err_dtno.ToString() + "个)"; break; default: err_msg = "其他错误" + err.err_no.ToString() + "(第" + err.err_dtno.ToString() + "个)"; break; } return(err_msg); }