天天看點

Symbol mc1000開發體驗

拿到一個motorola mc1000的盤點機,本想在開發程式與普通桌面程式差不多,也可能是思維沒有轉變過來,總有種找不到出路的感覺。經過10天的摸索,終于修成正果了。現将過程記錄如下:

一、準備工作

1、  我用的開發環境是的vs2008。

2、  下載下傳Symbol開發包,雖然盤點機是motorola牌子的,但開發包的名稱還是叫Symbol。下載下傳位址:https://docs.symbol.com/downloads/SMDK-M-1.07.03.exe

3、  安裝PC機與盤點機的通信軟體Microsoft ActiveSync 4.5 中文版安裝。

二、選擇資料庫

環境安裝好了,很興奮,以為這就可以開發程式了。剛開始确實挺順利的,建個空窗體,編譯正常,還可以部署上機子上,正常運作。接下來,按照開發Windows程式的思路開始動作了。

剛開始資料庫選擇了sqlite3,也挺好用的,主要是因沒有機子,是以寫的是winform程式,讀取資料庫,儲存資料都正确。結果等拿到機子後,傻眼了。機子不支援sqlite資料庫,要安裝wince版本的運作庫,試了幾個沒有成功,可能是與我用的vs2008有關。由于是新手,也不知道怎麼修正,就換了microsoft推薦的sqlce資料庫。Sqlce資料庫在wince上能使用,同樣也可以開發winform程式,導出資料後,然後拷到wince上使用。本來想用文本檔案然後再到wince上,再儲存到sqlce資料庫中,結果發現速度太慢。

後來發現,由于商品資訊格式相對固定,還不如儲存到Arraylist中,然後通過二分法查找。實際測試的結果,速度還是挺快的,這是我最滿意的結果。

三、雷射掃描

程式好了,讀取商品資訊,儲存盤點結果,一切正常。高興呀O(∩_∩)O~。拿了條碼一試,天那,不發紅光,要暈倒了。

因為剛開始不知道要安裝symbol開發包。從網上搜尋motorola開發,沒有找到想要的結果,後來想到motorola收購了symbol,會不會是symbol開發呢?結果正是想要的。下載下傳安裝,檢視例子。發現寫的測試條碼掃描功能的例子,太複雜了。結果就直接用barcode控件,挺好,功能正常。繼續設定螢幕亮度,壞了,包有沖突。繼續檢視例子,去掉不必要的代碼,到最後才發現,隻有幾行代碼是有效的,太經典了。定義編量

private Symbol.Barcode.Reader MyReader = null;

private Symbol.Barcode.ReaderData MyReaderData = null;

初始化

private void InitRead()

        {

            MyReader = new Symbol.Barcode.Reader();

            MyReaderData =

             new Symbol.Barcode.ReaderData(Symbol.Barcode.ReaderDataTypes.Text,

             Symbol.Barcode.ReaderDataLengths.DefaultText);

            MyReader.ReadNotify += new EventHandler(MyReader_ReadNotify);//定義接收事件

            MyReader.Actions.Enable();

            MyReader.Actions.Read(MyReaderData);

        }

顯示掃描的條碼

        private void MyReader_ReadNotify(object sender, EventArgs e)

        {

            txt_barcode.Text = MyReaderData.Text;

            txt_barcode.Focus();

            txt_barcode.Select(13, 1);

            MyReaderData.Dispose();//這一句很重要,一定要釋放記憶體

            //以下兩句話,實作連續掃碼功能

            MyReaderData = MyReader.GetNextReaderData();

            MyReader.Actions.Read(MyReaderData);

、        }

到此程式完成,可以正常使用。

四、部署到盤點機

通過vs開發環境部署程式中可以看到需要安裝哪些CAB包,把這些包拷到機子上,運作,提示‘不是一效的windows ce安裝程式’,暈了。最後才發現是我拷的目錄不正确。因為機子空間太小,是以想拷到擴充卡上安裝,結果又繞了彎路,有一些包必須在系統目錄下才能安裝。

MC1000的機型應用程式的安裝需要以下幾個CAB檔案:

  a) NETCFv2.wce5.armv4i.cab,這是.NET Compact Framework v2.0的一個安裝包;或者NETCFv35.wce.armv4.cab ,這是.NET Compact Framework v3.5 的一個安裝包;

b) symbol.all.arm.cab,這是SYMBOL的一個安裝包,在Symbol提供的軟體開發包中;

c) sqlce30.dev.CHS.wce5.armv4i.CAB,sqlce30.repl.wce5.armv4i.CAB,sqlce30.wce5.armv4i.CAB,這三個CAB安裝包是SQL CE資料庫必須的。如果不是有SQL CE 資料庫,則這些檔案不需要安裝。

  System_SR_CHS.CAB,這是調試用到的一個安裝包,不是必須的。

用.NET制作的應用程式部署到PDA上之前,必須安裝.NET Compact Framework v2.0 或者.NET Compact Framework v3.5。由實際裝置項目程式開發的版本來定,也就是上面的安裝包,此外還要裝SYMBOL的一個安裝包(symbol.all.arm.cab),這些都是運作應用程式必須的環境。如果沒有用到SQL CE,則其他幾個安裝包不是必須的。

由于CAB包在安裝後,如果沒有設定為隻讀,系統會自動删除,是以就想寫一個自動調用的程式,安裝後就會删除這些包了,那麼下次就不會再安裝了,如果機子冷啟動了,就再次拷貝這些CAB包,為的是節省系統空間(勞神呀)。

在startup目錄下增加installcab.run。内容類似下面内容Wceload /NOASKDEST /Application/CAB/NETCFv2.wce5.armv4i.cab,但當再次啟動時會提示找不到cab檔案,不理想。

繼續查資料,發現可以在系統資料庫中增加啟動安裝項。在application下增加netct.reg,内容如下:

; For Windows CE .NET devices

[HKEY_CURRENT_USER/Software/Symbol/Startup/Programs/Prog14]

"Name"="/windows/wceload.exe"

"Command"="/noaskdest /Application/cab/NETCFv2.wce5.armv4i.cab"

"Continue"=dword:0

"ColdBootOnly"=dword:1

這兩種方法隻有在冷啟動時才執行,因而不能滿足要求。

後來發現可以用bat檔案,放在StartUP目錄下,内容類似Wceload /NOASKDEST /Application/CAB/NETCFv2.wce5.armv4i.cab,這樣每次啟動機子都會執行,也就實作自動安裝功能了。

五、其它知識

.cpy檔案拷貝快捷方式指令如下例:

/application/PDlnk.lnk    >    /%WSM%/PDlnk.lnk

/application/PDlnk.lnk    >    /%WDT%/PDlnk.lnk

注:Windows System

Windows DeskTop

.cpy檔案是冷啟時用來複制檔案到指定目錄的指令檔案。CE系統快捷方式為.lnk檔案,指令行中必須使用全名(包含字尾),否則失敗。

.lnk檔案直接通過ActiveSync由裝置拷貝出來即可。

六、安裝程式

程式一般都很小,還要設定快捷方式,又不想做成CAB包(主要是VS2003制作CAB太不友善了),是以就采用了一種另類的方法。把程式拷到PDA中,設定好快捷方式,然後把部署需要的CAB包,及程式和快捷方式對應的目錄結構拷下來。當PDA冷啟動,資料丢失後,直接把這些檔案拷到機了上,重新開機一下,就會自動安裝了。