wince 系统的数据采集器读取扫描数据并上传

来源:互联网 发布:读书看报软件 编辑:程序博客网 时间:2024/05/01 06:31

分公司产品的出入库管理需要扫描条码操作。以前开发的软件是用普通的无线扫描枪,用声音提示扫描结果。由于仓库很宽,噪声大,有时无法听到声音提示,不知道扫描是否成功。操作人员意见很大(听不到扫描提示的就用手工记录条码,最后输入电脑),后来曾考虑用笔记本电脑做中继。感觉很变态。最后经过层层审批,终于同意购买有操作系统(wince)的条码数据采集器。

wince系统的pad 与普通的扫描枪有点不同,普通的扫描枪直接按扫描键就可以扫描条码。而wince系统的pad 需要开启扫描电源-->读取扫描结果-->关闭扫描电源。(为什么不是一直打开扫描电源?可能是出于省电,因为wince的pad 是由电池供电,而普通扫描枪是通过USB线供电)。

wince软件开发环境的部署,网上一大堆。部署好wince开发环境后, 根据厂家提供的sdk进行代码的编写,步骤如下:

  • 开启扫描电源,厂家提供的dll开启
  • 开启扫描读数,可以利用面版上的“扫描键”来触发,在form_keyDown事件中捕获“扫描键”是否按下。
          
    private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode.ToString() == "F5") { if (!flag) //如果没打开扫描开关,则声音提示 WCE_PlaySound("\\ResidentFlash2\\1.wav", IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME)); else Scanner_Trig(); //读取条码 }
  • 读取到数据(厂家dll提供读取方法)后显示在文本框中(通过代理调用)和数据保存操作。
     
    private void ScannerRd() //读取条码数据 { byte[] bRecv = new byte[256]; byte len = 0; while (true) { len = 0; if (Scanner_Read(ref bRecv[0], ref len))// 厂家提供读取方法 if (len > 0) SetText(System.Text.Encoding.ASCII.GetString(bRecv, 0, len)); } } delegate void SetTextCallback(string text); private void SetText(string text)//读到数据后显示 { if (this.textBox1.InvokeRequired)//等待异步 { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); //通过代理调用刷新方法 } else { if (text.Length > 12)//数据合法 ...  //处理读到的数据 } }
  • 关闭扫描电源

数据上传:扫描结束后,把pad拿到有wifi的地方上传数据,上传数据直接用ado.net,由于wince中没有dbnetlib.dll,无法直接操作远程数据,把dbnetlib.dll拷贝到安装 目录下就行了。

    
//按ADO.net方法上传数据 using (SqlConnection conn = new SqlConnection(sql_constr)) { conn.Open(); SqlCommand cmd = new SqlCommand("insert into.....", conn); cmd.ExecuteNonQuery(); ... }

0 0
原创粉丝点击