离场悲剧

技术类博客

Labview利用Winpcap实现以太网底层通信(一)

0
阅读(6067)

    平时忙的时候在忙工作,不忙的时候就看一些书籍,学一些东西,真正沉下心思来写一些东西的时间现在已经越来越少了。得益于从去年年底开始了用Wiznote写一些笔记,把一些自己日常所学、所用的东西以笔记的形式记录下来,不仅仅可以针对一个大的知识点,一个模块,甚至可以将一个软件的快捷键的使用都记录在笔记中,把平时需要临时去百度的资料转移到笔记并进行整理,这既是知识的学习,也是知识的储备。就我个人而言,记性不太好,而我们人类也做不到像计算机一样数据的快速无误提取,数据存在存储器中几十年都不会丢失。所以,只有利用这样类似的笔记工具,存储工具,利用其强大的搜索性能,我们才能达到知识的快速提取以及应用,才能做到学有所得,如果学过的做过的东西过一段时间,过一年时间都忘得一干二净,那如果有需要再次重新做这个东西,那不是要做很多无用功吗?这其实是在浪费生命......

前面说太多题外话,总之,就是基于前段时间开始做笔记,开始用Wiz,开始用Markdown,所以才有了这篇或者说这一系列文章,让我在很忙的时候,都可以抽出一些时间来记录这样一个自己的学习过程。

1 概述

关于这篇技术文章的背景,因为最近要做一个项目中有需要使用到FPGA通过以太网通信,传输数据,具体的项目细节因为要保密的关系也就不方便在这里透露,总之,就是要通过以太网进行数据收发,而我以前做过一个项目的以太网数据收发是用Labview来做的上位机显示控制,所以这里我也打算继续用Labview来做了【究其根源,实际上是我C++也不会~~MFC看了几天书就扔了~~~~】,对于自己的Labview水平,和高手比较的话,就跟中国足球业余球员的替补和梅西、C罗比较一样,总之就是惨不忍睹了,但是编写一些简单的程序,还是可以的【在不追究界面美观的前提下】。

不扯了,进入正题。我们知道,一般来说,通过以太网进行FPGA和PC的通信,从协议上来讲,有两种:第一种是带有网络层、传输层等上层协议的通信,比如有常见的UDP TCP等。而第二种就是不带有这些上层协议,仅仅到数据链路层。两种方法各有好处,UDP TCP的好处是通用,例程多,几乎所有的平台都有现成的example,接口,visual c++可以socket,很多嵌入式处理器有lwip协议栈等等等等。但是对于FPGA来说,目前为止,就两家龙头厂商Altera【Intel PSG】以及Xilinx,就我所知,还没有HDL的UDP/IP或者TCP/IP协议栈,大多数的这方面的应用,都是自己用hdl开发的。而对于第二种,不带有上层协议,这种方式的好处是不包含上层协议代码的编写以及协议开销,对于FPGA,也不用另外写上层协议代码,直接使用自带的MAC IP Core即可。但是问题就在于PC端,PC端要对收发的以太网帧就会比收发UDP TCP要麻烦很多,就像Labview,udp tcp就有直接的组件可以使用,而要直接收发以太网帧,就需要使用到其他手段了,本文的重点也就是对这种方式进行说明。

2 工具介绍

    工具介绍嘛就直接百度了,大家可以跳过不看。

2.1 Labview

LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。 LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。

2.2 Winpcap

Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。

3 设计细节

3.1 设计简介及准备

本文描述的关键是要让Labview拥有访问网络底层的能力,那么就要借助winpcap了。在使用之前的第一件事情就是winpcap的安装,winpcap其实在很多软件包中都已经包含,比如Xilinx ISE

3.1.1 Winpcap安装

Winpcap安装包括驱动的安装以及开发包的下载,这些都可以到官网下载到:

 http://www.winpcap.org/install/default.htm

blob.png

下载的exe,安装后包含驱动和dll。除了驱动和dll外,还需要下载开发者包:

http://www.winpcap.org/devel.htm

里面包含开发example,手册以及要用到的lib等等。安装完exe之后,解压到WpdPack到任意路径,然后解压出来,有如下文件夹:

blob.png

docs中已经包含了手册了,也可以在以下地址获取在线的文档:

http://www.winpcap.org/docs/docs_412/html/main.html

winpcap还包含中文版手册 ^_^ :

http://www.ferrisxu.com/WinPcap/html/index.html

3.1.2 Labview准备

Labview我安装的2014版,下载地址如下

http://www.ddooo.com/softdown/60643.htm 

安装流程以及破解也就不介绍了,下载网站上都有。Labview使用winpcap的方法是利用winpcap编写一个dll来进行调用,而生成dll的方法一般就是使用VS等软件生成,所以Labview安装完成后还需要安装编译工具,我采用的VS2010

Labview网上也有很多现成的代码,以下网站就有一个:

http://bbs.elecfans.com/jishu_472511_1_1.html 

这个里面包括一个网络监控的功能,但是不包含数据发送,不过基于我的水平限制,所以还是先下载一个参考例程来直接修改着做吧。

blob.png

本例子的详细分析放在后面具体开始设计的时候再进行吧,这里先介绍到这里。

3.1.3 VS2010安装

同样,只贴一个下载地址吧 :

http://www.xiazaiba.com/html/4614.html 

最开始装了一个比较新的版本的VS,但是最后发现,还是2010的版本比较好使。通过3.1.2中的图片中可以看到,Labview例程中包含了以下两个特殊的文件:lvwpcap.cpp以及lvwpcap.dll。这两个文件一个是c++源代码,而第二个就是用这个源代码生成的dll文件,labview就是通过调用这个dll来进行数据监控的。而如果要添加它没有的数据发送功能,则需要用VS2010来对CPP进行二次开发了

3.1.4 Wireshark安装

做网络方面的设计,没有网络协议分析工具Wireshark怎么行,so,这个重要的工具必须安装,还是官网的地址比较靠谱,而且最新的好像升级到了wireshark 2,具体有何提升也不去研究了,总之能用就行啦

https://www.wireshark.org/download.html

安装好后,应用程序名为Wireshark Legacy,好像和以前不太一样了,不管了,总之运行后的状态如下:

                                               blob.png

3.2 设计细节

经过前面的那么多准备,需要的资源都已经有了,那么现在就是设计自己需要的一个程序了。我的需求很简单,通过Labview收发自定义的以太网帧数据。

额,先写到这里吧,后文继续讲设计细节的东西,本文不是教学,自己也到不了教学的水平,而仅仅是一个自己的学习笔记而已~~