变电站巡检系统WinCE开发技术

变电站巡检系统WinCE开发技术说明

概述

本技术文档主要是说明了在变电站巡管理检系统项目中用到的WinCE技术,包括WinCE的平台简介,开发的环境,数据库存储,数据同步,扫描头控制技术,WinCEPC端的SOCKET通信,.NET下智能设备程序的窗体控制等技术。

WinCE 平台简介

Windows CE是微软为嵌入式设备打造的操作系统,而嵌入式设备可谓多种多样,这就要求CE操作系统必须是可定制的,所以微软将Windows CE设计为模块化的操作系统。说简单点,我们可以把Windows CE想像成一盒积木,你可以用积木搭建出任何物体,但不一定要把所有的积木都用上。

  Windows CE搭建出来的物体就是平台,是适应某种有固定标准的嵌入式设备的操作系统子集,最著名的平台就是Pocket PC了,是提供给没有键盘的掌上电脑使用的平台。由于平台和硬件的一致性,所以有时候也用平台的名称来称呼整个系统——硬件与操作系统的总和。

  我们也可以自己开发平台,开发工具是微软提供的Platform BuilderPlatform Builder的版本号是和Windows CE的版本号一致的。

  更多程序员关心的是应用程序的开发,而应用程序开发是针对特定平台的,我们在开发之前必须安装目标平台的SDK,才能够开发出适应目标平台的开发工具。

  Windows CE开发环境综述

  初学者另外一个比较糊涂的概念是版本的问题,现在市面上能够见到Windows CE的两代产品,它们的内核分别基于Windows CE 3.0Windows CE.NET(即4.0

  微软刚面世的Pocket PC 2003Smart Phone 2003统称为Windows Mobile 2003,我们大多数时候还是习惯地沿用老称谓。

  而市面上经常见到的Pocket PC 2002是基于Windows CE 3.0的平台,而Pocket PC 2003则是基于Windows CE.NET的平台,需要注意的是,Pocket PC 2003的内核是Windows CE.NET 4.2。而SmartPhone2003也是基于Windows CE.NET的。SmartPhone的最初版本是2002,基于Windows CE 3.0的,但是微软没有推出SmartPhone2002的中文版。

  清晰了平台与CE之间的关系,解释平台与开发工具之间的关系就很容易了。微软提供给应用程序开发者的工具包括:Embedded Visual Tools 3.0,其中包括Embedded Visual C++ 3.0Embedded Visual Basic 3.0Embedded Visual C++ 4.0Visual Studio.NET

  开发工具的版本号是与Windows CE的版本号对应的。EVC3.0EVB3.0是用来开发基于Windows CE 3.0平台的应用程序的,比较常见的平台有:Pocket PC 2002Pocket PC 2000Palm-size PCHPC。而EVC4.0是用来开发Windows CE.NET平台的程序的,主要包括Pocket PC 2003SmartPhone 2003

Visual Studio.NET针对嵌入式设备开发需要SDE的支持,而VS.NET 2003中包括了SDE,不需要另外安装。Visual Studio.NET开发的程序需要目标平台支持.NET Compact Framework。现在支持.NET Compact Framework的平台有Pocket PC 2002Pocket PC 2003。这里需要注意的是SmartPhone 2003是不支持.NET Compact Framework的。

我们这个变电站巡检系统选择的开发工具是:Visual Studio.NET

手持机(PDA)是:

图片

型号

操作平台

相关参数

网上地址

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1027" style="WIDTH: 81.75pt; HEIGHT: 126pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5Cuser%5CLOCALS~1%5CTemp%5Cmsohtml1%5C03%5Cclip_image001.png"></imagedata></shape>

Symbol

Mc50

Win CE.NET 4.2(

Microsoft® Windows® Mobile 2003 第二版)

CPUIntel® Xscale™ 520MHz

内存:64MB RAM/ 64MB ROM

扫描器:推入式锁定磁条阅读器

http://ewaytech.com.cn/cpyjs2.asp?setid=93

开发环境的安装

1. SERVER(服务器)端

1.1 S.NET 2003的安装(在SERVER端的开发文档里有描述)

1.2 SQL SERVER 2000数据库的安装(在SERVER端的开发文档里有描述)

1.3 SQL SERVER CE版的安装(服务器端)

可以去微软的官方网站下载sql server ce安装EXE,还要下载SQL SERVER CE SP3

下载下来后就可以安装了,双击SQL SERVER CE的安装文件就会跳出下面界面

14 PDA开发包的安装

PDA厂商的公开网站下载合适自己的API开发包,我们这个项目用的是SYMBOLPDA所以我们去SYMBOL的官方网站下载了对应的开发包,直接点安装就可以了,按提示一路NEXT下去就可以了。

<shape id="_x0000_i1028" style="WIDTH: 365.25pt; HEIGHT: 228pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5Cuser%5CLOCALS~1%5CTemp%5Cmsohtml1%5C03%5Cclip_image003.png"><font size="3"></font></imagedata></shape>

注意的是,如果钩选下面的SERVER TOOLS选项,必须先安装 SQL SERVER CESP3,才能安装成功!不钩选SERVER TOOLS选项安装完后再安装哪个SP3是一样的。

在安装完SP3后它回自动提示你配置IIS代理,你按它的提示配置就OK了。

2. PDA

1.4 SQL SERVER CE

直接考sql server ce安装EXE文件到PDA运行就可以了,PDA端不需要安装哪个SP3

也可以不做任何安装,因为在部署智能设备应用程序到PDA的时候,自动会把SQL SERVER CE数据库也部署到PDA上。

WinCE .net开发的主要技术说明

1. WinCE存储技术

1.1 数据库存储

如何在 PDA上存储数据。从应用程序的角度来看,数据可以保存在关系数据库(例如 Microsoft SQL Server CE)、本地文件(例如通常通过 DataSets 管理的 XML 文件)以及在应用程序终止时配置的基于会话的内存内数据结构中等,如果要存储在 PDA上的数据量少(少于 50 100 kb),则数据可以存储在本地的 XML 文件中。如果数据量较大,则 SQL Server CE 将提供较高的性能及可靠性。原因是,将使用 SQL Server CE 查询引擎访问数据,该查询引擎支持具有更高性能和可管理性的结构查询语言 (SQL),所以我们在变电站巡检管理系统项目里面用SQL SERVER CE版数据库来存储数据,在PDA端安装好SQL SERVER CE数据库后,就可以对PDA端的的数据库进行QUERYCREATDROPINSERTUPDATEDELETE等操作,下面举一下具体操作的简单例子(对本地数据库(PDA端的数据库操作))。

执行QUERY的操作和执行其它SQL语句有点不同,自己可对比下

1.11 执行QUERY查询语句

using System;

using System.Data;

using System.Data.SqlServerCe;

private stirng ConnectiongString =Data Source=\My Documents\PDA_SQLCE.sdf;//库文件的位置

public DataSet Query(string sql,string ConnectionString)

{

System.Data.SqlServerCe.SqlCeConnection conn=null;//声明一个连接

System.Data.SqlServerCe.SqlCeDataAdapter da=new SqlCeDataAdapter();//新建一个数据适配器

System.Data.DataSet ds=new System.Data.DataSet();//新建一个数据集并给它分配内存地址

try

{

conn=new SqlCeConnection(ConnectionString);//实例化一个连接

conn.Open();//打开连接

da.SelectCommand = new SqlCeCommand(sql, conn);//传入查询语句和连接参数实并实例化

da.Fill(ds);//执行SQL语句并把结果集FILLDS

return ds;

}

catch(System.Data.SqlServerCe.SqlCeException ec)//捕获异常

{

this.ShowErrors("执行查询失败:"+sql,ec);

throw ec;

}

finally

{

da.Dispose();//关闭数据适配器

conn.Dispose(); //关闭连接

}

}

1.12 执行其它SQL语句

public void Execute(string sql,string ConnectionString)

{

System.Data.SqlServerCe.SqlCeConnection conn=null; //声明一个连接

System.Data.SqlServerCe.SqlCeDataAdapter da = new SqlCeDataAdapter();//声明一个数据适配器并给它分配内存空间

try

{

conn=new SqlCeConnection(ConnectionString); //实例化一个连接

conn.Open();//打开连接

da.SelectCommand = new SqlCeCommand(sql, conn); //传入查询语句和连接参数实并实例化

da.SelectCommand.ExecuteNonQuery();//执行SQL语句返回影响的行数

}

catch(SqlCeException ecc) //捕获异常

{

this.ShowErrors("执行SQL失败:"+sql,ecc);

throw ecc;

}

finally

{

conn.Dispose();

da.Dispose();

}

}

1.2 数据库同步技术(上传下载)

SQL SERVER CE版数据库是专门为PDA设计的一种数据库,它能很好的和SQL SERVER 2000进行数据同步(通过IIS作为一个中间代理来进行远程数据同步),PDA端的SQL SERVER CEPC上的SQL SERVER 2000的数据同步有两种同步方式,复制和远程数据库同步(RDA),因为我们整个项目只用到RDA的数据同步方式,所以下面只例举了SQL SERVERSQL SERVER CE间的RDA数据同步方式。

1. 21 数据下载(把表结构和数据全部同步到PDA端)

public void MyPull()

{

private string Tb_N=t_test;//要同步的表名(服务器上的表)

private string InternetUrl=http://10.194.14.68/lico_pda/sscesa20.dll;//IIS代理的地址

private string LocalConnectionString= Data Source=\My Documents\PDA_SQLCE.sdf;//把表和数据同步下去后存放的数据库文件

private string rdaOleDbConnectString= Provider=sqloledb; Data Source=10.194.14.68;Initial Catalog=BDZXJ_SXB;User Id=sa;Password =<chmetcnv w:st="on" unitname="”" sourcevalue="10203" hasspace="False" negative="False" numbertype="1" tcsc="0">010203<span style="FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 新宋体">”</span></chmetcnv>;//连接到服务器的字符串

SqlCeRemoteDataAccess rda = null;//声明一个远程数据访问变量

try

{

rda = new SqlCeRemoteDataAccess();//实例化并分配内存空间

rda.InternetUrl = InternetUrl;//RDA的属性付值

rda.LocalConnectionString = LocalConnectionString; //RDA的属性付值

rda.Pull( //调用RDAPULL方法

Tb_N,

sql,

rdaOleDbConnectString,

RdaTrackOption.TrackingOn

);

}

catch(SqlCeException es) //捕获异常

{

ShowErrors("同步"+Tb_N+"失败!",es);

rda.Dispose();

throw es;

}

finally

{

rda.Dispose();

}

}

PULL方法的最后一个参数是表明是否跟踪下载表的数据的变化(只有跟踪的表才能同步回服务器),可以在帮助里面查看更详细的说明。

1. 22 数据上传(把PDA端的数据变化同步到服务器(要刚才下载的表的数据才能同步到服务器))

public void MyPush()

{

private string Tb_N=t_test;//要同步的表名(服务器上的表)

private string InternetUrl=http://10.194.14.68/lico_pda/sscesa20.dll;//IIS代理的地址

private string LocalConnectionString= Data Source=\My Documents\PDA_SQLCE.sdf;//把表和数据同步下去后存放的数据库文件

private string rdaOleDbConnectString= Provider=sqloledb; Data Source=10.194.14.68;Initial Catalog=BDZXJ_SXB;User Id=sa;Password =<chmetcnv w:st="on" unitname="”" sourcevalue="10203" hasspace="False" negative="False" numbertype="1" tcsc="0">010203<span style="FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 新宋体">”</span></chmetcnv>;//连接到服务器的字符串

SqlCeRemoteDataAccess rda = null;//声明一个远程数据访问变量

try

{

rda = new SqlCeRemoteDataAccess();

rda.InternetUrl = InternetUrl;

rda.LocalConnectionString = LocalConnectionString;

rda.Push(Tb_N,

rdaOleDbConnectString,

RdaBatchOption.BatchingOn

);

}

catch(SqlCeException es)

{

ShowErrors(es);

throw es;

}

finally

{

rda.Dispose();

}

}

上传和下载差不多,只是下栽调用pull方法而上传调用了push方法, push方法最后一个参数是表明是否开启事务控制。

2. Symbol扫描头控制技术

要开发PDA端的扫描头,必须有有厂商提供的API包才行,下载和安装API包在前面已经介绍,下面说下它的具体用法:

private Symbol.Barcode.BarcodeReader barcodeReader;//声明一个条码阅读器

this.barcodeReader = new Symbol.Barcode.BarcodeReader();//实例化

this.barcodeReader.Decoders.D2OF5 = Symbol.Barcode.DisabledEnabled.Enabled;//声明条码的标准

this.barcodeReader.Reader.ReadNotify+=new EventHandler(Reader_ReadNotify);//绑定扫描条码事件(其实就是给一个特殊的委托变量指定一个方法入口地址)

this.barcodeReader.Start();//打开扫描头

private void Reader_ReadNotify(object sender, EventArgs e)

{

//扫描后要处理的事情

}

要注意的是要打开扫描头(barcodeReader.Start())后才能触发扫描头事件,我们测试了下扫面头触发事件的规律可总结为:

1. 打开扫描头---扫描到条码----触发扫描头事件

2. 关闭扫描头---打开扫描头-----触发扫描头事件

1情况是我们想要的,第2种情况是我们要避免的,

我们的处理方法是:只有到条码扫描界面才打开扫描头,且设个标记位使关闭扫描头到打开扫描头这个过程不能触发扫描头事件。

3. WinCE NT平台sockect通讯技术

1. 组件架构

<group id="_x0000_s1026" style="WIDTH: 446.4pt; HEIGHT: 241.9pt; mso-position-horizontal-relative: char; mso-position-vertical-relative: line" coordsize="7763,4214" coordorigin="1727,1803" editas="canvas"><lock aspectratio="t" v:ext="edit"></lock><shape id="_x0000_s1027" style="LEFT: 1727px; WIDTH: 7763px; POSITION: absolute; TOP: 1803px; HEIGHT: 4214px" type="#_x0000_t75" o:preferrelative="f"><font size="3"><fill o:detectmouseclick="t"></fill><path o:connecttype="none" o:extrusionok="t"></path><lock v:ext="edit" text="t"></lock></font></shape><group id="_x0000_s1028" style="LEFT: 1790px; WIDTH: 3130px; POSITION: absolute; TOP: 2890px; HEIGHT: 3125px" coordsize="3287,3125" coordorigin="2353,2890"><rect id="_x0000_s1029" style="LEFT: 2353px; WIDTH: 3287px; POSITION: absolute; TOP: 2890px; HEIGHT: 3125px"><font size="3"></font></rect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值