关 闭

新闻中心

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

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

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

3 通信模块的

3.1 思路

为了之间的异步通讯,通讯模块的总体设计如图4所示。

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

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

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

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

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

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

3.2 模块封装

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

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

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

4 结束语

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


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭