コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: ncpro.cs プロジェクト: purplewish07/FOCAS_API_DEMO
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }