ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
在不同的操作系统中,系统与系统之间的数据交换是最为重要的环节,在此,由W3C制定出来的XML正是针对不同系统之间的数据交换而设计,基于WinCE嵌入式系统,完全支持W3C的XML的最新规范,因此,XML作为WinCE嵌入式系统数据同步的媒介是比较理想的选择。本文主要介绍在.NET开发平台下,WinCE中基于XML的数据同步的方式和方法。
1.引言
在此,我们利用WinCE 3.0的Pocket PC 2002和Windows XP之间的数据同步来阐述本文,为了实现数据同步,我们在Pocket PC 2002中加载了SQL CE作为Pocket PC的数据库,在XP中加载了SQL Server 2000作为普通台式计算机的数据库,同时采用了Visual Studio .NET 2003作为研究的开发平台,Pocket PC与普通PC计算机之间的数据同步采用XML方式进行,XML数据文件传输方式采用存储卡、红外、无线网、GPRS等任意一种方式进行。
XML是为在 Web 上传送而进行优化了的 SGML 的子集。它是由万维网联合会 (W3C) 定义的。该标准化确保了结构化数据的统一性和相对于应用或供应商的独立性。XML 是一种提供数据描述格式的标记语言。该语言使跨越多个平台进行更准确的内容声明和获得更有意义的搜索结果变得更加容易。此外,XML实现了表示与数据的分离,通过应用不同的样式表和应用程序,使您能够根据需要显示和处理数据。XSD是XML 架构定义语言,可为 XML 文档定义结构和数据类型。XML 架构是由顶级 schema元素组成的。
2.设计要点
设计要点是通过XML方式进行不同系统之间多元数据类型、多元数据表的双向数据交换。PC与PDA之间的数据传输可以使用存储卡形式,也可以使用无线网形式,无线网包含无线局域网(802.11)、GPRS、CDMA、红外线(IRQ)等多种模式。在此,各种无线网或各种存储卡或许只能称为是一种媒介,它们存在的目的只是为了传输XML交换文件到不同的系统。数据交换的模型图如图1所示
2.1.XML交换文件设计
在此我们使用XML文件作为传输数据的交换文件,因此XML交换文件的设计是最为重要的一个步骤,通俗来说,一个XML交换文件包含两个部分,一个是XML架构,也就是XSD,另外一个是XML的数据部分。在.NET的智能设备(smart device)开发中必须使用.Net FrameWork的精简版,之所以称之为精简版,只是因为它是普通的.Net FrameWork的子集,因此它并不支持所有的普通模式下的功能,针对XML来说,它必须把XML的数据和XML的架构(XSD)分开,或许是微软为了考虑传输的文件大小的问题吧,因为在众多的应用中,架构一般不会改变,而且都是已知的架构,只传输XML数据总是比还要传输XML架构来的小。下面我们分步来讲解这两个部分。
2.1.1.XML架构(XSD)设计
在此我们所涉及到XSD,则主要是针对这个XML文件的架构制定遵循的版本和所涉及到的数据的类型。
在此,我们举例要描述数据表“T_Message”。
同时它包含两个字段:
MessageID int
MessageTitle varchar(128)
按照XSD的规范,我们就可以得到如下的架构。
<?xml version="1.0" standalone="yes"?>
<xs:schema id="NewDataSet" xmlns=""
xmlns:xs=http://www.w3.org/2001/XMLSchema
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:Locale="zh-CN">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="AT_ShippingProperty">
<xs:complexType>
<xs:sequence>
<xs:element name="MessageID"
type="xs:int" minOccurs="0" />
<xs:element name="MessageTitle"
type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
从以上可以看出,XSD描述了这个XSD的版本是1.0,属于w3c制定的架构等等信息,同时还描述了MessageID和MessageTitle两个字段,为了看得更明白,我们采用了加粗表示。
2.1.2.XML数据
在此我们所涉及到XML数据内容部分,则主要是针对这个XML文件所遵循的版本和数据的字段内容。
在此,我们举例要描述数据表“T_Message”。
同时它包含两个字段:
MessageID int
MessageTitle varchar(128)
假设这个数据表中存有两条记录,如下表所示:
MessageID
MessageTitle
1
数据库连接
2
数据库操作
按照XML的数据规范,我们就可以得到如下的XML数据。
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<AT_Public_Message>
<MessageID>1</MessageID>
<MessageTitle>数据库连接</MessageTitle>
</AT_Public_Message>
<AT_Public_Message>
<MessageID>2</MessageID>
<MessageTitle>数据库操作</MessageTitle>
</AT_Public_Message>
</NewDataSet>
2 .2.嵌入式系统
嵌入式系统一般指非PC系统,它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
当前主流的嵌入式系统的操作系统(OS)包括WinCE、Palm等等,其中以Palm的历史最为长久,但是以WinCE的普及推广速度最快,操作最为灵活,应用最为广泛,因此当前时期,大多数的用户选择WinCE作为当前嵌入式系统的操作系统。
2.2.1.WinCE操作系统
WinCE操作系统是嵌入式操作系统中的一种,为微软所研制开发,包含WinCE、WinCE.NET、Windows XP Embedded等一系列的Mobile Windows家族。正迅速地为人们所接受。
2.2.2.Compact .Net FrameWork
随着.NET开发平台2003版的推出,微软包容了嵌入式系统的开发,使得嵌入式系统的开发更为简便更为容易。
2.3.XML文件传输
由于XML是一个文本类型的文件,因此具备跨平台的能力,可以为UNIX、LINUX等非Windows平台所接受,由于是文本类型的文件,因此传输方式可以多种多样。比如使用存储器进行传输,存储器包括存储卡、磁盘、磁带等等存储载体;也可以通过网络下载复制的功能,比如通过有线或无线局域网,或者GPRS、Moden等等网络载体;还可以通过红外端口的发送接收文件的方式进行传输。
3.实现方法
由于是WinCE,因此可以使用Visual Studio .Net 2003版进行编程,利用Visual Studio .NET 2003版中带的Compact .Net FrameWork,使所编制的程序可以运行在WinCE的嵌入式系统中。
针对微软的.NET计划,相信不久的将来,Compact .Net FrameWork也可以运行到Palm等其它嵌入式系统中。
3.1.PC端XML数据导出
假设我们已经有了数据库连接SQLconn,strSQL是待执行的SQL语句,则我们的PC端服务程序导出可以写成如下方式。
//初始化SqlDataAdapter
System.Data.SqlClient.SqlDataAdapter myDataAdapter = new System.Data.SqlClient.SqlDataAdapter();
//初始化SelectCommand ,其中strSQL为待执行的SQL语句,SQLconn为数据连接
myDataAdapter.SelectCommand = new System.Data.SqlClient.SqlCommand(strSQL,SQLconn);
//使用myDataAdapter初始化SqlCommandBuilder
System.Data.SqlClient.SqlCommandBuilder myCB = new System.Data.SqlClient.SqlCommandBuilder (myDataAdapter);
//初始化一个DataSet
System.Data.DataSet DS = new System.Data.DataSet();
//执行strSQL中的SQL指令,查询结果填充到DS中
myDataAdapter.Fill (DS);
//从E:ExFromPC.XSD文件中导入XML架构
DS.WriteXmlSchema("E:\ExFromPC.XSD");
//按照XML架构导出XML数据到E:ExFromPC.XML中
DS.WriteXml("E:\ExFromPC.XML");
自此,XML文件已经导出完成,即可使用2.3所阐述的文件传输方式的任意一种传输到WinCE嵌入式系统中去。
3.2.WinCE端数据导入
//初始化DataSet
System.Data.DataSet DS = new System.Data.DataSet();
//初始化XML架构文件操作流
FileStream FsXSD = new FileStream("\ExFromPC.xsd",FileMode.Open);
//初始化XML架构读取设备
XmlTextReader xtrXSD = new XmlTextReader(FsXSD);
//载入XML架构到DS中
DS.ReadXmlSchema(xtrXSD);
//关闭XML架构读取设备
xtrXSD.Close();
//关闭XML架构文件操作流
FsXSD.Close();
//按照装载了的XML架构载入XML数据到DS
DS.ReadXml("\ExFromPC.XML");
在载入完XML数据之后,即可通过种种方法把数据写入到数据库中,或交由其它方式处理,在此不再陈述。
3.3.WinCE端数据导出
//初始化DataSet
System.Data.DataSet DS = new System.Data.DataSet();
//初始化SqlCeDataAdapter
System.Data.SqlServerCe.SqlCeDataAdapter myDataAdapter = new System.Data.SqlServerCe.SqlCeDataAdapter();
//初始化SelectCommand ,其中conn是数据连接,p_strSQL待执行的SQL语句
myDataAdapter.SelectCommand = new System.Data.SqlServerCe.SqlCeCommand(p_strSQL,conn);
//初始化SqlCeCommandBuilder
System.Data.SqlServerCe.SqlCeCommandBuilder myCB = new System.Data.SqlServerCe.SqlCeCommandBuilder(myDataAdapter);
//加载映射的数据表名p_strTableNameTemp为数据表名
myDataAdapter.TableMappings.Add("Table",p_strTableNameTemp);
//把SQL语句执行结果写入到DS中
myDataAdapter.Fill (DS);
//初始化XML架构文件操作流
FileStream FsXSD = new FileStream(\ExFromPC.xsd",FileMode.Open);
//初始化XML架构读取设备
XmlTextReader xtrXSD = new XmlTextReader(FsXSD);
//载入XML架构
DS.ReadXmlSchema(xtrXSD);
//关闭XML架构读取设备
xtrXSD.Close();
//关闭XML架构文件操作流
FsXSD.Close();
//导出XML数据文件
DS.WriteXml("\ExFromPC.xml");
自此,XML文件已经导出完成,即可使用2.3所阐述的文件传输方式的任意一种传输到PC中去。
3.4.PC端XML数据导入
//初始化架构文件操作流
FileStream FsXSD = new FileStream("E:\ExFromCE.XSD",FileMode.Open);
//初始化XML数据文件操作流
FileStream FsXML = new FileStream("E:\ExFromCE.XML",FileMode.Open);
//初始化DataSet
System.Data.DataSet DS = new System.Data.DataSet();
//初始化XML架构读取设备
XmlTextReader xtrXSD = new XmlTextReader(FsXSD);
//载入XML架构
DS.ReadXmlSchema(xtrXSD);
//关闭XML架构读取设备
xtrXSD.Close();
//关闭XML架构文件流
FsXSD.Close();
//初始化XML数据读取设备
XmlTextReader xtrXML = new XmlTextReader(FsXML);
//导入XML数据到DS中
DS.ReadXml(xtrXML);
//关闭XML数据设备
xtrXML.Close();
//关闭XML数据文件流
FsXML.Close();
在读取XML数据到DS之后,即可通过种种手段写入到数据库中,在此不再陈述。
用XML方式同步数据,可以达到一次同步多个数据表的功能,为离线方式同步数据库的首选,可以适用于多种场合,比如Windows和Linux之间同步数据,Windows和UNIX之间同步数据。
参考文献
[1] Andy Wigley著, 赵明译.移动设备.NET应用程序设计. 清华大学出版社
[2] 徐可, 熊伟著,Visual C#.NET深入编程. 北京希望电子出版社
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号