Fanuc发那科法兰克数控系统采集系列教程完整版(数据采集、网络配置、教程)

Fanuc数控系统初探

 

FANUC 是日本一家专门研究数控系统的公司,成立于1956年。是世界上最大的专业数控系统生产厂家,占据了全球70%的市场份额。FANUC于1959年首先推出了电液步进电机,在后来的若干年中逐步发展并完善了以硬件为主的开环数控系统。进入70年代,微电子技术、功率电子技术,尤其是计算技术得到了飞速发展,FANUC公司毅然舍弃了使其发家的电液步进电机数控产品,一方面从GETTES公司引进直流伺服电机制造技术。1976年FANUC公司研制成功数控系统5,随后又与SIEMENS公司联合研制了具有先进水平的数控系统7,从这时起,FANUC公司逐步发展成为世界上最大的专业数控系统生产厂家--以上摘自百度百科

随着中国制造2025,从从前的人工、逐渐开始机器换人、机器替人,那么想要达到这一目的,设备的数据是否可采集、设备的动作是否可控制、设备的管理是否可协同,已经成为企业转型升级必须要思考的问题。

博主从事智能工厂、智能制造已有十余年历史,就目前而言,看到了很多企业花了很大精力去探索智能制造,走了很多弯路,博主希望尽自己的努力,为很多企业、很多软件公司、自动化公司提供相应的案列借鉴、部署流程,怎样快捷,轻便的方式,在不影响企业生产的情况下,对企业管理进行釜底抽薪,从底层慢性延伸管理模式,让员工乐于接受管理方式,同时企业又能够省事省力的做好产品的加工、人员的管理。

本系列文章,目的是

①为工厂信息部门解答疑惑,快速部署各类数控系统的数据采集以及可视化看板,以后为陆续推出对于各类企业生产的关键点该如何通过一系列辅助软件,让企业生产规范化运作。

②为软件公司、自动化公公司提供技术支撑,为企业构建MES软件进行铺垫。

以下开始讲解fanuc相关系统

fanuc系统算是世界推出采集协议最早的数控厂商之一,同时也是最早开放fanuc数控采集协议的数控厂商之一。

所有的fanuc系统面板上都会有详细的系统型号,如oi-a,oi-bZ 或者30i-a,

-符号前面的数字(oi,30i)代表fanuc系统的的性能,oi较低,30i较高,

abcd代表产品编号,如一个系统04年可能是a.07年可能是b。

目前fanuc支持采集的数据有上千个点,我们一般重要的有以下点,

①运行、待机、调试、报警、离线、切削、换刀、模式等

②各种状态的开始时间、结束时间、持续时间;切削时间、上电时间等

③加工程序信息、实时加工代码、加工时间、浪费时间、等待时间等

④刀具号、刀补值、寿命计时等

⑤主轴负载、主轴转速、主轴倍率、各轴数据

⑥报警编号、报警内容、持续时长。

以上所有参数可以查阅fanuc官方协议文档,进行查阅,但是都是英文,而且对每个函数的操作方式解析很迷糊,

下一篇文章通过c#语言进行和fanuc机床数据通讯,教大家如何一步一步的摸头fanuc的库通讯原理、使用方式。

本系列为fanuc数据采集,陆续推出西门子数控系统、广数数据系统、三菱数控系统、海德汉数控系统、haas数控系统等各类数据采集系列。

fanuc demo如下
 

从我的上一篇文章,提到了fanuc各类系统的含义、可采集的数据点,下面直接开始进行入门
①必备组件:

 

 

首先Fanuc有开源的库,我们通过调用库进行和fanuc数控系统进行通讯,分别是Fwlib32.dll以及fwlib1.dll

Fwlib32.dll是负责和fanuc的通讯组件,用来进行对客户端发送的数据转义加密进行和数控系统数据通讯。

fwlib32.dll是核心的函数操作库,封装了各类数据读取函数。

将到上述两个dll,大家应该就明白了,客户端(开发者)和fwlib32.dll进行函数操作调用,fwlib32.dll再将数据通过Fwlib32.dll库进行和数控系统进行TCP的通讯,数控系统响应数据返回给Fwlib21.dll,Fwlib21.dll再将数据返回给fwlib32.dll,进行数据解析,最终反馈给客户端(开发者)

以下进行实战操作

博主用的VS2015

①文件新建windows窗体程序,如下
 

②新建完成后,窗体布局如图所示:

 

 

③布局完成后将Fwlib32.dll以及fwlib1.dll直接复制到项目中

 

 

复制成功后进行右击dll属性,将复制到输出目录改为始终复制,这样我们不管在重新生成项目文件或者清理后生成项目文件,dll都会在Debug文件下,这个时候Debug下面的可执行程序才可以调用到DLL

 

 

④那么除了这些,我们要用到一个函数库,这是c语言编译出来的接口,可供c#调用,因为此文件已经帮c#做了一系列的c语言调用要extern以及DllImport以及C语言和C#语言的类型转换。开发者不必过多考虑接口类型。

我们也将此文件直接复制到项目文件夹中。

 

 

 

 

⑤我们看下函数库的一个枚举:focas_ret

所有的数据请求,函数库都会返回一个请求结果(成功or失败)以及ref或者out出来的响应数据(如主轴信息、转速信息、加工信息等。)

请求结果为0代表请求成功,即以下的EW_OK,说明响应数据返回并且正确,负责全部为请求失败,详细问题看英文注释,如

EW_SOCKET = (-16), /* Windows socket error */代表了tcp Socket套接字错误,说明网络问题。

EW_NODLL = (-15), /* DLL not exist error */代表DLL未找到,查看是否引用或者程序同级目录有没有我上述降到的两个dll库。各类原因我不一一解释,可以查阅翻译软件对英文进行翻译

 

首先看下上图,所有的公开函数都会有一个 FlibHndl参数,次参数的含义为大家解释:
   

 

开发者开发客户端程序和Fanuc系统连接,客户端为TCP Client,Fanuc数控系统为TCP Server,那么我们将这里的FlibHndl参数定义为Socket实列,只不过Fanuc厂家为了我们开发方便,用数字代替了Socket,我们拿着FlibHndl去和函数做调用的时候,内部函数会根据和FlibHndl绑定的Socket进行和数控系统通讯,实际Socket是由fwlibe1.dll来进行统一管理。

 

那么上图我们写了一个FanucOpe类,该类继承focas类库,这样我们又可以在FanucOpe添加我们想要的功能,同时可以通过FanucOpe类调用Focas类里面的所有方法、变量、枚举等,又不去改写原有的类库。

那么以上类库建立完成,下面开始做连接操作

fanuc连接函数为如下函数,

public static extern short cnc_allclibhndl3( [In,MarshalAs(UnmanagedType.AsAny)] Object ip,
ushort port,int timeout, out ushort FlibHndl);

ip代表数控系统的通讯IP,Port代表数控系统的通讯端口,timerout代表着连接超时,单位为秒,如设置为10S,则代表10秒钟没连接成功代表通信失败,类似socket中的阻塞模式下的waitone功能,

同时函数返回short类型的结果,以及out出来ushort类型的通讯句柄,以后每次和函数连接时候都拿着句柄和系统进行通讯。
 

 

开始调用此函数,如下

 

 

ret代表函数执行结果,与函数枚举进行匹配,FanucOpe.Handle代表函数返回值,

博主现在没有和数控系统进行连接,返回-16,代表socket通信错误,如果成功返回值是0。同时Handle的值>0

 

 

如果连接成功我们尝试读取一个加工总数测试一下

,如下图,cnc_rdparam是读取fanuc系统参数的公共函数,6712代表我们要读取的点在fanuc数控系统里面的参数位置,此方法返回一个IODBPSD_1,我们不用去管他是什么,我们就先去定义一个此类型的参数,让他从cnc_rdparam中回调出来,我们直接拿其结果即可。

 

 

 

以上就是fanuc函数的连接操作和读取操作方法,如有需要,可以在评论区留邮箱,我会将fanuc所有的函数库代表的是读取什么数据解释出来,如读取主轴倍率,就是pmc_rdpmcrng函数。调用方式是

 

 

 

以下demo解决了fanuc各种 坑:如负载内存泄漏、报警版本问题、程序新老版本指定目录问题、大文件传输丢包问题等
谢谢支持,有需要的留邮箱,有测试demo。同时博主有多线程并发数据采集架构可供参考
 

 

posted @ 2023-07-10 14:35  专业CNC数据采集  阅读(5620)  评论(63编辑  收藏  举报