第25卷
VO1.25
第5期
NO.5
计算机工程与
COMPUTER ENGINEERING AND DESIGN
2004年5月
May.2004
文章编号:1000.7024(2004)05.0796.04 中圈分类号:TP31
基于客户 艮务器模式的远程控制系统
朱晓蕾, 余达太,
(北京科技大学,
副、昌国, 颜 静
北京 100083)
文献标识码:A
摘 要:随着计算机和远程通讯为代表的信息技术的飞速发展和广泛应用,使远程监控、远程教育、远程贸易
和服务成为可能。提出了一种基于客户/服务器模式的交流伺服控制器的远程监控系统,阐述了其体系结构及各
部分功能,并开发了基于TCP/IP协议的远程通信实用程序。
关键词:远程控制;TCP/IP;客户/服务器
Remote control system based on client/server and development of software
ZHU Xiao-lei, YU Da—tai, SUN Chang-guo, YAN Jing
(University of Science and Technology Beijing,Beijing 100083,China)
Abstract:With the quick development and extensive application ofmodern information techn ology ,remote monitoring and con-
trol, remote education,remote trades and services become realizable. In order to meet the developments and requiremeDts, a
remote monitoring and control system of alternating servo controller based on client/server architecture was confirmed and deve-
loped,whose architecture and its functions were well clarified.Also,all application program was developed with the foundation
ofTCP/IP protoco1. It is proved by experiments that this system can work real time on the remote monitoring and control over al-
ternating servo controller reliably and accurately.
Key words:remote control;TCP/IP protocol;client/server winsock
1 引 言
在互连网上,人们可以利用网络来交换邮件,讨论问
题,阅读,协作,甚至游戏。今天,人们也希望通过网络从
异地甚至遥远的地方来掌握家中工控产品的状态或对其
进行某种操作,即实现远程控制。因此,开发一套能够实
现在远端 PC机上对本地电机进行监视和控制的系统即
应用交流伺服控制器的远程控制系统无论是在经济上还
是在技术上,都有积极的现实意义。针对这一情况,本文
提出了一种如何建立交流伺服控制器的远程控制系统的
设想,即生产加工的操作者与被操作对象在物理上进行
分离,而在信息、逻辑上进行集成。这一技术的实现扩大
了操作者对操作对象的控制范围,提高了管理者对异地
电机运行情况掌控的程度,实现了远程的技术咨询和远
程设备的故障诊断。
2 交流伺服控iti0器的远程控制系统
交流伺服控制器的远程控制系统是通过网络技术实
现异地计算机监控本地电机的运行状态,并能及时地调
整电机的动作。它以常用的TCP/IP协议为网络基础,采
用Client/Server的工作模式。系统框图如图 l所示。
图 1 系统框 图
远端技术服务中心作为客户端,它主要是用于和监
控用户的交互,从网络中得到电机的状态信息并将其传
递给监控用户进行分析和处理,其分析结果、控制信息和
数据信息,通过网络传递到本地监控用户 (即服务器)进
行执行。
本地监控机作为服务器,一方面,它通过本身的串口
与交流伺服控制器进行通信,来获取电机的运行状态信
息和控制器的控制信息;另一方面,它能够通过网络传送
电机数据信息(如电机设置的参数)和控制信息(如控制
收稿日期:2003.01.10。
作者简介:朱晓蕾,女,硕士研究生,研究方向为交流伺服控制器的远程控制。
-— — 796-——
维普资讯 http://www.cqvip.com
电机以何种方式运转)。当开启远程控制时,服务器能够
根据客户端的要求来采集 电机的状态信息并通过网络向
其发送。
在本系统中所使用交流伺服控制器,是一个可编程
控制器,它是由控制回路、电源部分和主回路部分等3部
分组成。在系统中,它一方面接受本地监控机发送的电
机控制信息,另一方面,它实时地反馈给本地监控机要读
取的控制信息和电机运转状态信息。
对于本文设计的远程监控系统来说,其传输信息有自
己独特的含义。在客户端和服务器间传递的信息,主要有
客户端的控制信息、数据信息和服务器端的状态信息。服
务器提供网络状态监控,并通过伺服控制器来提供电机运
行状况监控报告服务。其网络结构如图2所示。
远端 本地 控
~ ,
息
~ \
/,
一、\\ 控制信息一 监控 技术
机
珊 胛
服 务
(服 中心
务器 ’\\、 (客户
端) 端)。
图 2 网络 结构
3 程序主要设计构想
远程控制系统程序设计从以下6方面着手:
(1)程序主要采用面向服务器/客户的模式,以事件
驱动方式运行,该模式的流程图如图3所示。
服务器
罕
TCP,服务
器准备好 客户 端
+ 建立流式Socket
接收数据,得到另 J 一 Sockets2
』.—一 Sockets与远端 I 连接主机
在 Sockets2读写 在 Sockets写/读 数
据到传 送完 H●—- 数据到完
t l l 关闭Sockets2
T 关闭 Sockets
关闭最初的 结束TCP
Sockets
图3 服务器/客户模式流程图
(2)服务器和客户端的连接基于TCP佃 协议。
(3)服务器端程序响应客户端的连接请求并打开与交
伺服控制器通信的端口。
(4)在服务器上设置定时器定时读取交流伺服控制器
的电机的状态信息,当接收到客户端的请求,按客户的要
求发送,并在客户端的终端上显示。
(5)数据传递采用文件传送方式进行,基于数据格式
为文本文件类型,当一个文件进行传送时,一次传送一个
包,发送计算机在串行链路上将数据报文打包,接收时系
统 自动解包并将其写入文件中。在协议传送期间,涉及
到的计算机系统要交换有关传送操作的信息,由双方认
可的控制信号来完成,控制信号由设备和通信控制字符
组成,并且这些控制字符来源于美国国家
协会(AN—
SII)的ASCII字符集。借助于这些控制信号,就可以表示
出接收到数据或数据有错或传送已结束。
(6)包含普通终端的常用功能 (如输入指令缓存区、
历史记录的存档、日志等)。
4 系统程序具体实现
编写TCP/IP通讯程序需要采用Winsock编程,在Win.
dows95/98,WindowsNT进行Winsock开发使用的编程语言
有很多,如vC++、JAVA、DELPHI、VB等。其中vC++使用
最为普遍 ,和Winsock结合最为紧密。并且 VC++对原来
的WindowsSockets库
进行了一系列封装,继而产生了
CAsynSocket、CSocket、CSocketFile等类 ,它们封装着有关
Socket的各种功能,使编程变得更加简单。之所以选择
TCP是因为它是一种基于连接的协议,在文件传输时会
先行建立连接,通过连接可确保文件传输的正确性:UDP
则是一种无连接的协议,它在传输文件时不会确保传输
端的文件能够正确无误地传送到接收端,所以我们没有
采用UDP协议。
本文设计的远程控制系统程序利用vC++6.0作为开
发平台,使用MFC应用程序中的单文档模板作为整个系
统程序的框架。它主要由3部分成组成:客户端程序 、服
务器端程序和服务器与伺服控制器通信程序。以下分别
列出在各部分程序中重要类和结构的定义。
4.1 服务器端程序设计
(1)CServerView不仅显示发送信息和接收到的信息.
而且设制定时器查询伺服控制器的状态:
class CServerView:public CeditView
{
public:
\\显示接受信息
void Message(LPCTSTR lpszMessage');
void OnTimer(UINT nlDEvent);\\设制定时器
}
(2)CListenSocket这个类代表 了监听
Socket:
class CListenSocket:public CSocket
{
public:
·— — 797·——
维普资讯 http://www.cqvip.com
CServerDoc m
_
pDoc\\建立一个文档类指针变量
public:
\\处理客户的请求
virtual void OnAccept(int nErrorCode)
}
(3)CClientSocket管理网络通信:
class CClientSocket:public CSocket
{
public:
CSocketFile m pFile;\\以下4个变量为实现
CArchive m pArchieveln;\\信息的序列化而设
CArchive m pArchieveln;
CServerDoc m pDoc;
public:
void Init0;
void Abort();
void SendMsg(CMsg pMsg);~发送信息
void ReceiveMsg(CMsg pMsg);~接受信息
}
(4)CMsg用于封装发送和接受的信息,以便于程序
更好地处理信息在网络中交互。
class CMsg:public:Cobject
{
public:
CString m
_ strText;~发送的字符信息
BOOL m
_ bClose;~是否关闭了客户端程序
CStringList m
_
sgList;\\表示信息列表
public:
void Init0;
\\串行化存储
virtual void Serialize(CArchive&ar1
}
(5)CserverDoc这个类在服务器端程序中是最复杂的,
它负责管理一个监听的Socket和一个客户Socket的列表;
另外,它还负责管理一个接受信息的列表。
class CServerDoc:public CDocument
{
public:
CListenSocket m pSocket;
CStringList m
_
msgList;
CPtrList m
_
connection.List;
public:
void UpdateClient0;
\\收集信息
CMsg AssembleMsg(CclientSocket pSocket);
CMsg ReadMsg(CclientSocket pSocket);\\读信息
\\发送信息
·— — 798·——
void SendMsg(CclientSocket pSocket.CMsg pMsg);
\\关闭Socket
void CloseSocket(CclientSocket pSocket);
virtual void Serialize(CArchive& :
}
4.2 客户端程序设计
(1)CClientView(1)显示发送信息和接收到的信息:
class CClientView:public CeditView
{
public:
\\显示接受信息
void Message(LPCTSTR lpszMessage);
}
(2)CClientSocket管理网络通信:
class CClientSocket:public CSocket
{
public:
CClientDoc m pDoc;
public:
\\接受信息
virtual void OnReceive(int nErrorCode);
}
(3)CMsg也是用于封装发送和接受的信息,与服务器
端结构相同不再重复。
(4)CserverDoc这个类在服务器端程序中是最复杂的,
它负责管理一个监听的Socket和一个客户Socket的列表;
另外,它还负责管理一个接受信息的列表。
class CClientDoc:public CDocument
{
public:
CSocketFile m pFile,\\以下4个变量为实现
CArchive m pArchieveln;\\信息的序列化而设
CArchive m pArchieveln;
CClientSocket m pSocket;
public:
BOOL ConnectSocket(LPCTSTR lpszHandle,LPCTSTR\
lpszAddress,UINT nPort);\\连接服务器
void ReceiveMsg0;\\接受信息
void SendMsg(CString&strText);\\发送信息
\\串行化存储
virtual void Serialize(CArchive&ar):
}
4.3 服务器与伺服控制器的通讯程序的设计
(1)PCOMM表示在Windows通信中,串口的所有属
性。
typedef struct tagCOMM
f
维普资讯 http://www.cqvip.com
HWND hWnd;//窗 口句柄
HANDLE idCommDev;//串口句柄
HANDLE idCommDevPrev;//初始串口句柄
INT port;//串口号
CHAR PortName[10];//串口名
BOOL fConnected;//串口是否连接
HANDLE hPostEvent;//主事件句柄
//用户针对窗口自定义事件句柄
HW ND hPostToW nd;
OVERLAPPED os;//I/O重叠
COMMCONFIG cc;//串口初始设置
COMMTIMEOUTS timeouts;//I/O重叠延 时
INT mode;//通信方式
}PCOMM,
(2)cEvwincoI砌 实现服务器与伺服控制器之间的
通信:
class CEVW inCOIIlII1
{
public:
PCOMM COMM ;
CW inThread pWatchThread;
CEVWinComm0;
-43EVWinComm();
BOOL OpenComm0;\\打开串口
void CloseComm0;\\关闭串口
void OnSend0;\\发送信息
void OnRecv0;\\接受信息
BOOL SetupCommResO;\\初始化串口设置
void SaveToFile(const char fname,\
\\以文件形式存储
const char data,int nCount);
\\获得串口
void GetPort(int port,char strPort);
\\将十六进制转化为十进制
long HexCharToNum(const char str);
\\设置缓冲区大小
char SendBytes[256],RecvBytes[4096];
};
4.4 程序的具体实现注意的问题
(1)服务器端和客户端应用程序都要进行初始化处
理,如port(端 口)缺省值的设定等。由于“交流伺服控制
器的远程控制系统”是服务器和客户的综合体,因此初始
化处理更加重要。
(2)应独立编写通讯模块 ,把网络通信作为应用程序
中的一个模块,有利于移植到其它应用程序。
(3)尽量避免通讯双方 同时发送数据,这样可能造成
数据的暂时阻塞。在服务器端,如果是无人职守的机房,
要考虑程序的关闭保护 ,确保程序始终处于正常的侦听
状态。
(4)编写终端程序时,要考虑终端窗口所能显示文本
内容的最长限度,避免出现不必要的程序运行错误。
5 结 论
本文将客户/服务器模式应用在伺服控制器 的远程
监控系统中,在实际开发中表明,该系统可以实时、快捷、
可靠地对交流伺服控制器进行远程监控。
参 考 文 献:
[1】 王征.数控DrlI.远程监控系统网络结构的研究[J】.计算机
工程,1998。(9).
[2】 黄长青.基于TCP/IP协议的交换机远程控制的软件实现
和应用[J].湖北邮电技术,2001,(1).
[3】 顾洪军.控制系统的网络化发展 [J】_工业仪表与自动化装
置,2000,(1).
(上接第749页)
况下建立起 3个LDP会话 S1、S2、S3。拔除链路 L3,则S1
关闭,此时LDP会话重建功能生效,最终在LSR1与LSR2
间重新建立起新的LDP会话 S1’。
本
与文献 [5】所含机制的区别在于,本方案对
LDP会话提供了链路层的保护,而文献[5】中的FTLDP会
话机制提供的是会话层的保护。
5 结 论
本文从MPLS网络的结构出发,研究了MPLS光网络
与非光网络的故障管理,并且设计与实现了一个MPLS非
光网络的LDP会话重建方案。
参 考 文 献:
[1】 RFC3031.Multiprotocolq label switching architecture[S】.
[2】 Guangzhi Li,Yates,J Dongmei Wang,et a1.Control plane
design for reliable optical networks [J】_Communications
Magazine,IF_,EE,2002,40(2):90—96.
[3】 Old E,Matsuura N,Shiomoto K,et a1.A disjoint path selec—
tion scheme with shared risk link oups in GMPLS net-
works[J].Comm unications Letters,IEEE,2002,6(9):406—408.
[4】 RFC3036.LDP specification[S】.
[5】 RFC3479.Fault tolerance for the label distribution protocol
(LDP)[S】.
· — — 799·——
维普资讯 http://www.cqvip.com