微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于TCP/IP的多线程通信及其在远程监控系统中的应用

基于TCP/IP的多线程通信及其在远程监控系统中的应用

时间:08-03 来源:互联网 点击:
3 应用实例-高层协议的设计

在电厂和电站中,为了保证安全工作,保护系统必不可少。保护系统的电源供应通常使用两种方式。一般情况下,使用交流电系统对保护系统进行供电;当交流电系统出现故障时?立即使用后备的蓄电池系统对保护系统进行供电。为了对蓄电池系统进行监控和管理,以保证蓄电池在关键时刻能正常工作,设计了在Windows NT环境下具有远程通讯功能和动态人机界面的智能蓄电池远程监控系统 。该系统由蓄电池智能管理、充电机控制、母线绝缘在线检测、声光报警、系统组态、远程通信等子系统组成,实现对蓄电池/充电机智能化远程管理和控制,对整个系统的运行状态进行实时监控,具有多媒体报警、事件处理、动态数据库、趋势画面和动态画面显示、操作提前提醒等功能。系统框图如图2所示。



在远程通信模块中,远程监控机需把监控客户的操作命令及时传给本地机,本地机根据命令控制充电机,使之按照一定的方式工作,而本地机需定时向远程监控机反馈实时的充电机状态信息。它们之间的通信是基于TCP/IP的广域网通信,而且,我们引进了多线程机制以保证系统具有良好的实时性。

下面以其中的充电机控制系统为例谈谈如何使用CSOCKET.htm" target="_blank" title="Socket货源和PDF资料">SocketComm类进行远程通信。为简单起见,假定本地机与远程监控机之间通信的信息仅有下面三种类型:

·本地机接收到该命令后,控制充电机按照稳压模式运行,输出电压为电压给定值;

·本地机接收到该命令后,控制充电机按照稳流定时模式运行,输出电流为电流给定值;

·本地机向远程监控机发送充电机的实时状态数据(包括输出电压、输出电流、状态指示和故障类型指示)。

在基于TCP/IP的面向连接的网络通信中,客户与服务器之间传送的是有序可靠的字节流(Byte Stream),所以程序员有必要在传输层TCP上定义自己的高层协议,设计帧结构,将字节流变成有意义的信息。在CSOCKET.htm" target="_blank" title="Socket货源和PDF资料">SocketComm类中由AssembleMessage()函数把数据组合成一定的帧结构。帧结构为:

其中@为帧起始标志,#为帧终结标志对应的结构定义如下:

typedef struct
?{ int MessageType;? //信息类型
int ChargerNo;? //充电机编号
int DataNo;? //数据类型
float Data;? //数据
?}MessageStruct;?

需要通信时,先声明一个MessageStruct变量,根据信息内容对各成员变量赋值,传给 AssembleMessage()函数组合成帧,再调用SendMessage()函数发送给接受方。接受方接到数据后,对数据内容的解释,是由CsocketComm类中的AnalyzeMessage()函数完成的。AnalyzeMessage()函数返回一个MessageStruct变量。应用程序就可根据它的各成员变量控制充电机或动态显示充电机的状态。

总之,把多线程机制引进通信,有利于提高应用程序的实时性,充分利用系统资源。对于大型的工程应用来说,不同的线程完成不同的任务,也有利于提高程序的模块化,便于维护和扩展。本文给出了一种在Windows NT下基于TCP/IP协议的多线程通信的基本方法,根据该方法进行修改和扩充,便可设计出符合具体应用的高质量的多线程通信程序。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top