摘   要  本文结合控制系统对嵌入式Web服务器的要求,分析了嵌入式Web服务器的基本原理、动态内容实现方法,并结合实例着重介绍了基于SVG技术实现动态图形输出的方法。
关键字  嵌入式系统  SVG   Web   CGI程序

1 引言
    在传统的控制网络中引入嵌入式Internet(Embedded Internet)技术后,各种工业控制设备通过TCP/IP协议接入Intranet或Internet。因此,人们可以通过现有的网络设施,不受地域的限制,实现对控制网络中各个节点的设备进行实时监控[1]管理,监控对象包括温度、压力、流量、液位、转速等。这一技术目前已成为嵌入式系统应用的热点之一,具有广阔的应用前景,可应用在工业自动化、设备管理、智能建筑、智能公路、信息家电等领域。
    如果将Web技术引入嵌入式Internet控制系统,每个被控设备都将是一个小Web服务器。通过这些Web服务器实现数据采集、信息反馈以及接受客户端Web浏览器的命令对现场设备进行控制。由于嵌入式系统需要Web服务器与Web浏览器进行交互并提供动态数据访问功能,特殊的应用中还需要提供动态的图形页面,而一般的HTML页面只能提供静态数据,因此嵌入式Web服务器中如何实现与客户端的交互并提供动态图形页面是软件系统设计中要解决的问题。

2 动态Web服务实现原理
2.1 Web服务器工作原理
    Web服务器是基于HTTP协议(RFC 2068)工作的,使用标准同步请求/响应的设计方法,与传统的客户机/服务器结构相同。当客户端浏览器向Web服务器提出请求时,需要发送一个HTTP请求报文;Web服务器接收到该请求并作处理后,使用HTTP报文返回相应的数据,这些数据可以是文本或图形;浏览器将收到HTTP响应报文,将对数据进行处理并显示在用户界面上。
2.2 动态Web服务的实现技术
    由于嵌入式系统中需要与被控对象进行交互并获得实时信息,因此需要Web服务器提供与浏览器及其他应用程序进行交互的能力。
(1) CGI技术
    Web服务器与Web浏览器及其他应用程序之间的交互,是通过调用CGI(Common Gateway Interface)程序[2]来实现的。CGI规定了Web服务器与浏览器及其他可执行程序的接口协议标准。当Web浏览器将请求信息(以POST或GET方法)发送给Web服务器时,Web服务器调用一个可执行的CGI程序,该程序根据用户请求的内容做出相应的处理,并将处理结果以Web服务器可识别的方式输出,Web服务器再将该结果回送给Web浏览器。
(2) 动态内容支持技术
    为了简化CGI程序产生动态内容的处理过程,可以使用HTML中标记的概念,在开发时先构造一个HTML文件,在该文件中包含有准备解析的动态内容标记,如设计为<DATA  x>,x是要插入到输出数据流中的动态内容的字符串名。如:
 <p>
  当前压力是:<DATA  pressure>
 <p>
    在嵌入式Web服务器上添加一个接口,以便支持处理这个标记。该接口程序查找到关键字<DATA后,使用变量名(示例中为“pressure”)来检索实际内容,并替换该标记后输出。这种方法为动态Web服务的软件设计提供了很大的灵活性。
2.3 对动态图形内容的支持
    当客户端的浏览器需要获得图形化的监控数据时,如监控对象随时间的变化曲线。由于受嵌入式系统资源和网络带宽的限制,Web服务器往往不能直接提供输出JPEG、GIF等格式的图形数据。这时,选择文本形式的VML或SVG格式文件作为Web服务器输出,则同样可以为用户提供高质量的矢量图形。
(1) VML
    VML(Vector Markup Language,矢量标记语言)[3]是一个基于XML标准的一种应用,它最初由Microsoft开发,并于1998年由W3C(World Wide Web Consortium)正式公布,目前仅IE5.0以上版本能对其提供支持。
    VML可支持高质量的矢量图形显示。在其规范中包含了大量的支持多种不同矢量图形特征的预定义图形元素,如:Shape 、Path、Line、Polyline、Curve 、Rect、Roundrect、Oval、Arc、Group等,其中有两个最基本的元素:Shape和Group,这两个元素定义了VML的全部结构。Shape描述一个矢量图形元素,而Group用来将这些图形结合起来,这样它们就可以作为一个整体进行处理。
    由于VML使用简单的文本来表示图像,因此可用很少的字节来表示比较复杂的图像。此外,VML可以在图形中嵌入文本,并实现超级链接,还可通过脚本语言实现一定的动画功能。
(2) SVG
    SVG(Scalable Vector Graphics,可缩放矢量图形)[4]是一种基于XML标准,用来描述二维矢量图形和矢量/点阵混合图形的标记语言。它是一种综合了VML的优点而推出的基于文本的矢量图形规范,由W3C和多家厂商(Adobe Systems 、AOL 、AutoDesk等)于2001年正式发表,并得到众多厂商支持。
    SVG规范定义了SVG的特征、语法和显示效果,包括模块化的XML命名空间(namespace)和SVG文档对象模型(DOM),实现了图形、图像和文字的有机统一。SVG除了支持HTML中常用的标记外,还提供了大量针对图形、图像、动画的特定标记。在SVG中,允许矢量图像、点阵图像和文本三种图像对象存在。SVG定义了包括直线、圆形、椭圆形、矩形、多边形和折线在内的六种常用的基本矢量形状,在此基础上,利用坐标变换、路径、动画、滤镜等功能扩展,通过多层次组合矢量、点阵以及文本图,并配以各种属性,进行矢量绘图。用SVG创建的图形可以在不同平台和设备间进行缩放,而不会有质量损失。
    SVG的XML语法使开发人员能够使用现有技术并利用现有的基于XML的基础结构和开发工具。可与现有的Web技术(如HTML、GIF、JPEG、PNG、SMIL、ASP、JSP 和 JavaScript)集成,并可嵌入到现有基于浏览器的应用程序中,从而提供更加丰富的视觉效果。同时提供了丰富的消息触发及事件响应函数,实现与用户的交互。
    与VML相比,SVG文件更小,下载浏览更加便捷,并能利用客户端跨平台的处理能力显示图形。既充分利用了客户机的资源,又减轻了服务器端的负担,可以更有效地利用网络带宽,是嵌入式Web服务器采用的理想图形格式文件。

3 动态图形输出实例
    嵌入式Web服务器可以通过输出SVG格式图形文件,在浏览器上获取被控对象实时状态的变化曲线。借助于SVG中的line、path、polyline等矢量元素,并设置相关属性,进行矢量绘图。
3.1 SVG语法结构
(1)SVG文件结构
<?xml version=1.0 encoding=UTF-8?>
<!DOCTYPE svg PUBLIC -//W3C//DTD SVG 1.0//EN
http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd>
<svg  width=400  height=200  xmlns=http://www.w3.org/2000/svg
xmlns:xlink=http://www.w3.org/1999/xlink>
  <title>此标注相当于HTML中的title标注</title>
  <desc>
SVG文件内容描述,类似文件功能注解,这部分内容不会出现在以后显示的画面中。
  </desc>
这里是整个SVG文件的重心,向量图形、图像、文字、动画等内容都应包含置于此。
</svg>
在<svg>标注中,使用width和height属性设置图形的宽和高。
(2) SVG中常用的基本形状
    SVG 定义了六种基本形状,它们是圆(circle)、椭圆(ellipse)、矩形(rect)、线(line)、折线(polyline)和多边形(polygon),这些基本形状和路径(path)一道,可以组合成任意形状的图像。每个基本形状都带有指定其位置和大小的属性。它们的颜色和轮廓分别由fill、stroke、stroke-width属性确定。如以下标注显示一条从(0,150)到(400,150)宽度为2(像素)的蓝色直线:
    <line x1=0 y1=150 x2=400 y2=150
                         stroke-width=2 stroke=blue/>
(3) 输出文本
    除了形状以外,SVG图像还可以通过text标注输出文本信息。SVG提供给设计人员对文本的大量控制,可以获得很好的图形效果。如:
<text x=10 y=50 font-size=30>Welcome to the world of SVG!</text>
(4) 定义可重用部件
    通常在SVG图像的构建中,各部分是可重用的,如显示坐标系统的网络线。这时可在文档的定义部分来预定义它们(作为<defs></defs>标注的一部分),并给它们指定以后可在图像主体中调用的标识。在图像主体部分通过用<use />标注引用预定义项的元素将它们链接到文档。以下是绘出坐标系统并显示温度变化曲线的SVG文件定义及主体部分:
<defs>
     <marker id=arrow viewBox=0 0 10 10 refX=0 refY=5
        markerUnits=strokeWidth  markerWidth=3  markerHeight=10  orient=auto>
        <path d=M 0 0 L 10 5 L 0 10 z  fill=blue  stroke=black/>
     </marker>
     <line id=x_Coordinate  x1=30 y1=180 x2=640 y2=180
          stroke-width=2 marker-end=url(#arrow) stroke=blue />
     <line id=y_Coordinate  x1=30 y1=180 x2=30 y2=30
            stroke-width=2 marker-end=url(#arrow) stroke=blue/>
   </defs>
   <g   id=origin_Coordinate >
<use xlink:href=#x_Coordinate />
<use xlink:href=#y_Coordinate />
<text  x=650 y=180 font-size=15> 时间 </text>
<text  x=5 y=20 font-size=15> 温度 </text>
<polyline points=30,112  50,110  70,104  90,100  110,107  130,103
150,101  170,98  190,101  210,96  230,102  250,99
270,103  290,103
fill=none  stroke=red  troke-width=2 />
</g>
(5)在HTML中嵌入SVG图像
在HTML页面中添加SVG图像,可通过< embed >标注实现:
<embed src=temperature.svg name=svg width=700 height=200 TYPE=image/svg+xml>
3.2  应用实例
    在水质环境自动监控系统中,嵌入式Web服务器以CGI方式与客户端浏览器交互。通过浏览器设置监控参数,并从Web服务器上获取包含当前系统状态的SVG文件,运行结果见图1。SVG文件中描述监控对象状态的数据通过自定义的动态内容标注,由CGI程序写入。

4 结束语
 在嵌入式Web服务器中提供动态图形输出,可以简化客户端的设计。实践证明,本文提出的采用SVG技术实现动态Web服务的方案是非常有效的,同时,该项技术也被成功地应用到基于嵌入式Web的机房环境监控系统中,并取得了较为理想的应用效果。

用SVG技术实现动态图形输出的嵌入式Web服务相关推荐

  1. 使用WebService技术获取第三方数据实现繁体字转换 WEB 服务

    Web Service(WEB服务) 能够快捷和方便地综合并结合各种系统.商务和任何应用平台.新出现的 Web Services 标准: SOAP.WSDL 和 UDDI 能够使任何系统和系统之间的应 ...

  2. web服务:原理与技术01

    电子服务系统设计复习总结01 前言 本文档原意为考试复习所用,基于 <web服务:原理与技术> 课本. 第一章 1.什么是WS (Web Service) ​ ①当服务使用因特网作为通信手 ...

  3. p5.js 编程临摹动态图形(互动媒体技术作业)

    p5.js 编程临摹动态图形(互动媒体技术作业) 动态图形的规律分析 p5.js 代码历程 走过的弯路 拓展 总结 动态图形的规律分析 从老师的动态图形参考资料中,我选择了以下图形进行临摹: 初次见面 ...

  4. 互动媒体技术——基于p5.js实现动态图形临摹与拓展:炫彩光影的千变万化!

    博文索引目录: 1. 引言 2. 临摹结果对比 3. 临摹过程 3.1 准备工作 3.2 原图规律--语言描述 3.3 原图规律--数学与代码描述 3.4 完整代码 4. 创意拓展 4.1 拓展一-- ...

  5. android 动态生成直线,Android SVG技术入门:线条动画实现原理

    SVG技术入门:线条动画实现原理 这是一个有点神奇的技术:一副线条构成的画能自动画出自己,非常的酷.SVG 意为可缩放矢量图形(Scalable Vector Graphics),是使用 XML 来描 ...

  6. pr图形模板预设怎么使用_技术丨PR怎样安装动态图形模板?Pr mac版怎样调用Mogrt预设?Adobe Premiere导入MOGRTs预设完整教程...

    Mogrts是一动态图形模板是一种可在 After Effects 或 Premiere Pro 中创建的文件类型 (.mogrt).可以帮助用户轻松使用PR编辑简单特效动画.下面是小编为大家整理的p ...

  7. 基于Asp.net、SVG技术的WebGIS研究与实现

    摘  要 本文在分析了用SVG表示地理空间信息的特点后,将SVG应用到WebGIS中,系统研究的主要内容是使用Asp.net.SVG技术,结合SQL Server后台数据库技术动态的生成SVG图形:利 ...

  8. SVG技术入门:线条动画实现原理

    相信大家都见到过这样神奇的技术:一副线条构成的画能自动画出自己.非常的酷.Jake Archibald是这种SVG技术的首创者,并且写了一篇非常好的文章来描述它是如何实现的.Brian Suda也在2 ...

  9. 浅析DirectX11技术带给图形业界的改变

    浅析DirectX11技术带给图形业界的改变 前言:2009年10月23日,微软高调发布了其最新一代操作系统--Windows7,这款操作系统相对于之前的Vista系统有相当大的进步,特别核心执行效率 ...

最新文章

  1. 华为:HarmonyOS 即将开源!
  2. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)
  3. 读书笔记:人月神话的博客积极的心态读后感
  4. authenticate总是返回None
  5. 关于ICallbackEventHandler的疑问
  6. 小程序 background-image背景图片设置的注意点
  7. iOS:Universal Link
  8. 最新JCR期刊IF及分区情况(中科院SCI期刊分区表)
  9. 电子邮箱地址格式怎么写?企业电子邮箱格式教程
  10. 倾斜摄影技术构建 WebGIS 智慧展馆 | 图扑软件
  11. 智慧公厕系统让如厕成为一种享受
  12. python中列表常用方法
  13. 电子封装行业市场专项调查分析
  14. stm32中常见的通信协议之SPI
  15. 在软件开发中如何将看板方法与 Scrum 集合使用?
  16. (附源码)springboot学生宿舍管理系统 毕业设计453155
  17. EditPlus 设置关闭后不打开未关闭的文件,以及设置在同一个窗口打开多个文件
  18. 系统集成项目管理工程师和信息系统管理工程师考试指南
  19. C++软件开发工程师笔试题
  20. 微信小程序清除订阅消息授权数据

热门文章

  1. 正在试用的免费云服务器1
  2. 计算机组装和维修资料库,电脑组装与维修题库资料.doc
  3. 微信小程序:Do not set same key \5cef8733d2a18eed506c1165\ in wx:key.
  4. 分享两个靠谱的微信跳转浏览器打开网页/下载app的接口
  5. JavaScript基础(四)字符串操作
  6. 社交类app开发( 仿陌陌 客户端+服务器端)
  7. 互联网快讯:雷军宣布小米正式对标苹果;极米多款投影产品获用户肯定;矽行半导体签约落地苏州高新区
  8. javascript 闭包_了解JavaScript闭包:实用方法
  9. 支付宝基金转招商证券转场内基金条件
  10. laravel mysql 悲观锁_浅析乐观锁与悲观锁