admin 管理员组

文章数量: 887021


2023年12月22日发(作者:input属性隐藏)

第12卷第5期 2010年5月 趣簖参考 Vo1.12 No.5 Mav.2010 doi:10.39690.issn.1563-4795.2010.05.015 基于SOCK盯编程实现的组态软件与 控制器的网络通讯 朱晓凤 (华北计算机系统工程研究所,北京 100083) 摘 要:在基于TCP/IP网络协议和SOCKET接口技术的基础上,分析了如何保证数据传输实 时性、准确性以及处理阻塞问题的措施;同时针对状态监测中数据传输的间歇这一特殊性, 提出了一种基于事件驱动的网络通讯模块的设计方法。 关键词:S0CKET编程;组态软件;控制器;网络通信 0 引言 组态软件是面向工程监控和数据采集的软件 平台工具,具有丰富的设置项目。组态软件所涉 及的工业领域非常广泛.在工业监控系统中发挥 工程师站 着越来越重要的作用。组态软件要接收现场的采 集数据,并形成动态画面。以反映工业现场的各 种状态,并能够对现场设备进行控制。这些都依 要作用。 层组态运行环境与下层控制器之间数据交互的重 一 图l 系统总体结构图 赖于组态软件的通信模块。通信模块作为组态运 行环境中数据交互的重要渠道,通常处于监控组 2通信模块设计 为了能够及时、准确的反映设备运行状况, 设计时可采用基于TCP/IP协议的流式套接字 一 态软件运行环境的核心区.其功能直接决定着组 态软件的性能。本文在基于TCP/IP网络协议和 SOCKET接口技术的基础上,介绍了基于 fSOCK_STREAM)来实现组态软件通信模块的程 序设计。 为了实现网络通讯.Windows为应用程序提 供了各种编程接口,如Windows Sockets API等, IEC61131-3标准的组态软件通讯模块的设计与实 现方法。 1通信模块功能 组态监测系统分为控制器和工程师站两部 应用程序可以直接使用这些API函数。但对于较 大型的应用程序来说,应该设计一个虚拟网络接 口层,以使能用windows提供的各种通讯API来为 应用程序提供通用的网络功能。这样的接口层可 以采用中间DLL的形式,它将应用程序和windows 分,图1所示是系统的总体结构图。图中的控制 器负责采集并处理数据,工程师站负责接收控制 器发送过来的数据,并将数据显示和保存。通信 模块根据用户定义的通信协议实现工程师站组态 的各种API隔离开来,使程序员能更方便地设计 自己的应用程序。这样的设计可使应用程序更易 于维护和移植。 软件与控制器之间的数据通信,完成数据通信帧 的组织下行和上行数据帧的校验、解析。由此可 见,在整个组态软件中。通信功能模块担负着上 基于通信需求和上述思路,利用基于TCP_IP 的SOCKET接口可以实现网络通信,通信模块通 收稿日期:2010—01—15 常以动态链接库的形式存在。 WWW.ecda.cn 2010.5电子元嚣件主用 41 

第12卷第5期 电子元器件壶用 Electronic Component&Device Applications Vo1.12 No.5 Mav.2010 2010年5月 2.1 Socket套接字 创建ServerSocket对象,l 在指定端口监听 l Windows Sockets不是一种网络协议,而是一 套开放的、可支持多种协议的、Windows下的网 络编程接口。Winsock实际在计算机中提供了一 ‘ 等待来自客户机的 连接服务请求 根据觚务器的 地址和 端口号创建Socket对象 ‘ 接收来自客户机的请求,l一 建立连接 创建s0cket对象 l一 ● 向服务器的监听端口 发送连接请求 个通信接口,应用程序在网络上传输信息都可以 通过这个Socket接口来实现。Windows Sockets分 I 建立输入输出流,并通l 数据通信 过向Socket中读写数据卜一 与客户机进行通信 l l 建立输入输出流,并通 过I ̄Socket中读写数据 与服务器进行通信 为三种类型:其中流式套接字fsock—stream)定 义了一种可靠的面向连接的服务,它使用TCP作 为传输层协议,可实现无差错无重复地顺序数据 包传输;数据报套接字(sock—dgram)定义了一 种无连接的服务,它使用UDP协议,数据通过相 互独立的报文进行传输,而且是无序的,同时不 保证可靠和无差错;原始套接字(sock—raw)允 ‘ 关闭Socket结束与当前客户机 的数据通信,等待其它请求。 拆除连接 ● 关闭Socket结束与 服务器的数据通信 I  ̄SerIverSocket,结束监听. 服务器(Server) 客户机(Client) 许对低层协议f如IP或ICMP)直接访问,主要用 于新网络协议的实现和测试等。 图2给出了一种典型的C/S f客户端服务器) 面向连接套接字调用的实现流程。 本系统中,工程师站组态软件一般可作为客 图2面向连接套接字调用的流程 2.2数据交互 通讯模块主要与框架、在线两个模块以及控 制器存在数据交互。图3所示是其通讯模块与组 态软件的其它模块及控制器之间进行数据交互的 流程图。其中,通讯模块发送给框架窗口的消息 主要有三项功能:一是通知在线模块读取控制器 返回的应答数据;二是在通讯中出现异常时,返 回错误信息;三是在通讯出现超时时,返回超时 信息。 2_3数据传输协议 户端向控制器发送连接请求,以建立连接。由于 控制器采集数据是周期性的,组态软件采用异步 选择机制判断控制器是否有数据发送过来。Win. dows Sockets的异步选择函数提供了消息机制的网 络事件选择功能,当它所登记的网络事件发生 时,应用程序相应的窗1=1会收到一个消息,消息 中指明了所发生的网络事件以及与该网络事件相 关的一些信息。 连接建立之后,即可调用Winsock提供的函 数来发送和接收数据。进程结束时,则关闭两个 套接字 TCP/IP协议族的核心部分是传输层和网络 层。传输层主要为应用程序提供端到端的通信, TCP/IP协议族有两个互不相同的传输协议,即 TCP(传输控制协议)和UDP(用户数据报协议)。 图3数据交互流程图 42 电子元器件焘用 2010.5 WilY ̄.ecd ̄cn 

第12卷第5期 2010年5月 趣钎雾 V01.12 No.5 Mav.2010 TCP是一种面向连接的协议,它可给用户进 程提供可靠的全双工的数据通信,其所做的工作 是把应用程序交给它的数据分成合适的小块交给 下面的网络层,同时确认接收到的分组,并提供 3通信模块的实现 3.1实现思路 为了实现与控制器之间的异步通讯,通讯模 流量控制、设定超时及重传等机制。由于TCP提 供有高可靠性的端到端的通信,因此,应用程序 可以忽略所有这些细节。 Winsock的Nagle算法会降低小数据包的发送 速度,因此应当定义一种数据结构,以将发送的 数据按照这种数据结构以字符型ASCII发送。客 户端接收到服务器传来的数据,按照这种数据结 构解析数据,这样做可以减少小数据包的数目, 避免协议使用Nagle算法。此外通过消息响应代 替轮询也是提高传输实时性的一种措施。 2.4阻塞的预防及处理 TCP/IP协议本身的滑动窗口控制可以有效的 防止阻塞的发生。假设服务器和客户端的收发缓 冲区大小为100 K字节,服务器每发送一个大小 为80 K字的数据包.客户端接收到这个数据包 后,将返回一个应答.应答中包含有下次服务器 能够发送的最大的字节数,即下次服务器只能发 送大小不能超过20 K字的数据。按照这种控制方 法.TCP/IP可根据滑动窗口的大小控制发送的速 度。滑动窗171大,则发送的数据量大,滑动窗口 过小,则发送的数据量也会减小,这样即可以防 止阻塞的发生。 该通讯模块中使用的防阻塞方法是在同步方 式中采用select函数来检查接收发送缓冲区的读 写可用状态。服务器端发送数据前,应先检查服 务器的发送缓冲区是否可写,如不可写.说明发 送缓冲区己经写满,需要等待发送缓冲区有剩余 空间时再发送,以避免阻塞。同样,客户端在读 缓冲区数据前.也应先检查一下缓冲区是否可 读。如果发送缓冲区一直不可写,那么可能是因 为网络断开,或者网络负载过大,使数据不能发 送出去。 设置一个超时时限.可以阻塞发生时.当发 送缓冲区不可写的状态超过设置的超时时间.系 统则重新建立一个连接。 将这种方法和TCP/IP协议本身的防阻塞控制 结合使用,可以有效地防止阻塞的发生。 块的总体设计如图4所示。 组 [程师 L监视/下装、创建发送线程一, J 一 )建立连接创 襄收线程 一f \, )萎嚣霾 强 一 誊, 通知读玮 立答数据 数据 。、 )读取应答数据  .一『 图4总体设计思路 首先.由主线程调用外部接口函数以建立连 接,同时,创建发送和接收线程,以分别用于数 据的发送和接收。 当要发送数据时,主线程调用外部接口函数 来发送数据。该函数先将待发送的数据填充到通 讯模块的发送缓冲区中,然后通知发送线程,并 由发送线程负责将发送缓冲区中的数据发送出 去。 当数据发送成功后.可由发送线程发送消 息,通知接收线程准备接收数据。 当有应答数据到来时,接收线程将接收数据 并将数据放人通讯模块的接收缓冲区。接收完 后。接收线程将发送消息以通知主线程读取应答 数据。 主线程接到通知后,将调用外部接口函数接 收数据。该函数可将通讯模块的接收缓冲区中的 应答数据复制到应用程序指定的缓冲区中。 数据的发送和接收交替进行.就可以完成特 定的操作。 3.2模块封装 通过动态链接库技术可以提供一种方便、快 捷的资源共享途径。这实质上是一些函数、数据 和类集合成的可执行模块。通 (下转第47页) WWW.ecda.cn 2010.5电子元器件主硐43 

第12卷第5期 2010年5月 趣钎参考 Vo1.12 No.5 May.2010 的依据。 【3】 王建英,尹忠科,张春梅.信号与图像的稀疏分解及初 步应用[M].成都:西南交通大学出版社,2006. 5 结束语 雷达辐射源的无意调制是每部雷达所固有的 特征.对每部雷达具有唯一性。本文首先针对雷 达辐射源信号的具体特征,建立一个包含频率参 数和相位参数的过完备时频原子库,然后通过对 带有相位噪声的辐射源信号的时频原子分解提取 出载频.并将载频的均值及偏离值作为雷达辐射 源个体识别的依据。需要说明的是本方法只适合 【4】 朱明,普运伟,金炜东,胡来招.基于时频原子方法的雷 达辐射源信号特征提取[JJ.电波科学学报,2007,22(3): 458-462. [5】 刘渝.快速高精度正弦渡频率估计综合算法[JJ.电子 学报.1999(b)。pP:12b-128. [6】 D.C.Rife,R.R.Bootstyn.Single—tone parameter estima— tion from discrete—time observation fJ].IEEE Trans.In— form.Theory,1974,20(5):59 1-598. 【7】 王建英,尹忠科,陈磊.基于非正交分解的频率估计算 法[JJ.电波科学学报,2007,22(1):64—68. [8] 张冠百.锁相与频率合成[M].北京:电子工业出版社, 1995. 常规雷达信号,并且计算量很大,具有一定的局 限性。但由于过完备原子库选择上的灵活性,也 可以考虑用其他原子参数表征无意调制的差异, 这一点可作为后期工作努力的方向。 参考文献 【9】 何松柏,宋亚梅,鲍景富,等.频率合成原理与设计【M]. 北京:电子工业出版社.2008. [10】Young Wan Kim,Jae Du Yu.Phase Noise Model of Sin— gle Loop Frequency Synthesizer【J1.IEEE Trans on Broadcasting,March 2008,54(1). 【1] 张国柱.雷达辐射源识别技术研究【D].长沙:国防科技 大学,2005. 【2] 陈媛媛.雷达辐射源个体识别研究【D].南京:南京理工 大学.2008. 【l1】Mallat S,Zhang Z.Matching pursuit with time—frequency dictionaries [J】.IEEE Trans.On Signal Processing, 1993,41(12):3397-3415. (上接第43页) 信模块采用动态链接库形式,可以在实现同一台 机器上的多个工程师站组态软件进程的同时与多 个控制器进行通讯。 将通信模块中套接字的建立、端口的绑定、 数据的接收和发送封装到动态链接库中,同时屏 蔽一些操作细节.这样的方法可以方便地被其它 4 结束语 在基于TCP/IP协议网络通讯的基础上,针对 状态监测中数据传输的间歇这一特殊性,提出了 一种基于事件驱动的网络通讯模块的设计方法, 并将这种方法封装到动态链接库中,然后通过函 程序所调用,更易于程序维护和移植,也方便将 来程序的升级。 根据窗口句柄发送消息至该窗15,然后通知 数接口与应用程序交互。由于该通讯模块是以动 态链接库形式给出的,编程者可以不需要深入了 解TCP/IP协议以及Socket高级编程.而只需简单 的调用通讯模块中的函数,即可实现局域网中数 据的传输。本文所介绍的通信模块的设计方法目 前已经实现.其可行性也得到了验证.并已应用 在实际的组态软件开发项目中。 参考文献 应用程序有数据到达。最后,还需要在函数前面 使用extem“C”一declspec(dllexport)关键字, 以使该PEI数能够被其它程序所调用。函数的参 数分别为端口号和应用程序的句柄。在应用程序 中,只需要调用该函数,就可以开启TCP/IP服 务。按照同样的方法,也可以封装连接服务函数 和发送数据函数。组态软件的在线等模块通过调 用这些导出函数,就可以完成与控制器的通讯, [1] 王亚民,陈青.组态软件设计与开发【M】.西安:西安电 子科技大学出版社.2003. 而不用考虑具体的通讯细节。具体的通讯细节可 在这些导出函数中实现。 【2] 汪献忠,等.基if-ModBus协议的工业智能通信模块的 设计【JJ,仪表技术与传感器,2006,(6):×× WWW.ecdacn 2010.5电子元嚣件丕硐47 


本文标签: 数据 模块 发送 组态 软件