网站首页  词典首页

请输入您要查询的论文:

 

标题 一种新型移动网络数控系统的研究与实现
范文

    李淑梅 李星

    摘 要:本文提出了一种新型移动网络数控系统,基于Android智能移动设备,遵循当下盛行的无线传输协议,以自主开发的移动数控APP作为控制客户端,以工业IPC及无线串口服务器作为服务端,采用面向连接的TCP Socket通信,实现了数据传输的可靠性和实时性,完成了新型网络数控系统的DNC、部分远程监控及诊断功能,对数控技术的智能化与移动化有一定的推动作用。

    关键词:移动网络数控;Android移动设备;无线传输;远程监控;移动化

    Abstract:A new type of mobile network numeric control system based on Android smart mobile devices is proposed in this paper,it follows the current prevalence of wireless transfer protocol,keeps the movement of the self-developed CNC APP as control client and industrial IPC and wireless serial port server as the server,uses a connection-oriented TCP SOCKET communication,and has realized the real time and reliability of data transmission,completed a new network numerical control system of the DNC and part of the remote monitoring and diagnosis function,it has a certain role in promoting intelligent of numerical control technology and mobile.

    Key words:Mobile network NC system;Android mobile devices;wireless transmission;remote monitor;mobile

    隨着先进制造技术以及互联网技术的飞速发展,数控机床与网络及通信技术相结合,形成智能化、可移动的分布式数控系统无疑是数控技术发展的必然趋势。[1,2]而作为移动互联网时代的标志性代表产物,智能手机及平板电脑等已然超越PC,成为广受推崇的智能移动终端设备。基于Android操作系统的智能移动设备更是占据了全球智能移动80%以上的市场份额。目前,在国内外,主要有三类形式的基于无线通信技术的网络数控系统,分别是基于手机GSM短消息业务、基于蓝牙传输以及基于手机WEB浏览器的移动网络数控系统。[3,4]但这三类数控系统因其在实时性、稳定性以及数据吞吐量等方面的不足,并未被业内所认可采纳。

    本文在以往网络数控系统开发研究的基础上,提出了一种基于Android智能移动设备的新型移动网络数控系统,该系统遵循WAP及IEEE802.11b无线传输协议,以全新自主开发的手机APP为移动控制客户端,以集成了数字IO卡的IPC及无线串口服务器为数控服务端,采用基于TCP/IP的SOCKET网络通信方式,在自定义应用层通信协议的基础上,保证了数据传输的可靠性、实时性以及大的数据吞吐量,有望实现真正意义上的移动式智能化网络数控系统,同时提出了引入NAPT穿墙技术以实现移动网络数控系统在广域网内的远程监控。

    1 新型网络数控系统的整体架构

    1.1 硬件架构

    新型网络数控系统的硬件部分主要由6个模块构成,分别是移动控制客户端、移动控制服务端、中心网络提供者、简易数控系统端、数据库服务端以及CAD/CAM工作站。其整体架构图如图1所示。

    其中,移动控制客户端可以是各类基于Android操作系统的智能手机、平板电脑等。移动控制客户端用于与移动控制服务端进行数据交互,包括运动控制命令的交互、间接访问数据库的交互、DNC传输的交互以及与用户的良好互动等。

    移动控制服务端由内置数字IO卡的工控机IPC构成,它是与简易数控系统端、数据库服务器、CAD/CAM工作站以及移动控制客户端进行交互的直接操作者,也是中间人,通过移动控制服务端,其余四者可以进行间接的友好互动。

    中心网络提供者即无线路由器,它将移动控制客户端、移动控制服务端、数据库服务端以及简易数控系统端连结成一个小型局域网,使局域网内各主机具备无线通信渠道,各主机处于同一网段,可实现实时稳定的数据传输,同时网络提供者可通过网络交换机等标准网络设备与外网建立连接,在后续引入NAPT穿墙技术后,可实现SOCKET通信情况下外网自由访问内网设备,达到组建真正的广域网移动数控系统的目的,即使操作人员在遥远的外地,也能对数控机床进行远程操作与监控。

    简易数控系统端由数控系统加无线串口服务器构成。无线串口服务器主要用于将数控系统的串口通讯转换为有线或无线TCP/IP通讯,使数控系统具有无线联网功能。虽然数控系统本身有RJ45接口,可实现有线网络连入,但以这种形式连入网络,则一台数控设备需要一台IPC,配置成本提高,而且也增加了布线维护的难度。综上考虑,决定采用无线连入方式,一台IPC可同时控制数台数控系统,且省去布线维护的困难,完全采用无线控制,经济简单。

    数据库建立在本地PC上,将本地PC作为服务器,操作系统可采用WINDOWS XP或者WIN7。因数据量并不是很大,因此对本地PC没有特别要求。数据库服务器作为提供给移动控制服务端读写的仓库,存储着客户端、服务端、以及工作站等的大量数据,在该系统中举足轻重。

    CAD/CAM工作站用于CAD/CAM软件生成加工NC代码,通过无线或有线传输发往移动控制服务端,由移动控制服务端统一提交至数据库保存。

    1.2 软件架构

    新型移动网络数控系统的软件部分主要由3个模块构成,分别为移动控制APP模块、移动控制C++服务器模块以及数据库管理模块:

    (1)移动控制APP模块主要是与移动控制服务端进行数据交互,以达到对数控系统的简单实时控制、机床加工位置点的实时传输显示、DNC传输功能的实现、机床信息及机床加工状态、IO状态、PLC状态、伺服状态等的查询与修改等;

    (2)移动控制C++服务器模块除了负责读写伺服状态、IO状态以及PLC状态等以外,还负责将读写到的数控系统数据提交至服务器,并响应客户端的数据库操作请求,对数据库进行读写操作,并返回状态至客户端显示存储;

    (3)数据库管理模块则与上述数据库服务器功能一致,在此不再赘述。数据库管理模块主要用于定时存储机床加工状态、PLC状态、IO状态、伺服反馈、加工程序、用户信息以及加工历史数据等。

    2 网络数控系统的整体实现

    新型网络数控系统的硬件选择已经在整体架构里做了详细的阐述,而硬件本身的配置及安装等难度一般,本节主要介绍软件部分的具体实现。

    2.1 移动控制APP模块

    操作系统采用Windows 8.1,该操作系统具有良好的向下兼容性。开发语言采用JAVA,开发环境采用Android Studio1.0,该IDE基于IntelliJ IDEA,是Google于2014年8月推出的专为Android开发而生的集成环境。使用该IDE可以完成APP在不同屏幕尺寸下的适配,使开发者开发的APP可以安装在目前大多数主流智能移动设备上。移动控制APP模块的构成如图2所示。

    其中公共包主要包括一些全局配置常量、公用方法以及公用实体类,这些内容用于APP全局共享。用户自管理模块主要包括用户个人信息的展示、用户自定义系统配置参数的保存与修改以及用户个人数控机群的自我管理等。

    工具库包含了几个最重要的工具类的定义与实现。其中SocketUtils是用于Android客户端与移动控制服务端进行数据交互的网络通信库,NetPacketUtils是用于网络数据封包解包的工具类,而DBUtils则是用于Android客户端远程操作SQL SERVER数据库的工具类。网络数控技术的关键问题在于研究数控系统的网络通信功能。[5-7]以下列出其中两个类库的主要属性与行为,并做出相应解释。

    public class SocketUtils

    {

    private Socket sockClient;//用于与服务端通信的套接字实例

    private static BufferedReader bufferReader;//用于读取网络数据的输入流

    private static PrintWriter printWriter;//用于写入网络数据的输出流

    private static final int NMSG=0x01;//数据包消息常量

    private static final int NFILE=0x02;//数据包消息常量

    private static final int NCONTROL=0x03;//数据包消息常量

    private static final int NDBUTIL=0x04;//数据包消息常量

    private boolean initSocket(){} //初始化套接字方法

    private boolean openReader(Socket sock){} //获取字符输入流方法

    private boolean openWriter(Socket sock){} //获取字符输出流方法

    private void closeSocket(){} //关闭套接字方法

    private void closeReader(){} //关闭输入流方法

    private void closeWriter(){} //关闭输出流方法

    public BufferedReader getReader(){} //向外提供输入流接口

    public PrintWriter getWriter(){} //向外提供输出流接口

    ......

    }

    客户端与服务端数据交互是通过SOCKET TCP套接字进行的。TCP连接是面向连接的传输层协议,保证数据到达对端的可靠性以及有序性,因此不用担心数据丢失的问题。套接字就好比一条管道,数据好比水流,只有在管道建立好的情况下,水流才能到达对方。因此,必须通过initSocket方法传递服务端IP及开放端口,联通服务端,而后在openReader与openWriter方法中通过套接字实例获得IO流,其后便可以开始进行数据收发。在数据收发完毕之后,调用closeReader与closeWriter方法回收IO流资源,并关闭套接字。而getReader与getWriter是用于数据收发时对外提供的接口。

    public class NetPacketUtils

    {

    private byte[]sMsgBuf;//接收數据缓冲区

    private int nBufSize;//缓冲区总大小

    private int nOffset;//缓冲区数据大小

    private NetPacket netPacket;//网络数据包对象

    private NetPacketHead netPacketHead;//网络数据包包头对象

    private boolean isFullPacket(){} //判断是否满包方法

    private boolean isValidPacket(){} //判断是否为无效包方法

    private boolean reBufSize(int nLen){} //重新调整缓冲区大小方法

    private void addMsg(byte[]sBuf,int nLen){} //向緩冲区添加数据方法

    public NetPacket recvPacket(Socket sock,BufferedReader reader){} //接收数据包方法

    public void sendPacket(Socket sock,PrintWriter writer){} //发送数据包方法

    ......

    }

    TCP传输虽然可以保证数据传输的可靠性与有序性,但因为TCP底端实现采用了Nagle算法,数据到达对端时有可能发生半包、粘包等问题,[8]所以必须自己制定应用层通信协议,完善收发包机制。数据包包括包头和包体,其中包头是具有固定长度的一个类,类中封装了数据包类型、文件类型、命令类型以及包体长度等属性,通过提取包头中的包体长度属性,就可以确定一个数据包的大小,如此就可以实现收发变长包的机制。经过实测,数据收发良好且没有丢失数据的现象。而NetPacketUtils的作用就是构造好数据包对象,通过网络通信库SocketUtils对外提供的IO流,调用recvPacket与sendPacket方法进行数据包接收与发送。

    UI模块共划分为五个主要页面。“首页”页面是用户机群自管理区,按车床、铣床、磨床、钻床、加工中心分为五大类,客户可以自行添加、修改或删除机群信息。该机群信息只匹配该用户本身,与其他用户无关。“位置”页面是DNC控制区,用户可以通过该页面的文件选择区域,从本地或者数据库选择加工程序文件,并确认实时发送到数控机床端,完成NC代码的传输,同时,该页面在后台开启了收发service,用户可在该页面实时浏览当前加工位置的绝对和相对坐标,当加工结束时,APP将弹出提示对话框,询问用户是否以文件形式保存加工历史,加工历史将同时提交至SQL SERVER数据库和Android自带轻便型sqlite数据库,用户也可打开页面右上角的ActionBar,开启远程视频监控模块,两者结合可实现远程监控功能。“添加”页面是提供给用户添加具体机床信息的区域,在该区域提交之后,会将数据存入数据库,同时该页面还会定时读取服务端伺服状态、IO状态以及其他PLC状态等刷新显示在该页面,用户修改的数据也会写入到移动数控服务端。“控制”页面主要实现简单的运动控制功能,包括机床的开启关闭复位、机床以固定位移向某一轴移动以及移动时的速度倍率调整。“我的”页面主要是用户个人信息,这些信息同样会存入数据库。其中两个界面效果如图3所示。

    业务逻辑模块划分成实体操作区、DNC操作区以及视频监控区。实体操作区实现各项对数据库的具体操作,DNC操作区借助SocketUtils及NetPacketUtils完成NC代码的上传与下载,视频监控区也通过上述工具类,接收来自移动控制服务端的动画数据帧,并以Android自带的MediaPlayer播放监控视频,以方便用户结合视频信息与PLC状态、IO状态等参数信息进行远程监控及诊断,进一步实现数控系统的移动化与智能化。

    2.2 移动控制C++服务器模块

    移动控制C++服务器模块主要负责与多个客户端进行通信,处理各客户端对数据库的读写操作请求、处理各客户端读写数字IO卡的操作以及定时读取PCL/IO/伺服等状态信息等,对于界面要求不高,但服务器模块必须具备强大的数据处理能力。服务端程序开发基于.NET FrameWork,开发环境采用Visual Studio2010,开发语言采用C++。实际处理时,运用多线程并发处理,采用同步套接字的方式,为每个客户端连接建立收发线程,实现了多线程双通道同步收发数据的机制,在大数据吞吐情况下也能实现自如收发。其收发流程如下图4。

    从图中可以看出,服务端每接收到一个客户端连接,就为该客户端创建一个通信SOCKET,同时创建收发线程用于数据收发。这种情况在程序里表现为一个结构体,其属性如下:

    struct sockForClient

    {

    SOCKET sockClient[MAX_CLIENT_NUM];//用于与客户端通信的套接字句柄

    SOCKADDR_IN addFrom[MAX_CLIENT_NUM];//保存客户端地址信息的结构体

    HANDLE hRecvThread[MAX_CLIENT_NUM];//接收线程句柄

    HANDLE hSendThread[MAX_CLIENT_NUM];//发送线程句柄

    }sClient,*pClient;

    移动控制服务器端对于网络数据的封包解包机制与JAVA端极其类似,唯一区别就在于C++端多了指针的操作。对数据的处理封装成CNetPacket类,其属性与行为如下:

    class CNetPacket

    {

    private:

    char* m_pMsgBuf;//数据缓冲区

    int m_nBufSize;//缓冲区总大小

    int m_nOffset;//缓冲区数据大小

    public:

    BOOL IsFullPacket()const;//判断是否满包方法

    BOOL ReBufSize(int nLen);//重新调整缓冲区大小方法

    BOOL AddMsg(char* pBuf,int nLen);//向缓冲区添加数据方法

    Void Poll(); //移除缓冲区首个数据包方法

    };

    2.3 数据库管理模块

    数据库管理模块用于定时存储机床加工状态、PLC状态、IO状态、伺服反馈、加工程序、用户信息以及加工历史数据等。数据库服务器采用微软SQL SERVER2008。SQL SERVER是一个全面的数据库平台,,提供了企业级的数据管理,为关系型数据和结构化数据提供了更安全可靠的存储功能。C++服务器端采用ADO方式连接SQL SERVER.ADO是ActivX数据对象,是面向数据库编程的组件接口。加载ADO DLL后,可以获得该COM对象的三个智能指针,分别是pConnection、pRecordSet、pCommand,而后便可以利用这三个智能指针根据sql语句进行建表、增删改查以及访问外部数据源等数据库操作了。数据库管理模块具体划分为图5的7个模块,每個模块对应建立N张表,依次存入各数据信息。

    3 简单测试结果分析

    测试采用了C++定时器QueryPerformanceCounter,该定时器是真正的微秒级定时器,可以用来测试数据传输的延迟性。其关键代码段如下:

    QueryPerformanceFrequency(&container);

    freq=(double)container.QuadPart;

    QueryPerformanceCounter(&container);

    start=container.QuadPart;

    recvPacket();//用于测试的发包函数

    QuerPerformanceCounter(&container);

    end=container.QuadPart;

    runTime=(double)(end-start)/freq;

    在网络稳定的情况下,对收发包进行了测试,测试结果表明,TCP传输一次按最大包传送65535B字节数据,单程runTime延迟时间不超过2ms,可以满足实时监控的要求。图6是数据在通信两端的收发图。

    4 结语

    本文在前人研究开发的基础上,提出了一种新型移动网络数控系统。该网络数控系统以当前流行的Android智能移动设备作为实时控制器,结合当下盛行的WAP及IEEE802.11b协议,对数控系统的智能化与移动化的发展具有一定的推动作用。在硬件层面完成了硬件的匹配选型,将6个硬件模块连结在同一网段下,使其良好交互,并对外暴露数据通道,以期在后续研究中引入NAPT穿墙技术实现真正意义上的广域网数控系统通信;在软件层面,详细剖析了3个子模块的架构及实现,完成了移动数控APP的开发、C++服务器端的部分开发以及数据库的搭建,并给出了在TCP SOCKET通信下数据收发粘包半包等问题的解决办法,确实保证了数据通信时的可靠性和实时性,为新型网络数控的实现打下了良好的基础。目前整体系统的开发还未完成,后续将继续深入研究,力求进一步优化数据传输以及服务端并发处理的机制,同时开始数据库服务器端的开发编程。

    参考文献:

    [1]韩江,赵福明,王治森,吴炎明.网络数控系统的概念及其技术内容[J].中国机械工程,2001,12(10):1141-1144.

    [2]周明发,王治森,董伯麟,章建科,黄晓峰.无线通信在机器人及数控机床中的应用[J].制造业自动化,2006,28(9):58-64.

    [3]夏广平,富刚.基于无线网络的远程移动控制数控机床系统研究[J].机械设计与制造杂志社,2008,12(12),162-164.

    [4]李伟荣,林尚勇.基于Web远程运动控制系统的研究[J].机械设计与制造工程,2014,43(6):58-60.

    [5]王银芝,刘念聪,孙未.网络数控系统及其关键技术分析[J].机械科学与技术,2005,24(1):104-107.

    [6]Goseelin C,Angeles J.A global performance index for the kinematic optimization of robotic manipulators[J].Journal of Mechanical Design,1991,1113(9):220-226.

    [7]Yoshikawa T.Analysis and control of robot manipulators with redundancy[A].Proc First Int Sinp of Robotic Research[C],Cambridge Mass MIT press 1984:735-747.

    [8]张柏军,杜鹏.网络化数控系统的研究和开发[J].数字技术与应用,2010,03(5):39-40.

    基金项目:福建省中青年教师教育科研项目(JT180764)

    作者简介:李淑梅(1991-),女,硕士,厦门工学院机械工程系助教,主要从事数控技术方面的研究。

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/10 6:55:25