李 行,李 波,韩 燕
(1.武汉科技大学 机械自动化学院,武汉 430081;2. 湖北文理学院 机械与汽车工程学院,湖北 襄阳 441053)
数控机床在中国发展迅速,在生产领域得到了越来越广泛的应用[1]。目前多数高端数控系统都带有以太网功能跟,数控技术正向智能化、信息化、网络化方向发展[2]。开展数控机床实时状态信息采集的研究,将会促进企业的办公、管理和生产趋于自动化、智能化和网络化,从而达到加强企业管理、减少工作失误、提高工作效率的目的[3]。只有采用有效的信息采集技术,充分、实时、准确地获得各类设备的状态信息,才会实现对制造过程的有效控制和管理。
传统机床加工状态信息主要通过数控系统面板展现。此方式下,多台机床运行状态信息无法同时查看。随着网络技术的发展,先进数控机床状态信息基于总线方式,传送到PC端上,通过PC端监测整个车间所有机床的运行,该方式解决了同时监测所有机床信息的问题,但PC端不具备移动性和便携性,相关人员人员无法做到随时随地对机床信息进行监测[4]。为了解决传统信息采集终端出现的弊端,提出了一种基于Android系统的信息监测方式。与通常的PC系统相比,Android设备的特征变现为小的体积和轻的重量,用户可以随身携带,随时随地对机床进行监测。与PC端采用的有线方式不同,Android系统是通过无线的方式接入车间网络,其网络扩扑结构更加简单。另外无线局域网的接入与有线相比更加方便,并且允许多个Android设备同时查看车间机床状态信息[5-6]。随着Android系统的广泛应用,目前国外已经有利用Android设备进行小水电站的信息监测[7]、钢铁产品质量评价[8]。正是由于Android系统的明显优势,开发基于Android系统的数控机床实时监测具有重要实用价值。
本次实验的所有信息采集过程都是针对华中数控机床HCNC-808进行的。基于Android系统的数控机床实时监测系统的物理结构如图1所示。以太网交换机、无线路由器和数控机床构建数控车间无线局域网。Android设备利用手机自带的 WiFi功能接入路由器,其与机床通过交换机和路由器组成无线局域网,实现Android设备与数控机床的通信。这种局域网布线结构是一种最优的解决方案,通过交换机连接数控机床,简化了通信结构[9],降低了系统的复杂性。对于数控机床数目较多的车间,可以采用多个交换机的多重级联快速接入车间网络[10]。
图1 系统的物理结构
基于Android系统的数控机床实时监测系统的逻辑结构如图2所示。整个系统的开发分为两部分:华中数控机床系统的二次开发以及Android信息采集系统的开发。对于数控机床系统的二次开发流程为:调用华中八型应用程序开发接口,通过相应函数取得寄存器里的各种状态信息,使用C语言Socket编程建立以机床服务器端。当机床成功接收Android客户端发送的连接请求时,服务端立即对请求作出响应,把机床的各种状态信息数据发送给客户端,发送成功后通过华中数控系统周期刷新定时器等待下一个连接请求;对于Android客户端的开发流程为使用Java语言Socket编程建立Android客户端,通过车间无线局域网向数控机床发送连接请求,当连接成功后,接收从服务器端发送来的机床状态信息数据,接着通过定时器开启下一个连接请求,接收的状态信息数据用于绘制Android信息采集界面并将部分数据存储到数据库。
图2 系统的逻辑结构
机床服务器系统与安卓客户端系统的通信采用套接字接口,采用Socket机制的TCP/IP协议编写收发数据函数。
机床服务器端与Android客户端的通信过程如图3所示。基于TCP/IP协议的Socket通信机制的服务器端的程序编写的步骤:①创建服务端socket,即开启套接字;②绑定本地地址和端口,这样Android客户端才能正确的找到并连接到机床服务器端;③开启监听,等待连接状态;④等待接收客户端连接请求,一旦成功连接,则返回一个用于发送数据的套接字;⑤在单独的线程里循环向客户端发送数据,循环过程采用华中数控系统的周期刷新函数定时器。
基于TCP/IP协议的Socket通信机制的Android客户端的程序编写的步骤:①开启客户端socket;②建立与服务器端的连接,设置要连接的服务器端的IP地址和端口,这是正确接收数据的保障;③接收从指定地址和端口传输过来的机床状态信息,接收完后,循环开启下一个连接,Android客户端的循环采用Android定时器来完成。
图3 机床服务器端与Android客户端的通信
数控机床服务器端需要发送的状态信息数据如图4所示,在机床的初始化界面进行机床开关量信号的发送,在无线网络子界面进行机床各轴基本信息数据的发送。以数控车床为例进行基本信息数据说明,各轴基本信息数据包括X、Z、C三轴的工件指令位置、机床指令位置、机床实际位置、实际速度、电机转速和机床进给速度F以及机床主轴速度S。机床状态信息的获取过程为调用华中八型提供的相应函数接口,获取寄存器里各轴的相关状态信息,接着调用机床系统的周期刷新函数不停采集当前时刻状态信息数据。
数据的发送过程如下:将提取当前时刻的机床状态信息数据存入字符串数组中,采用循环建立与发送的信息个数相同的多个套接字,每个套接字的端口均不相同,一个套接字负责绑定一个当前时刻状态信息字符串。当速度机床所有套接字数据都成功发送后,采用机床的周期刷新函数每隔10ms进行下一次数据的发送。其中机床开关量信号的发送是在机床初始化的时候就不停的发送一个字符串run ",Android客户端若接收到此字符串则说明机床处于开启状态。
Android客户端与服务器的通信也是采用套接字编程。数据的接收过程如下:使用循环建立与接收字符串数目一致的多个套接字,调用Android的输入流类InputStream获取机床发送信息的数据流,调用缓冲阅读器BufferedReader读取输入流中的数据并将读取出的各个机床当前状态信息数据放入字符串数组中。所有数据均成功读取后,采用Android定时器每隔10ms进行下一次数据的读取,如图5所示。
每一次数据读取完后,就进行一次Android客户端状态监测界面的绘制。Android不允许在子线程进行UI操作的,但绘制监测界面是数据在不停的变化而使得UI也在不停的更新,在这里采用Android的异步消息处理机制解决在子线程进行UI的变化[11]。新增一个Handler类的对象,并重写父类的handleMessage()方法进行界面的实时绘制。界面的绘制刷新周期也是采用Android的timer定时器,为了与机床面板的状态信息变化频率相同,定时器刷新周期也为10ms。
车间里数控机床的历史开关时间可以使机床操作人员合理控制机床的使用率。因此采用Android的SQLite数据库保存机床的开关时间,调用Android数据库框架LitePal进行建表和增删查改的操作[12]。
图5 Android客户端系统结构
在完成了机床服务器端系统和Android客户端系统的各模块功能后,对整个系统的功能进行测试。经过试验验证,达到了预期效果,安卓终端可对整个车间所有的数控机床进行状态信息的实时监控,如图6~图8所示。
图6 车间机床的开关状态 图7 车床02的实时状态信息 图8 车间车床开关时间历史统计
针对当前基于Android的数控系统实时信息采集应用技术不是很成熟的问题,提出了一种采用TCP/IP协议的Socket通信来搭建机床数控系统服务器端,Android客户端用于实时信息采集的方法,通过实验验证达到了在Android设备上实时采集数控机床状态信息的效果,可实现在Android设备上的信息监测与机床上的完全同步,通过Android手机,可以方便快捷的进行数控车间的实时监测,车间操作人员可以同时对车间所有的机床设备进行远程监控,提高了工作效率,对于设计基于Android的其它信息监测系统具有重要的参考价值。