Unity3D与发那科FOCAS实现数据采集(一)

        FOCAS1/2开发包,FOCAS是FANUC Open CNC API Specifications version 1 or 2的缩写,FOCAS1主要应用于0i和16i/18i/21i/系列,FOCAS2则针对30i/31i/32i系列CNC。

       开发一套数据采集的软件,通常使用VS写Winform窗体程序,作为一个电气工程师,因为对Unity3D较熟悉的缘故,也觉得U3D用来做界面很方便,就通过Unity3D写一个发那科30i系列数控系统的数据采集监控软件,这个主要作为示教器界面显示。

        先上最终软件截图!

        设置界面,主要是设置一些IP地址、端口号、采集周期之类的设置,还有软件运行一些消息,以及一些为测试功能,添加的一些乱七八糟的控件。

        采三点功能界面,这个通常可以忽略,这是专门针对五轴设备,通过在CAM软件中三点坐标和机床中实际采集三点坐标,计算出工件误差补偿值,快速将CAM坐标系和设备坐标系进行匹配,以达到快速加工CAM生成程序的目的。

        示教功能界面,这个软件不仅可以作为操作软件,也可以显示在示教器上,作为示教器的显示界面,具体示教器显示CNC画面的方式可以通过VNC,或者VGA直接投屏的方式,具体就不展开讲了。这个界面主要功能就是显示主程序内容,并允许对主程序内容进行示教操作:插入示教程序、删除程序行、替换程序行等功能;示教代码是通过DropDown一个选择示教程序类型,一个选择示教代码类型,最终组合成示教代码的形式,示教坐标可以直接读机床坐标。

        程序功能界面,主要是读取CNC的文件夹目录及程序列表,然后通过TreeView组件把所有程序列表内容显示出来,然后选择列表中不同的程序,程序内容实时在左侧程序文本中显示出来。另外还可以进行主程序设定操作和上传程序操作。

        开始第一步把开发工具准备好,库文件导入。fwlib32.dll和fwlibe1.dll个必备的库,另外fwlib32.cs复制到项目中,因为focas协议用的是C++写的,这个是官方给我们用C#封装好调用C++的库,直接使用即可。

        然后搭个基本的UI就可以开始码代码了。

        主要使用了cnc_allclibhnd3这个连接方法,参数分别是ip,端口,超时时间,句柄指针,另外返回就是连接状态,返回EW_OK就是成功了,否则就可以根据返回值,显示不同的连接未成功原因,具体原因就不写出来了,直接fwlib32.cs脚本在focas_ret定义时写的很清楚了。

    public InputField ipText;       //连接IP输入框
    public InputField portText;     //连接端口输入框

    public string ipString="192.168.1.10";    //默认IP
    public ushort port=8193;        //默认端口号

    public ushort cncHandle = 0;        //返回的CNC句柄指针,后续都是基于它操作的
    public bool isConnected = false;            //连接成功标志

    //连接按钮调用
    public void ConnectToCnc()
    {
        if(ipText.text!=""){
            ipString=ipText.text;
        }
        if(portText.text!=""){
            port=ushort.Parse(portText.text);
        }
        
        try
        {
            Focas1.focas_ret ret = (Focas1.focas_ret)Focas1.cnc_allclibhndl3(ipString, port, 5, out cncHandle); //library handle

            if (ret == Focas1.focas_ret.EW_OK)
            {
                isConnected=true;
                Debug.Log("Connect to CNC done!");
            }else
            {
                Debug.LogWarning("Can't connect to CNC controller!");
                Debug.LogError("connect error code:"+ret.ToString());
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("connect defalut Message:"+ex.Message);
        }

    }

        不成功直接看返回值,根据原因去判断解决就行。

    /* Error Codes */
    public enum focas_ret {
        EW_PROTOCOL =     (-17),           /* protocol error */
        EW_SOCKET   =     (-16),           /* Windows socket error */
        EW_NODLL    =     (-15),           /* DLL not exist error */
        EW_BUS      =     (-11),           /* bus error */
        EW_SYSTEM2  =     (-10),           /* system error */
        EW_HSSB     =     (-9) ,           /* hssb communication error */
        EW_HANDLE   =     (-8) ,           /* Windows library handle error */
        EW_VERSION  =     (-7) ,           /* CNC/PMC version missmatch */
        EW_UNEXP    =     (-6) ,           /* abnormal error */
        EW_SYSTEM   =     (-5) ,           /* system error */
        EW_PARITY   =     (-4) ,           /* shared RAM parity error */
        EW_MMCSYS   =     (-3) ,           /* emm386 or mmcsys install error */
        EW_RESET    =     (-2) ,           /* reset or stop occured error */
        EW_BUSY     =     (-1) ,           /* busy error */
        EW_OK       =     0    ,           /* no problem */
        EW_FUNC     =     1    ,           /* command prepare error */
        EW_NOPMC    =     1    ,           /* pmc not exist */
        EW_LENGTH   =     2    ,           /* data block length error */
        EW_NUMBER   =     3    ,           /* data number error */
        EW_RANGE    =     3    ,           /* address range error */
        EW_ATTRIB   =     4    ,           /* data attribute error */
        EW_TYPE     =     4    ,           /* data type error */
        EW_DATA     =     5    ,           /* data error */
        EW_NOOPT    =     6    ,           /* no option error */
        EW_PROT     =     7    ,           /* write protect error */
        EW_OVRFLOW  =     8    ,           /* memory overflow error */
        EW_PARAM    =     9    ,           /* cnc parameter not correct error */
        EW_BUFFER   =     10   ,           /* buffer error */
        EW_PATH     =     11   ,           /* path error */
        EW_MODE     =     12   ,           /* cnc mode error */
        EW_REJECT   =     13   ,           /* execution rejected error */
        EW_DTSRVR   =     14   ,           /* data server error */
        EW_ALARM    =     15   ,           /* alarm has been occurred */
        EW_STOP     =     16   ,           /* CNC is not running */
        EW_PASSWD   =     17   ,           /* protection data error */
    /*
        Result codes of DNC operation
    */
        DNC_NORMAL  =  (-1)    ,           /* normal completed */
        DNC_CANCEL  =  (-32768),           /* DNC operation was canceled by CNC */
        DNC_OPENERR =  (-514)  ,           /* file open error */
        DNC_NOFILE  =  (-516)  ,           /* file not found */
        DNC_READERR =  (-517)              /* read error */
    };

        连接成功才能继续!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值