关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于SOCK盯编程实现的组态软件与控制器的网络通讯

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

作者:时间:2010-09-01来源:网络收藏

本系统中,工程师站一般可作为客户端向发送连接请求,以建立连接。由于采集数据是周期性的,采用异步选择机制判断是否有数据发送过来。Windows Sockets的异步选择函数提供了消息机制的网络事件选择功能,当它所登记的网络事件发生时,应用程序相应的窗口会收到一个消息,消息中指明了所发生的网络事件以及与该网络事件相关的一些信息。

连接建立之后,即可调用Winsock提供的函数来发送和接收数据,进程结束时,则关闭两个套接字。

2.2 数据交互

通讯模块主要与框架、在线两个模块以及控制器存在数据交互。图3所示是其通讯模块与的其它模块及控制器之间进行数据交互的流程图。其中,通讯模块发送给框架窗口的消息主要有三项功能:一是通知在线模块读取控制器返回的应答数据;二是在通讯中出现异常时,返回错误信息;三是在通讯出现超时时,返回超时信息。

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协议本身的防阻塞控制结合使用,可以有效地防止阻塞的发生。



评论


相关推荐

技术专区

关闭