APP下载

基于UDP协议检测嵌入式板卡的网络通信质量

2012-10-12何俊杰蒋知峰方江龙

制造业自动化 2012年4期
关键词:板卡网络通信控件

何俊杰,蒋知峰,方江龙

HE Jun-jie1, JIANG Zhi-feng2, FANG Jiang-long2

(1. 上海理工大学 机械工程学院,上海 200090;2. 上海开通数控有限公司,上海 200233)

0 引言

以太网在信息网络中得到了广泛的应用。将以太网应用到工控领域,首先要求数据传输具有更好的实时性,其次还强调在工业环境下数据传输的正确性和稳定性。目前在工控嵌入式领域,网络通信通常采用UDP或TCP协议。UDP与TCP相比,UDP使用非连接的、不可靠的通信方式,因此网络传输速度快,实时性相对较好[1]。实际上,在控制现场级的工业以太网中,只要没有硬件错误,非连接的数据通信通常能够顺利完成,并且与TCP 相比具备更好的实时性。当UDP不能通信时,TCP 同样面临通信中断[2]。本文采用UDP通信协议编程,通过对丢包率、出错率和长时间工作下板卡网络的稳定性来分析判断嵌入式网络通信质量的高低。

1 测试的原理方法

选用两块相同型号的嵌入式主板作为测试平台,两块主板采用相同的嵌入式操作系统,一块作为服务器,另一块作为客户端;客户端循环发送指定的报文到服务器,服务器接收到正确的报文后给客户端以确认报文。通过循环检测通信的质量判断网络通信质量。

实际测试的研华PCM-3343主板是应用在机床数控系统的核心板卡,软件环境是嵌入式的Windows CE操作系统并且移植了.NET环境。具体的测试方法是取同一型号相同软件环境的两块嵌入式板卡,一块作为客户端,一块作为服务器。网络负载通过发送数据包的大小来控制,负载越大通信周期越长。通过测试主机和客户端在一定的网络负载下,板卡长时间工作下的稳定性、丢包率和出错率的高低来检测评估被测板卡网络通信质量的高低。

2 具体实现

2.1 通信时间和采样时间的检测方法

在具体实际测试中,由于嵌入式Windows CE系统和.NET环境已经移植在被测板卡上,因此可以使用C#中ms级的timer控件来测量通信周期时间的长短,但在实际应用中却无法获得精确的时间。在实验测试中,发送1400字节大小的数据包时,时间通常记录为0或是1ms,不能获得精确的时间。查阅了相关资料,可以采用以下两个函数QueryPerformanceCounter() 和QueryPerformanceFrequency() 来获得高精度计时。QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时。但是QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以,必须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率。QueryPerformanceFrequency()提供了这个频率值,返回每秒嘀哒声的个数。这样就能获得详细的时间信息,用时间记录数值来反应嵌入式板卡的通信质量。实际测试中数值处理以ms为单位,取值保留精确到小数点后三位,能够满足测试的时间精度要求。

采样时间可通过Timer控件来实现。长时间工作下,ms级的精度完全可以满足采样时间间隔的要求。

应用在嵌入式环境中,测试通信时间的部分程序代码如下:

2.2 防止客户端和服务器都处于接收状态的解决方法

UDP通信协议采用三种通信方式:单播、广播和组播。因为本实验只有直连的两块板卡,因此采用单播——客户机/服务器模型。在数据交互通信的过程中,如果发送的数据包丢失或是损坏,导致服务器无法接收到数据包,此时客户机和服务器均处于等待接收数据包状态,为了防止出现双方均等待接收的状态,采用的超时的思想来处理。当客户机发出数据包后超过一定的时间没有收到返回的数据包时,客户机重新发送数据包,以此来防止出现双方都等待接收数据包的状态。在嵌入式的.NET环境中,所能用的API有限,超时的编程不能通过.NET环境的类库来实现,因此本实验通过使用调用动态链接库的思想来对底层的超时通信所用的函数做封装。底层超时编程具体实现是通过select()函数和一些宏定义如FD_ISSET、FD_SET等函数来实现。select()函数用于确定套接口的状态,超时则返回0;出错返回SOCKET_ERROR错误,可通过WSAGetLastError获取相应错误代码;依旧是1的位就是准备好的描述符,可以通过函数FD_ISSET来检测。动态链接库底层的函数的导出编程如下:

超时处理的关键部分实现程序如下:

用此方法可以达到防止出现服务器和客户机都处于接收等待状态的目的。在实际应用测试中,由于设置的超时时间远远比数据包传输周期要长的多,因此除了监控界面,从时间数据上也很容易区分当时网络的状态。

2.3 监控测试界面的实现和丢包、出错的处理

由于已经在嵌入式板卡上移植了Windows CE操作系统和.NET类库,因此监控测试界面可以利用C#来编写。IP地址是通过编程直接显示的,为了能够达到灵活测试的目的,界面除了使用Label控件来命名标签外,具体参数均使用TextBox控件来显示和修改。底层程序通过读取上层界面的参数来配置底层的参数。这样做的好处的是编写好程序后,底层程序不需要修改,只要修改界面参数就能完成不同参数环境的测试。

当在通信过程中出现丢包和数据包出错情形,除了在界面中“网络状态”对应的TextBox控件中实时显示外,均在文档中记录发生的时间、次数等信息。

每次通信周期的时间值都会实时的显示在界面右下角最大的TextBox控件中。当记录信息超过二十条时,清空控件重新记录。当到达采样时间时,记录文档的同时,并计算采样时间间隔内所有通信周期数值的平均时间值,同时显示在界面“周期时间显示”栏对应的TextBox控件中。

编写的监控测试界面在PC机上模拟运行测试中的截图如图1所示。

图1 监控测试界面

2.4 实验结果分析

在实际测试中对不同的参数环境下做了测试,以下是其中比较具有代表性的一组测试。采样时间间隔为1s,传送的数据包大小为6000字节,测试时间长达二十小时左右。这样,板卡的网络负载远远大于实际工作时实时传输数据包的大小,测试的通信周期次数为八百多万次,得到八万多个采样时间点,能够从所得数据来分析评估板卡的通信质量和通信稳定性。通过每两分钟(约120个采样数据点)取平均数,每小时采取30个平均时间点,做出的二十张曲线图,以下摘取的是第一小时和最后一小时的两张图。

第1小时数据记录分析图如图2所示。

图2 第1小时数据分析图

第20小时左右的数据记录分析图,如图3所示。

图3 第20小时左右数据分析图

通过分析长时间工作下采样时间值的波动、出错率和丢包率来判断网络通信质量的高低。本次实验在八百多万次的测试中,丢包9次,出错2次,正确的稳定传送率在99.999%以上,通过图表分析通信周期时间为12.973ms左右,时间波动在0.148ms左右,通信稳定性较好,通过测试得到的数值分析判断此板卡的通信质量较高。

3 结束语

本文尝试使用UDP网络通信协议,通过软件编程的方法来检测在一定的网络负载下,工控嵌入式板卡网络通信长时间工作下,通信质量的高低。经过对研华PCM-3343板卡的实验验证分析,此方法能够达到测试嵌入式板卡通信质量的目的。

[1]萧文龙, 林松儒. TCP/IP最佳入门[M]. 北京: 机械工业出版社, 2006.

[2]吉顺平, 陆宇平. 基于UDP/IP 的工业以太网络通信协议的设计[J]. 信息与控制, 2008, 37(5): 562-563.

[3]黄静, 李铭. C#高级编程(第6版)[M]. 北京: 清华大学出版社, 2008.

[4]陈健, 宋健建. Linux程序设计(第4版)[M]. 北京: 人民邮电出版社, 2010.

[5]吕秀锋, 黄倩. C语言程序设计现代方法(第2版)[M]. 北京: 人民邮电出版社, 2010.

猜你喜欢

板卡网络通信控件
MACH2系统板卡程序下装平台的研制
基于.net的用户定义验证控件的应用分析
车载控制器CVRE板卡显红故障分析及处理
基于网络通信的智能照明系统设计
关于.net控件数组的探讨
网络通信中信息隐藏技术的应用
基于网络通信的校园智能音箱设计
谈计算机网络通信常见问题及技术发展
基于组态王软件和泓格PIO-D64 板卡的流水灯控制
一种基于光纤数据传输的多板卡软件程序烧写技术