《网络通信程序设计及在气敏传感器测试系统中的应用.pdf》由会员分享,可在线阅读,更多相关《网络通信程序设计及在气敏传感器测试系统中的应用.pdf(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 收稿日期:2005-10 作者简介:李国(1980),男,硕士研究生,研究方向为网络通信;徐永晋(1963),男,副教授。网络通信程序设计及在气敏传感器测试系统中的应用李 国,徐永晋,王正宏(上海大学机电工程与自动化学院 自动化系,上海200072)摘要:介绍基于TCP/IP协议的网络通信程序设计,着重分析了基于W indows操作系统的计算机和微处理器之间的通信程序设计及其在气敏传感器自动测试系统中的应用。关键词:TCP/IP协议;Socket;客户机/服务器模型;网络通信;自动测试系统中图分类号:TP393 文献标识码:B 文章编号:1006-2394(2006)01-0050-02Ne
2、twork Commun ication Program Design Based on TCP/IP and ItsApplication in Gas2sensitivity Sensor ATSL I Guo,XU Yong2jin,WANG Zheng2hong(Department ofAutomation,ShanghaiUniversity,Shanghai 200072,China)Abstract:Some pri mary concept on net work communication program design based on TCP/IP was introdu
3、ced.The communication programdesign bet ween microprocessor and computer based onWindows operating system and its application in gas2sensitivity sensorATSwere analysed.Key words:TCP/IP;Socket;client/servermodel;net work communication;ATS1 网络编程概述1.1 网络通信模型TCP/IP是一个包含许多协议的协议族,涉及传输控制协议、网际协议、管理协议等等。设计网络
4、应用程序时,都要涉及到信息在网络上的输入和输出(I/O),这就要解决协议软件和应用程序之间的接口问题。本文阐述的就是基于Socket的网络输入输出。Socket应用程序接口(API)是系统开发环境提供的用于研制计算机网络环境下用于程序处理网络信息的一系列系统函数。应用程序靠调用Socket中的API函数实现相互之间的通信,而Socket又利用下层的协议软件和具体的硬件设备实现实际的通信工作。它们之间的关系如图1所示。图1 网络通信模型1.2Socket和W insock简介套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双
5、向通信的端点,它构成了在单个主机内及整个网络间的编程界面。利用套接字进行通信,有两种主要的方式:流方式(Stream Socket)和数据报方式(Datagram Socket)。流方式是面向连接的,采用TCP协议。数据报方式是无连接的,使用UDP协议。在W indows操作系统下,Socket应用程序开发接口称为W insock API。应用程序通过调用W insock API实现相互之间的通信,而W insock利用下层的网络通信协议软件和操作系统调用实现实际的通信工作1。1.3 客户机/服务器模型基于TCP/IP协议的网络通信主要采用客户机/服务器模型。在客户机/服务器模型下,客户机为主
6、动方,即请求方,而服务器为被动方,接受请求方的请求2。2 气敏传感器自动测试系统简介及编程模型本文主要讨论的是气敏传感器自动测试系统中的通信程序设计。在这个系统中,由置于现场的微处理器(下位机)通过数据采集装置采集产品测试过程中各检测点的一系列数据,并将获得的及经过初步处理的数据上传给管理计算机(上位机),上位机在收到传来的数据后及时分析并做出相应的处理,然后发送指令给下位机,由下位机处理控制现场产品的测试。本系统基于上述介绍的客户机/服务器模型,上位机为客户机,下位机为服务器,在传输层上使用TCP进行通05仪 表 技 术2006年第1期信。由于上位机是基于W indows操作系统的,而下位机
7、是无操作系统的微处理器Rabbit3000,因此,二者要实现基于TCP/IP的数据通信,在通信程序的设计上是有所区别的。上位机在VC+6.0编程环境下,采用基于CAsyncSocket类的客户机程序设计;下位机采用基于Socket的服务器程序设计。在应用程序中,使用Rabbit3000提供的函数库进行通信程序设计的一般步骤如下:(1)声明一个tcpSocket的对象;(2)调用sockinit()进行初始化,该函数的功能是对内部数据结构体和以太网控制器进行初始化;(3)对于服务器程序,调用tcplisten()侦听到来的连接请求;(4)调用sockestablished()建立一条连接进行数据
8、传输;(5)调用数据收发函数sockread()和sockwrite()完成数据传输;(6)调用sockclose()释放连接。其中,tcpSocket对象在静态存储区分配存储空间,因此,即使在释放连接之后也不能直接销毁tcpSocket对象,只有在主程序运行结束才能由系统自动销毁。这几个函数在使用过程中要频繁调用一个函数tcptick(),约为10次/s。当然,高于或者低于这个数率也可以照常工作。这个函数主要完成两个功能:(a)驱动后台处理程序及时处理到来的数据;(b)检查TCP socket的连接状态3。本系统中,客户机(上位机)程序采用VC+6.0中的CAsyncSocket类的初始化函
9、数Create()、建立连接函数Connect()、数据发送函数Send()、数据接收函数Receive()、关闭连接函数Close()来完成通信程序的编写。程序的设计步骤和前面介绍的Rabbit3000的程序设计类似,在此不再赘述。在本系统中采用基于TCP协议的数据流套接字,其编程模型如图2所示。图2 通信程序编程模型3 程序实现服务器程序(仅列出部分程序段):tcpSocket sock;/声明一个tcpSocket对象;int bytes1;/保存接收字节数;int bytes2;/保存发送字节数;char buff1800;/定义数据接收缓冲区;char buff2800;/定义数据发
10、送缓冲区;sockinit();/初始化/建立连接void establishlink(void)if(!tcplisten(&sock,MYPORT,I NCOM I NGIP,I NCOM I NGPORT,NULL,0)printf(Failed to listenn);/如果tcplisten()失败,/则打印“Failed to listen”elsewhile(!sockestablished(&sock)if(!tcptick(&sock)printf(Failed to establishn);break;/如果sockestablished()失败,/则打印“Failed t
11、o establish”/接收数据tcptick(&sock)bytes1=sockfastread(&sock,buff1,BUFFSIZE);/接收数据;数据处理部分;/发送数据 数据处理部分;bytes2=sockwrite(&sock,buff2,datalength);/发送数据;客户机程序(仅列出部分程序段):其中CXyjSocket继承于CAsyncSocket,CXyjSockettcpsocket;/声明一个CXyjSocket对象;voidCMaincontroler View:ConnectServer()if(tcpsocket.Create(0,SOCKSTREAM,
12、FDREAD|FDCONNECT|FDWR ITE|FDCLOSE)=TRUE)int ConnectOK=tcpsocket.Connect(SOCKADDR3)&mAddr,sizeof(mAddr);/如果Create()和Connect()/都成功,则将ConnectOK置1该系统已经建成并投入运行,结果表明系统设计合理、功能完善、可靠性高,圆满完成了预定的技术指标。参考文献:1陈坚,陈伟,等.Visual C+网络高级编程M.北京:人民邮电出版社,2001.2 W.Richard Stevens著,范建华,胥光辉,张涛,等译.TCP/IP详解,卷一:协议M.北京:机械工业出版社,2000.3 Rabbit SemiconductorCorporation.Dynamic C TCP/IP UsersManual Z.2002.(许雪军编发)152006年第1期仪 表 技 术