您当前的位置:五五电子网电子知识单片机-工控设备综合-其它基于Rabbit 2000的以太网通信技术及其实现 正文
基于Rabbit 2000的以太网通信技术及其实现

基于Rabbit 2000的以太网通信技术及其实现

点击数:7472 次   录入时间:03-04 12:02:40   整理:http://www.55dianzi.com   综合-其它

1 引 言

  嵌入式技术已经广泛应用于多学科、多领域,涉及到多种传统及现代技术。利用8位微控制器通过ISP接入互联网的嵌入式系统正逐步取代以PC为中心的应用,将成为未来工业生产控制的主流。此应用系统将会广泛应用于智能化工业控制中的远程访问和监控系统、LED网络控制显示屏系统、智能家居系统等各个方面,拥有极为广阔的前景。

  由Z-World 公司推出的Rabbit 2000是一种低成本的嵌入式微控制器,它采用Dynamic C的集成开发环境,实现快速开发。利用其内嵌的TCP/IP协议栈,实现了网络通信的系统设计。

  该系统以嵌入式 Webserver技术为基础,结合Rabbit 2000的网络通信功能,利用现有的以太网技术(如HTTP、CGI等),将采集到的现场数据通过网页的形式,提供给远程用户使用。

  该系统的设计难点之一在于如何利用Rabbit MPU有限的资源信息,使用其内嵌的TCP/IP协议栈,进行HTTP、TCP、UDP、IP等协议的处理,使之可以变成可在互联网上传输的IP数据包以及可在内置Web页上浏览的数据。难点之二在于实现通过网页进行远程访问的能力,解决这个问题要通过对Rabbit MPU进行TCP/IP编程,将其配置成一个简单的Web服务器,就可以以网页服务的形式将现场数据传递给远程用户。

  该设计是用上位工控机与Rabbit 2000通过集线器相连接,并经由网关连接到以太网上。如下图所示。
  浏览器与Web服务器的交互是通过CGI程序来完成的。CGI(Common Gateway Interface)是一段运行在Web服务器上的程序,可以是可执行文件,也可以是脚本文件。CGI程序可以动态地产生HTML网页,因此可将实时采集到的数据通过网页发回给客户机。CGI通常是客户机与服务器中其它程序进行信息传递与沟通的桥梁。

  实时监控用到了Java Applet 的概念。在服务器程序中生成内嵌Java Applet 的动态网页,由这些Java Applet 负责读取采集到的现场节点的数据文件。这样,在监控的客户机端,包括Java 虚拟机(JVM) 的浏览器将自动解释服务器网页嵌入的Java 程序,远程读取现场节点的实时数据并加以显示。

2 系统原理及功能

  Rabbit 2000 MPU是Rabbit半导体公司推出的高性能8位微处理器;带RJ-45插口的内置10Base-T端口简化了网络连接,便于开发带以太网接口的监控、通信设备;配备有4个串行口,方便扩展连接;拥有26根并行的I/O引线以及16根可设置的I/O引线,无须扩展即可完成一般的I/O任务;拥有512K Flash,128K SRAM,用于代码和数据存储;采用双列直插式引脚,尺寸仅为59mm×41mm×22 mm。这种结构促进了嵌入式系统的快速开发,并可实现集成的以太网连接。

  而Dynamic C是专门为Z-World 产品创建的软件平台,它使得在功能强大的嵌入式系统上进行实时编程易于实现。这一平台拥有多种优点,包括多任务和优先多任务的强大的语言扩展能力;带单步编译、链接和目标下装的快速编译;对浮点运算和先验函数的快速支持;RS-232和RS-485串行通信以及模拟和数字I/O驱动;全功能的源代码,完全支持汇编语言,汇编代码可以方便的与C代码混用。

  客户机/服务器的程序设计模式在网络程序中被大量的应用,本系统也采用这种设计方法。这种设计模式将整个系统分为两大部分——服务器部分和客户机部分。客户机向服务器提出请求,服务器对请求做相应的处理,将结果返回给客户机。

  根据不同的实际情况,客户机/服务器的通信存在对称和非对称的两种方式。在对称的方式下,通信的每一方都可能扮演主从角色;在非对称的方式下,一方不可改变的认为是主机,而另一方则是从机。无论是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。基于UDP协议的通信既可采用对称方式也可采用非对称方式。

3 网络协议栈的实现

  通常TCP/IP协议是一个四层协议系统,包括数据链路层、网络层(含IP协议)、传输层(含TCP协议)和应用层,每一层负责不同的功能。基于TCP/IP协议可以实现多种功能应用,如:HTTP(超文本传输控制协议)、TELNET(远程登录)、FTP(文件传输协议)、UDP(用户数据报协议)等。本系统主要涉及HTTP,UDP,也就是WebServer在应用层的主要构成协议。

3.1 TCP/IP协议栈的实现

  IP包含编址方案,并提供寻址功能;TCP则是在不同主机的对等进程之间提供可靠的进程通信。在TCP两端口所连接的实体中,一端为应用程序进程或者用户,另一端则为底层协议,如IP协议。TCP在建立连接的过程中采用三向握手机制,以保证数据的可靠性。

  以下是用Dynamic C实现TCP/IP协议通信的程序主体框架。程序中起始宏定义为默认IP配置信息;“memmap”语句可以使程序在芯片中运行时,如同在扩展代码窗口下被编译;“use”语句使编译器按照库文件配置编译代码。

  # define TCPCONFIG 1
  # memmap xmem
  # use dcrtcplib
  main() {
   sock_ init();
   for( ) {
   tcp_ tick(NULL) }
   }

  sock_ init()和tcp_ tick() 都是TCP/IP函数库的基本函数,前者为初始化TCP/IP协议栈函数,使协议栈开始处理入栈数据报;后者主要有两个用途:1支持后台处理的最新信息;2测试TCP套接字的状态。

3.2 HTTP的实现

  HTTP服务器可使HTML(超文本链接标示语言)页面,如Web页和其它文件为客户端所使用。在Dynamic C中,HTTP由httplib来负责实现。HTTP服务器实现的主体框架如下:

  # define TCPCONFIG 1
  # memmap xmem
  # use “dcrtcplib”
  # use “httplib”
  main() {
   sock_ init();
   http_ init();
   tcp_ reserveport(80);
   while (1) {
   http_ handler(); }
  }

  在以上基础上,用户可以根据自己的需要在程序框架上添加构成WebServer 的所有其它动态或静态元素(无论是否符合HTML标准)。

3.3 UDP协议的实现

  UDP协议是传输层协议之一,使用IP作为网络层协议,为应用程序发送和接收数据报。但它提供无链接服务,是不可靠传输。因此UDP报文主要用于需要实时数据传输的情况,一次传输少量数据。在某些对实时性要求较高的场合,利用UDP报文进行传输是必要的,但需采用一些可靠性方案,防止漏传、误传现象的发生。

  数据报套接字(socket)是通信的基础,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包括网络通信必须的五种信息:链接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

  UDP协议支持数据报套接字。这种套接字可以采用客户/服务器模式,以全双工方式工作,接收、发送可同时进行,但并不保证数据传输的可靠性、有序性和无重复性。

  使用Dynamic C实现UDP报文的传输,通信程序的基本框架为:
  # define TCPCONFIG 1
  # memmap xmem
  # use dcrtcplib
  main() {
   sock_init();
   udp_open();
   udp_recv();
   udp_send();
   tcp_tick();
   sock_close()
  }

  在以上UDP协议下的基本通信流程中,udp_ open为打开数据报套接字函数, udp_ recv函数的作用是接收远地主机发送的数据报,udp_ send函数可发送数据报给远地主机,最后是关闭套接字sock_ close 。

4 CGI子程序

  客户机上的主页和服务器之间的通讯主要是由CGI程序实现。在客户端主页上填好的Form(表格)中的数据(例如用户账号和密码信息),或Applet程序需要传输的数据,或是其它类型的请求,都可以提交给CGI程序处理。

  CGI接口是由HTTP服务器提供的。用户浏览器可以访问HTTP服务器,申请调用某个CGI程序,接收用户的输入,进行计算或其它处理,然后把结果返回给用户浏览器。

  在HTTP服务器程序中编写用户的自定义函数,用来处理从用户端浏览器发送过来的CGI请求。在Dynamic C 中通过结构HTTPSPEC_ FUNCTION将用户自定义函数和每一个CGI请求联系起来,这样,当一个CGI请求被触发并且送到HTTP服务器上时,服务器程序就将寻找相应的函数进行计算或处理,并返回结果。

  本系统中基本上所有的网页都可通过用户自定义函数调用Dynamic C中的cgi_ sendstring函数来动态生成的。一个可行的整体思路是,先用Microsoft Frontpage静态生成用户信息认证界面,用#ximport将该HTML文件下装到Rabbit 2000的内存中,并且设置为系统的首页。当HTTP服务器运行时,远程用户连接到该服务器上,认证页面就将作为首页下载到客户端浏览器。如果用户输入的认证信息是错误的,系统将动态生成“账号或密码错误”的页面,并返回认证页面;反之,如果是合法用户,系统将动态生成一个包含所有超级链接的页面(这个功能可由一个负责表格提交的CGI程序来实现)。

5 Java Applet的概念及编程

  JavaApplet是一种嵌入在WWW页面上的小程序,可以作为网页的组成部分被下载,并能运行在实现Java虚拟机(JVM)的Web浏览器中。与Java应用程序不同,Java Applet没有主程序,在安全机制方面也有诸多限制。

  通常情况下,设计小程序是为了给主页增加交互性,使页面更加生动活泼。典型的Java Applet程序有如动画、实时更新Internet服务器信息回取等功能。

  在Java中每个Applet都是由Applet的子类来实现的。开发人员自定义的Applet通过重载Applet的几个主要成员函数完成小应用程序的初始化、绘制和运行。这些函数是init()、paint()、start()和destroy()等。

[1] [2]  下一页


本文关键字:以太网  通信技术  综合-其它单片机-工控设备 - 综合-其它