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 */
};
连接成功才能继续!