4 程序设计
在数控系统的远程监控实现中。服务器与客户端进行数据交换时除了要遵循网络传输层的TCP协议进行数据通信,还要在应用层制定一个通信双方都认可的协议,通过这种协议,双方就可以对所要发送和接收的信息进行一致的解读和执行。
4.1系统应用层协议的制定
远程监控时,传输的信息主要有以下几类:
(1)控制。这类信息是数控系统需要实时执行和响应的远程操作命令,如:系统的初始化,启动/停止,暂停/恢复,加工程序的选择、删除,报警等。
(2)状态。数控系统返回的运行状态信息,主要包括机床的在线、离线、空闲、故障,当前加工的程序名及程序段号等。
(3)数据。各种加工程序运行产生的数据,如当前刀具坐标位置、进给速度和主轴转速等。
基于上述的各种信息制定了一个如表1所示的应用层协议表,在表中对各种信息进行了定义及语法解释。
表1部分应用层协议表
4. 2具体程序
图2 Socket编程流程图
Winsock控件与Socket完全兼容,是一个专门用于Windows网络编程的Active X控件。在VisualC++6.。下使用Winsock控件编写服务器网络通信程序,这样就不需要了解TCPIIP的具体细节或调用底层Winsock API,简化了编程过程。Socket编程的流程图如图2所示,需要分别建立客户应用程序和服务器应用程序,即C/S模型。
4. 2. 1服务器端程序设计
(1)加载套接字库。由于Winsock服务是以动态链接库的形式实现的,所以在使用前必须调用WSAStartup函数对其进行初始化,协商Winsock的版本支持,并分配必要的资源。
wVersionRequested = MAKEWORD( 1 , 1 );//指定加载1. 1版本的Winsack
WSAStartup(wVersionRequested, &wsaData);//加载套接字库
(2)创建套接字(Socket)。服务器进程总是先于客户进程启动,调用Socket函数创建一个流套接字。
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0 );
(3)绑定。成功创建了Socket之后,就应该选定通信的对象。调用Bind函数可以将本地地址绑定到套接字上。
SOCKADDR_IN addrSrv;
addrSrv. sin_addr. S_ un. S_ addr=(25<<24 )|(1<<16)|(168<< 8 ) | 192;//设本地IP地址为"192. 168. 1. 25"
addrSrv. sin_family=AF_INET;