• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术文章 > 基于SOCK盯编程实现的 态软件与控制器的网络通讯

基于SOCK盯编程实现的 态软件与控制器的网络通讯

录入:edatop.com     点击:

2.3  数据传输协议

TCP/IP协议族的核心部分是传输层和网络层。传输层主要为应用程序提供端到端的通信,TCP/IP协议族有两个互不相同的传输协议,即TCP(传输控制协议)和UDP(用户数据报协议)。

TCP是一种面向连接的协议,它可给用户进程提供可靠的全双工的数据通信,其所做的工作是把应用程序交给它的数据分成合适的小块交给下面的网络层,同时确认接收到的分组,并提供流量控制、设定超时及重传等机制。由于TCP提供有高可靠性的端到端的通信,因此,应用程序可以忽略所有这些细节。

Winsock的Nagle算法会降低小数据包的发送速度,因此应当定义一种数据结构,以将发送的数据按照这种数据结构以字符型ASCII发送,客户端接收到服务器传来的数据,按照这种数据结构解析数据,这样做可以减少小数据包的数目,避免协议使用Nagle算法。此外通过消息响应代替轮询也是提高传输实时性的一种措施。

2.4  阻塞的预防及处理

TCP/IP协议本身的滑动窗口控制可以有效的防止阻塞的发生。假设服务器和客户端的收发缓冲区大小为100 K字节,服务器每发送一个大小为80 K字的数据包,客户端接收到这个数据包后,将返回一个应答,应答中包含有下次服务器能够发送的最大的字节数,即下次服务器只能发送大小不能超过20 K字的数据。按照这种控制方法,TCP/IP可根据滑动窗口的大小控制发送的速度,滑动窗口大,则发送的数据量大,滑动窗口过小,则发送的数据量也会减小,这样即可以防止阻塞的发生。

该通讯模块中使用的防阻塞方法是在同步方式中采用select函数来检查接收发送缓冲区的读写可用状态。服务器端发送数据前,应先检查服务器的发送缓冲区是否可写,如不可写,说明发送缓冲区己经写满,需要等待发送缓冲区有剩余空间时再发送,以避免阻塞。同样,客户端在读缓冲区数据前,也应先检查一下缓冲区是否可读。如果发送缓冲区一直不可写,那么可能是因为网络断开,或者网络负载过大,使数据不能发送出去。

设置一个超时时限,可以阻塞发生时,当发送缓冲区不可写的状态超过设置的超时时间,系统则重新建立一个连接。

将这种方法和TCP/IP协议本身的防阻塞控制结合使用,可以有效地防止阻塞的发生。

3  通信模块的实现

3.1  实现思路

为了实现与控制器之间的异步通讯,通讯模块的总体设计如图4所示。

\

首先,由主线程调用外部接口函数以建立连接,同时,创建发送和接收线程,以分别用于数据的发送和接收。

当要发送数据时,主线程调用外部接口函数来发送数据。该函数先将待发送的数据填充到通讯模块的发送缓冲区中,然后通知发送线程,并由发送线程负责将发送缓冲区中的数据发送出去。

当数据发送成功后,可由发送线程发送消息,通知接收线程准备接收数据。

当有应答数据到来时,接收线程将接收数据并将数据放入通讯模块的接收缓冲区。接收完后,接收线程将发送消息以通知主线程读取应答数据。

主线程接到通知后,将调用外部接口函数接收数据。该函数可将通讯模块的接收缓冲区中的应答数据复制到应用程序指定的缓冲区中。

数据的发送和接收交替进行,就可以完成特定的操作。

3.2  模块封装

通过动态链接库技术可以提供一种方便、快捷的资源共享途径。这实质上是一些函数、数据和类集合成的可执行模块。通信模块采用动态链接库形式,可以在实现同一台机器上的多个工程师站组态软件进程的同时与多个控制器进行通讯。

将通信模块中套接字的建立、端口的绑定、数据的接收和发送封装到动态链接库中,同时屏蔽一些操作细节,这样的方法可以方便地被其它程序所调用,更易于程序维护和移值,也方便将来程序的升级。

根据窗口句柄发送消息至该窗口,然后通知应用程序有数据到达。最后,还需要在函数前面使用extern"C"_declspec(dllexport)关键字,以使该PEI数能够被其它程序所调用。函数的参数分别为端口号和应用程序的句柄。在应用程序中,只需要调用该函数,就可以开启TCP/IP服务。按照同样的方法,也可以封装连接服务函数和发送数据函数。组态软件的在线等模块通过调用这些导出函数,就可以完成与控制器的通讯,而不用考虑具体的通讯细节。具体的通讯细节可在这些导出函数中实现。

4  结束语

在基于TCP/IP协议网络通讯的基础上,针对状态监测中数据传输的间歇这一特殊性,提出了一种基于事件驱动的网络通讯模块的设计方法,并将这种方法封装到动态链接库中,然后通过函数接口与应用程序交互。由于该通讯模块是以动态链接库形式给出的,编程者可以不需要深入了解TCP/IP协议以及Socket高级编程,而中需简单地调用通讯模块中的函数,即可实现局域网中数据的传输。本文所介绍的通信模块的设计方法目前已经实现,其可行性也得到了验证,并已应用在实际的组态软件开发项目中。

来源:电子元器件应用

上一篇:IPv6与流媒体传输在互联网的应用
下一篇:基于串口通讯的维护网络设计与开发

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图