- 浏览: 786803 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (417)
- ASP.NET MVC (18)
- WEB基础 (24)
- 数据库 (69)
- iPhone (20)
- JQuery (3)
- Android (21)
- UML (8)
- C# (32)
- 移动技术 (19)
- 条码/RFID (6)
- MAC (8)
- VSS/SVN (6)
- 开卷有益 (4)
- 应用软件 (1)
- 软件工程 (1)
- java/Eclipse/tomcat (61)
- 英语学习 (2)
- 综合 (16)
- SharePoint (7)
- linux (42)
- Solaris/Unix (38)
- weblogic (12)
- c/c++ (42)
- 云 (1)
- sqlite (1)
- FTp (2)
- 项目管理 (2)
- webservice (1)
- apache (4)
- javascript (3)
- Spring/Struts/Mybatis/Hibernate (4)
- 航空业务 (1)
- 测试 (6)
- BPM (1)
最新评论
-
dashengkeji:
1a64f39292ebf4b4bed41d9d6b21ee7 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
zi_wu_xian:
PageOffice操作excel也可以设置表格的行高列宽,并 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
wanggang0321:
亲,我在pptx(office2007以上版本)转pdf的时候 ...
JODConverter]word转pdf心得分享(转) -
xiejanee:
楼主:你好!我想请问下 你在代码中用DOMDocument* ...
Xerces-C++学习之——查询修改XML文档 (转)
无线终端开发培训文档
项目名称
Mc3000开发培训(vb.net智能终端无线系统开发)
项目号
项目阶段
日期
2006.9.20
工作要素
培训时间
16:00
培训人员
广州雄冠条码公司
培训程序
开发环境的培训
培训主要内容
智能终端无线系统的开发,起核心部分可以分为这么四类:开发环境,扫描头的处理,服务器和客户端的数据通讯(socket的建立)。
开发环境:
在这里我们采用的是vb.net2003的开发语言,这种开发语言的特点是简单、界面比较友好、比较容易上手等优点。
下面我们开始正式讲解我们终端程序的开发。
开始项目(如下图所示)
当我们打开vs.net的界面时,出现的界面都是平常开发pc端程序界面是一样的,当我们新建一个项目时,我们就可以选择创建智能终端项目,如下图所示:
我们在上面选择好项目路径和输入一个项目名称,点确定以后系统会要求选择一个针对智能终端的开发平台,如下图所示:
这里我们针对我们所开发的智能终端的操作系统而定,因为智能一般都有pocket pc 和windows ce这两种操作系统,我们现在开发的智能终端mc3000是基于windows ce操作系统的,所以我们选择的开发平台是windows ce。按确定以后就是进到我们正式架构这个项目时候了,如下图:
这里和我们平常开发的场景没有什么两样。
一般的项目开发我们都会采用form by form的方式去架构整个项目,但是对于智能终端项目架构方面按照我们公司的习惯,我们是采用panel by panel方式的,这样做的好处就是减少调用form时终端消耗的内存,因为我们知道一般的终端设备的内存是很小的。
下面我们通过我们公司做过的一个实例来讲解具体的架构方面的东西,如下图所示:
这里我们是把以前form上的东西全部转到panel上面,一个模块一个panel。在系统启动的时候我们先初始化这些panel,所谓初始化就是我们会把form上面的全部panel叠放在一个位置上面,当要调用的时候我们就把相应的panel显示在最上层就ok了。下面我们具体讲一下这些初始化函数:
1、 初始函数InitPanel,这个函数的作用就是把全部的panel事先放在一个合适的位置。如下
Private Sub InitPanel()
Dim p As New Point(10, 10)
Pl_logon.Location = p
Pl_main.Location = p
Pl_allsheet.Location = p
Pl_out.Location = p
End Sub
我们把这些panel都放在终端屏幕x坐标和y坐标都是10的位置上
2、 成员函数EnumPanel,我们利用这个函数定义一些相应的panel成员;
Private Enum EnumPanel
ScanLoginpanel
ScanmainPanel
ScanoutPanel
ScansheetPanel
End Enum
3、 调用panel函数ShowPanel(ByVal pPanel As EnumPanel),我们利用这个函数调用相应的panel。
Private Sub ShowPanel(ByVal pPanel As EnumPanel)
Select Case pPanel
Case EnumPanel.ScanLoginpanel
Me.Text = "登录"
Pl_logon.BringToFront()
Case EnumPanel.ScanmainPanel
Me.Text = "主目录"
Pl_main.BringToFront()
Pl_main.Focus()
Case EnumPanel.ScanoutPanel
Me.Text = "出货"
Pl_out.BringToFront()
Case EnumPanel.ScansheetPanel
Me.Text = "配货单列表"
Pl_allsheet.BringToFront()
End Select
End Sub
到这里我们就把终端开发的架构讲完,相信大家也已经理解了这种架构的开发。我们接下来开始讲扫描头的处理方面的东西。
扫描头的处理:
作为数据采集终端,扫描头的处理在整个项目是非常重要的,因为它是数据来源。基本上每款终端,厂家一般都会提供处理的扫描头的dll,同样symbol公司也提供这样的dll--SMDK-M-1.01.06.exe,在项目开发之前我们要先这个dll安装上去,安装上去以后我们才能调用它的扫描头处理的相关函数。安装成功以后,我们要在项目上引用这个dll,如下图:
这上面那些引用都是我们要用到的dll,第三个symbol.barcode就是关于扫描头。引用完成我们就可以在我们的项目上处理我们的扫描头了。我们先创建一些关于扫描头的对象
Private myreader As Symbol.Barcode.Reader = Nothing
Private myreaderData As Symbol.Barcode.ReaderData = Nothing
Private myreadnotifyhander As System.EventHandler = Nothing
Private myStatusNotifyHandler As System.EventHandler = Nothing
上面那些就是扫描头的对象。下面我们具体来讲解一下这些关于扫描头的函数:
1、 扫描头初始化函数Private Function InitRead(),这个函数我们具体在代码。
2、 开启扫描头函数Private Sub StartRead()和Private Sub StartStatus()
3、 关闭扫描头函数Private Sub StopRead()和Private Sub StopStatus()
4、 数据采集函数 Private Sub HandleData(ByVal TheReaderData As Symbol.Barcode.ReaderData),我们这里具体讲一下这个函数:
Private Sub HandleData(ByVal TheReaderData As Symbol.Barcode.ReaderData)
Dim filestr As String
ScanData = TheReaderData.Text
If Trim(ScanData).Length = 10 Then
tb_outbox.Text = ScanData
Me.StartStatus()
Me.StartRead()
ElseIf (Trim(ScanData).Length = 19) Or (Trim(ScanData).Length = 22) Then
If tb_outsheet.Text <> "" Then
If tb_outbox.Text <> "" Then
tb_outbcr.Text = ScanData
SendCommand("updateoutinfo" & "|" & Trim(tb_outsheet.Text) & "|" & Trim(tb_outbox.Text) & "|" & Trim(tb_outbcr.Text))
Me.StopRead()
Me.StopStatus()
Else
P(500, 3000)
P(500, 3000)
P(500, 3000)
'MsgBox("请先扫描或者输入箱号")
Lb_message.ForeColor = Color.Red
Lb_message.Text = "请先扫描或者输入箱号"
tb_outbox.Focus()
End If
Else
P(500, 3000)
P(500, 3000)
P(500, 3000)
'MsgBox("请先输入配货单号")
Lb_message.ForeColor = Color.Red
Lb_message.Text = "请先输入配货单号"
tb_outsheet.Focus()
End If
Else
'MsgBox("请扫描正确条码")
Lb_message.ForeColor = Color.Red
Lb_message.Text = "请扫描正确条码"
Me.StartStatus()
Me.StartRead()
End If
End Sub
我们扫描头处理就先讲到这里,顺便我们讲一下声音的处理,声音处理对于数据采集终端来说也是很重要的,它可以起到警示的作用。要用声音我们也要先引用symbol.audio。
先创建一个声音对象 Private MyAudioController As Symbol.Audio.Controller = Nothing
具体的函数,有两个声音函数
1、 P(ByVal pD As Integer, ByVal pF As Integer)
2、 P(ByVal pD As Integer, ByVal pF As Integer, ByVal pFN As String)
服务器和客户端的数据通讯
服务器和客户端的数据通讯分两部分,我们先讲客户端这部分,然后讲服务器端。
客户端
在客户端我们首先会去设置一个服务器的ip地址和端口。用文本文件保存在本地,然后用函数去调用这个文件得到ip地址和端口。当程序启动的时候我们去连接服务器端。函数是Private Function Connect() As Boolean,这个函数是要到socket,所以我们首先Imports System.Net.Sockets。下面我们看一下Connect()函数:
Private Function Connect() As Boolean
Try
tpcClient = New TcpClient
tpcClient.Connect(System.Net.IPAddress.Parse(strIP), strPort)
tpcClient.GetStream.BeginRead(readBuffer, 0, READ_BUFFER_SIZE, AddressOf DoRead, Nothing)
Return True
Catch ex As Exception
MsgBox("服务器未启动或设置不正确,无法连接到服务器。", MsgBoxStyle.Critical)
Return False
End Try
End Function
我们定义tpcClient这个客户端的socket对象,然后通过这个对象去连接服务器,并且利用一个doread函数去读取和服务器交互的数据流。下面我来看一下这个doread函数
Private Sub DoRead(ByVal ar As IAsyncResult)
Dim BytesRead As Integer
Dim strMessage As String
If blnExit Then
Exit Sub
End If
Try
' Finish asynchronous read into readBuffer and return number of bytes read.
BytesRead = tpcClient.GetStream.EndRead(ar)
If BytesRead < 1 Then
' If no bytes were read server has close. Disable input window.
'MarkAsDisconnected()
Exit Sub
End If
' Convert the byte array the message was saved into, minus two for the
' Chr(13) and Chr(10)
strMessage = Encoding.Unicode.GetString(readBuffer, 0, BytesRead - 2)
ProcessCommands(strMessage)
' Start a new asynchronous read into readBuffer.
tpcClient.GetStream.BeginRead(readBuffer, 0, READ_BUFFER_SIZE, AddressOf DoRead, Nothing)
Catch e As Exception
'MarkAsDisconnected()
'MsgBox(e.ToString, MsgBoxStyle.Critical, "Error in DoRead")
End Try
End Sub
在这个函数里我们会把读到的数据流转换成字符串,并且不停的去贞听缓冲区的数据,当成功的得到数据时,我们利用这个ProcessCommands(strMessage)函数进行处理,得到我们需要的结果。
Private Sub ProcessCommands(ByVal strMessage As String)
Dim ary() As String
Dim aryCmd() As String
Dim filestr As String
Try
If strMessage.Length > 0 Then
aryCmd = strMessage.Split(END_CHAR)
'bcruse = True
Dim i As Integer
If aryCmd.Length >= 1 Then
For i = 0 To aryCmd.Length - 1
If aryCmd(i) <> "" Then
Dim intPos As Integer
Dim strResult As String = aryCmd(i)
Debug.WriteLine(strResult)
intPos = aryCmd(i).ToUpper.IndexOf(CMD_Pre)
If intPos < 0 Then
strResult = ""
Else
strResult = aryCmd(i).Substring(intPos + CMD_Pre.Length)
If strResult.Substring(strResult.Length - 1) = END_CHAR Then
strResult = strResult.Substring(0, strResult.Length - 1)
End If
End If
ary = strResult.Split(Chr(124))
Select Case ary(0).ToUpper
Case "notbcrtobill".ToUpper
P(500, 3000)
P(500, 3000)
P(500, 3000)
'MsgBox("此单号不包含此条码")
Lb_message.ForeColor = Color.Red
Lb_message.Text = "此单号不包含此条码"
tb_outbcr.ForeColor = Color.Red
Me.StopRead()
Me.StopStatus()
Me.StartStatus()
Me.StartRead()
End Select
End If
Next
End If
End If
Catch ex As Exception
End Try
End Sub
这个函数我们就会把从缓冲区得到的字符串解成我们需要的信息,并这些信息显示在相应的模块里,也给客户提供相应的提示。上面讲的都是怎样从服务器端得到数据,下面我们讲一下怎么向服务器端发送数据。因为我们这个扫描采集数据的,所以当我们扫描得到数据时,我们就会向服务器端发送数据,这个函数SendCommand("updateoutinfo" & "|" & Trim(tb_outsheet.Text) & "|" & Trim(tb_outbox.Text) & "|" & Trim(tb_outbcr.Text))就是向服务器端发送数据的,大家注意到我们会把要发送的数据生成一个字符串,字符串前面的"updateoutinfo"是个自己定义的命令头,后面的就是具体的数据,中间是用“|”分割,这些开发时都是可以自己灵活处理,下面我们看一下这个发送函数
Private Sub SendCommand(ByVal pInput As String)
SendData(CMD_Pre & pInput & END_CHAR)
End Sub
Public Sub SendData(ByVal data As String)
Try
Dim writer As New IO.StreamWriter(tpcClient.GetStream, Encoding.Unicode)
writer.Write(data & END_CHAR)
writer.Flush()
Catch ex As Exception
End Try
End Sub
这个就是数据写到缓冲区。
看完客户端,下面接着让我们来看看服务器端的数据处理。
服务器端
服务器端我们会连接数据库进行数据。程序启动以后我们首先会设置数据库的连接,上面的服务器就是数据库所在的ip地址,用户名就是数据库的sa,密码就是sa的密码。数据库处理我们需要引用一个dll
Imports DataAccess。
服务器端启动以后,系统会先启动socket连接,函数StartServer()。
Private Sub StartServer()
'取得端口号
PORT_NUM = GetPortNum()
listenerThread = New Threading.Thread(AddressOf DoListen)
listenerThread.Start()
UpdateStatus("无线监听已启动。")
End Sub
在这个函数我们使用线程技术,就是每个终端连接到,服务器都会用一个线程去处理。这样就可以同时处理多个终端的数据请求。DoListen函数就是贞听来自终端的数据。
Private Sub DoListen()
Try
' Listen for new connections.
listener = New TcpListener(System.Net.IPAddress.Any, PORT_NUM)
listener.Start()
Do
' Create a new user connection using TcpClient returned by
' TcpListener.AcceptTcpClient()
Dim client As New UserConnection(listener.AcceptTcpClient)
' Create an event handler to allow the UserConnection to communicate
' with the window.
AddHandler client.LineReceived, AddressOf OnLineReceived
UpdateStatus("New connection found: waiting for log-in")
Loop Until False
Catch ex As Exception
If listener Is Nothing Then
Else
listener.Stop()
End If
If blnExit Then
Else
Me.StartServer()
End If
SaveLog("DoListen", ex.ToString)
End Try
End Sub
这个AddHandler client.LineReceived, AddressOf OnLineReceived就是做了一个模块去处理接受数据,client.LineReceived是从缓冲区接收数据,OnLineReceive是对接收到的数据进行处理。数据处理的原理和客户端的数据处理一样,但是这里会把数据和数据库进行交互,具体的看源代码来解释。
发表评论
-
todo
2011-12-12 13:30 0http://bbs.51cto.com/thread-845 ... -
浅谈WAP网站安全(转)
2011-12-08 16:32 1497[摘要] 本文以国 ... -
wap随笔
2011-11-30 10:16 0在vs2008下使用asp.net开发wap2.0以及手机we ... -
viewport不权威指南
2011-11-29 16:39 1019viewport 不权威指南 Poste ... -
XHTML MP 常用的 Meta 信息
2011-11-29 16:13 1585XHTML MP 常用的 Meta 信 ... -
智能手机Web开发笔记
2011-12-10 13:25 1158智能手机 版(简称M版)前端开发终于告一段落,第一次做移动 ... -
html5手机浏览器
2011-11-25 15:42 1183HTML5特性: 特性1 - Canvas :用于在网页上绘 ... -
手机html5
2011-11-25 13:24 1173http://mobile.zol.com.cn/259/25 ... -
WAP2.0手机网站的开发(转)
2011-11-17 11:13 2142转自:http://blog.csdn.net/m ... -
IIS上搭建WAP网站
2011-11-17 10:42 9041.创建一个站点文件夹首先你要创建一个独立于你的主站点的新 ... -
xhmtlMP基础(wap2.0开发)转
2011-11-17 09:12 1816一:XHTML MP的语法规则我们知道,我们通常用电脑访问的网 ... -
wap cookie
2011-11-16 13:39 1348转自:http://www.cnblogs.com/myb ... -
wap开发
2011-11-16 11:51 1197转自:http://www.cnblogs.com/sunfn ... -
[转发贴] .NET WAP开发-WAP2.0篇
2011-11-15 17:39 1933WAP1.1时代是否结束这个不可下定论。但WAP2.0的大面积 ... -
手持通讯安全性问题解决方案思考
2011-10-13 09:25 0<!-- [if gte mso 9]><x ... -
智能设备CAB的相关(转)
2011-07-06 15:20 1585大概步骤如下:1.创建一个智能设备解决方案用于本打包演练2 ... -
加密解密
2011-05-30 11:39 0简单加密解密算 ... -
浅谈手机软件架构设计(转)
2011-05-12 14:31 1313浅谈手机软件架构设 ... -
解决WM设计时窗体继承显示不出来控件的问题
2011-03-15 16:58 1236将此文件添加到工程里即可:DesignTimeAttribut ... -
通过Windows Mobile连接管理器建立网络连接(转)
2011-03-14 14:06 1154http://www.cnblogs.com/Lisen/ar ...
相关推荐
MC3000系统是摩托罗拉公司推出的一款专门针对移动计算设备的操作系统,主要应用于手持终端、数据采集器等工业级设备。这个系统的设计旨在提供高效、稳定且易用的环境,以便在仓库管理、物流跟踪、零售库存控制等各种...
MC数据采集器使用培训手册PPT课件 ...13. MC3000无线设置:MC3000无线设置包括搜索可用的无线网络、选择需要连接的无线网络、点住这个无线网络会出现两个选项,点击Connect进行连接这个无线网络的设置等。
MC3000扫码程序是专为Symbol MC3000系列移动数据终端设计的应用,用于实现快速、高效的商品或条形码扫描功能。在物流、仓储、零售等行业,这样的程序能够极大地提升作业效率,减少人为错误。接下来,我们将详细讨论...
MC3000无线文档是该设备正常运行不可或缺的一部分,它包含了设备的操作指南、系统配置信息以及故障排查指南等重要资料。 当MC3000的无线文档丢失时,这将对设备的日常使用和维护带来诸多不便。为了确保设备能够稳定...
在Windows CE系统中,C#开发者可以借助.NET Compact Framework进行开发,它提供了与桌面版.NET Framework相似的API接口,使得开发者能够在嵌入式设备上轻松地构建应用程序。在MC3000的ScanSample项目中,核心知识点...
【标题】"MC3000条码控制范例"主要展示了如何在C#编程环境中,利用Visual Studio 2005(VS2005)来开发针对摩托罗拉(现Zebra Technologies)MC3000移动数据终端的条码编码与解码功能。MC3000是一款广泛应用于仓库...
MC3000系列支持Windows Embedded Handheld操作系统,为开发者提供了丰富的软件开发选择,其中C#是一种常见且强大的开发语言。 二、C#编程基础 C#是微软公司推出的一种面向对象的编程语言,它简洁明了,支持多种高级...
MC3000数据采集器是一款广泛应用于工业自动化、环境监测、实验室数据处理等多个领域的设备。它具有高精度、稳定性强、接口丰富等特点,能够实时地收集和存储各种传感器或仪器产生的数据。在这个"MC3000数据采集器...
《Windows CE5.0开发实例——深入探索Symbol公司MC3000系列》 Windows CE5.0是一款专为嵌入式设备设计的操作系统,它为开发者提供了丰富的功能和高度可定制性,使得在各种小型硬件平台上构建应用程序成为可能。本...
根据提供的文件信息,“mc3000英文说明手册”是一份详尽的集成指南文档,主要涉及MC3000设备的所有硬件信息以及相关的软件开发配置。这份文档由Symbol Technologies, Inc.出版,并且受版权保护,任何未经授权的复制...
ASP.NET实现二维码(QRCode)的创建和读取实例 ASP.NET 编程语言中实现二维码(QRCode)的创建和读取是非常有用的技术,特别是在移动互联网时代。二维码可以存储大量数据,并且可以快速识读,广泛应用于各个领域。...
通过优化电池管理系统、提供详尽的操作指南以及丰富的配件选项,MC3000能够满足工业环境中对高效数据采集的需求。同时,考虑到用户的健康和舒适性,文档中还提供了实用的身体姿态建议,有助于减少长期使用过程中可能...
Motorola MC3000 AppCenter是一个款供终端用户使用的管理应用程序,将MC3000 CE.NET设备上锁定管理员未经授权的应用程序。 AppCenter提供一个应用程序的图标窗口。任何“未经授权”的应用程序,试图启动(无论是自动...
5. **实时同步**:通过无线网络将盘点数据实时上传到后台系统,减少数据延迟和错误。 6. **错误处理**:处理扫描错误,如无法识别的条码或已删除的商品。 7. **用户界面**:设计简洁易用的界面,适应小屏幕和触摸...
MC3090 MC3000 MC3000采集程序 www.sepho.cn qq:254941539
《Symbol MC3000 Integrator Guide》是针对Symbol MC3000移动数据终端的一份集成指南,主要面向IT专业人员和系统集成商,旨在帮助他们理解和有效地部署这款设备。Symbol MC3000是Zebra Technologies(原Symbol ...
Windows CE是一种嵌入式操作系统,广泛应用于手持设备,如工业PDA、移动数据终端等,MC3000可能是其中的一款设备。C#作为.NET Framework的一部分,提供了丰富的功能和易用的接口,使其成为开发这类应用的理想选择。 ...
总的来说,MC3000影像式二维码识读模组以其高效、稳定和多功能性,成为自动化设备和智能终端中二维码识别的理想选择。它的设计考虑了多种应用场景,无论是接口兼容性、环境适应性还是操作便利性,都体现了其在二维码...