1.1 基于wince下的手持终端代码优化
采用的架构如下所示:
1. C#中的“DataTable”用完后一定要关闭。如果没有关闭,则会造成相关资源没有关闭,造成程序崩溃。关闭一定要在抛出异常的finally中进行关闭,如下所示:
Finally { if (dt != null) { dt.Dispose; dt = null; } } |
2. 扫描头程序,借助第三方软件去实现。省得自己去调用扫描头相关程序,还写的不正确!!目前采用的是“DataWedge”,可以调整声音、扫描的条码类别等,非常方便。
3. 减少手持终端与webservice的交互。争取做到一次人机交互调用一次webservice。把业务逻辑和业务判断放在webservice中去实现,而不是在设备端调用多次webservice,在设备端进行业务判断或业务逻辑处理。
4. Webservice返回时,尽量不要返回“DataTable”,而是要返回字符串。
5. 调用webservice时,如果时间过长,考虑加上超时设置。以给操作人员及时的反馈。
6. IIS7工作进程数问题。当一个或两个手持终端调用时,没有问题。但一旦手持终端数量多了,调用webservice频繁了,就报莫名的错误。解决方法就是增加IIS7中的工作进程数。
1.2 Datamax打印机打印张数比实际要少的问题。
现象:一次发送超过100个打印条码的命令,打印机每次打印不到100张。
解决过程:
1. 升级打印机的本身软件系统版本,没有效果。
2. 要求厂家派硬件技术工程师到现场查看硬件是否有问题?厂家技术人员最终结论说硬件没问题。
3. 修改应用软件发送命令规则,把超过100个条码的打印命令,分成多批,每批少于50个条码打印命令。发送完后等打印机打印完成再发送下一批命令(发送完后,程序进行休眠,等打印机打印完成后,再执行发送下一批),最终问题通过此种方式解决了。
1.3 生成并发送二维码图片给”马肯依玛士X60热转印打码机”
1. 解决通讯问题:建立“TCP”的“Socket”,采用“ASCII”编码的方式把命令字符串转成字节数组,发送给打印机。注意“STX”为“ASCII”编码中的控制字符,对应“ASCII”值为“2”。方法都对了,但就是打印机没有反映,最后,没有办法了,换了另一台打印机一试就通讯成功了。
2. 解决传送数据(变量、图片)的问题:
通讯成功后,之后看了“NGPCL”协议传变量的方式,变量可以传了,但变量中有中文,再次折腾采用” Unicode”编码方式传送命令;但最后被告知传送二维码内容中不能包含中文,所以传变量的方式放弃了。
改用传图片的方式,但图片如何传给打印机?把图片读到字节数组中,然后再” Base64”成字符串。方法是对了。但传过去之后,打印机老是报错。最后发现有些图片可以传过去,有些传不过去。终于发现了这些图片的区别“单色位图”,打印机只能接收“单色位图”,但windows下生成的图为“24位”或“32位”的。那就生成单色位图呗,在网上找N多算法不好用,最后没有办法了,应用程序调用画图软件生成单色位图,然后再发送给打印机。但此种方法老是不稳定,最后一同事找了个正确的算法,还是生成单色位的图片。到此问题终于解决。
1.4 手持设备扫描二维码效率分析
Ø 二维码的包含内容的多少,内容越多,扫描越慢。
Ø 二维码打印的质量:二维码打印的浓度越高,识别就越慢。
Ø 打印的材质:材质为PET材质的,铜板纸应该识别率更高。
Ø 硬件识别率。
Ø 软件识别率。