• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C#開發(fā)的手機彩盒稱重軟件

      2019-05-14 08:25:10鄧小丁
      數(shù)字技術(shù)與應用 2019年2期
      關(guān)鍵詞:多線程委托串口

      鄧小丁

      摘要:手機裝好彩盒后需要對彩盒進行稱重,以防止多裝或少裝附件。通過軟件分析電子秤上傳的數(shù)據(jù),提取出重量。然后對提取出的重量與標準重量進行比對,并將結(jié)果保存于服務器的數(shù)據(jù)庫上。

      關(guān)鍵詞:串口;正則表達式;多線程;重量穩(wěn)定;委托

      中圖分類號:TH715.1 文獻標識碼:A 文章編號:1007-9416(2019)02-0181-01

      0 引言

      手機在制造的過程中,需要裝手機及充電器、耳機、說明書等附件一起裝入彩盒內(nèi)。為了檢查有沒有多裝或少裝附件,我們一般采用對彩盒進行稱重來判斷。當多裝附件時,一般重量會超過標準重量;當少裝附件時,一般重量會低于標準重。目前行業(yè)中很多企業(yè)還是采用人工稱重、人工判斷,這樣容易誤判斷且沒有數(shù)據(jù)記錄。筆者主要針對這情況開發(fā)了手機彩盒自動稱重并且記錄數(shù)據(jù)的軟件。

      1 軟件實現(xiàn)

      1.1 基本功能實現(xiàn)

      電子秤一般采用串口向電腦上傳數(shù)據(jù),c#中有SerialPort這個串口控件。在使用時,先初始化串口。通過SerialPort1.PortName、SerialPort1.BaudRate等設(shè)置好參數(shù)。

      串口的數(shù)據(jù)接收采用事件SerialPort1.DataReceived自動觸發(fā)接收。由于電子秤上傳的數(shù)據(jù)可能是連續(xù)的、多數(shù)據(jù)的上傳,所以會一直觸發(fā)接收數(shù)據(jù),可能會造成與主程序運行沖突。因此,在數(shù)據(jù)接收的時候,我們采用多線程技術(shù),使得數(shù)據(jù)接收與主程序可以并行執(zhí)行。

      private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

      {

      Thread DataReceived_Thread = new Thread(new ThreadStart(DataReceived)); //新建線程

      DataReceived_Thread.Start(); //啟動線程

      }

      下面是接收數(shù)據(jù)函數(shù),調(diào)用SerialPort1.Read就可以讀取出串口上傳的數(shù)據(jù)。接收代碼例子如下:

      private void Sp_DataReceived()

      {

      byte[] buffer= new Byte[SerialPort1.ReadBufferSize + 1];

      int count=SerialPort1.Read(buffer,0,SerialPort1.ReadBufferSize);

      if(count>1)

      {

      CommResult =CommResult + System.Text.Encoding.ASCII.GetString(buffer, 0, count);

      }

      }

      接收到電子秤上傳的數(shù)據(jù)后,我們需要從這些數(shù)據(jù)里面提取出重量。我們用正則表達式提取。例如:G.W. :+ 0.76 kg U.W. :+ 0.00000 g/pcs Total: + 0pcs G.W. :+ 0.89 kg U.W. :+0.00010 g/pcs Total: + 2pcs。從中可以看到我們需要的是G.W. :+ 0.76 kg G.W. :+ 0.89 kg 這幾個數(shù)據(jù)就是重量。我們在采用正則表達式前可以先把一些特殊的字符去掉,比如空格和回車。這樣方便匹配不同數(shù)據(jù)格式的電子秤。

      MatchCollection mat? = Regex.Matches(CommResult, @"\+\d{0,}\.(\d{0,})(kg)");

      Console.WriteLine(CommResult);

      Console.WriteLine(@"The Expression: \+\d{0,}\.(\d{0,})(kg)");

      if (mat.Count >= 1)

      {

      weight= mat[mat.Count - 1].ToString(); //提取最后一次上傳的重量

      weight=weight.Replace("+","");? //去掉重量前的+號

      weight=weight.Replace("kg",""); //去掉重量后的kg

      Console.WriteLine(weight);

      }

      程序運行結(jié)果如圖1:

      這里的正則表達式"\+\d{0,}\.(\d{0,})(kg)"的意思是提取以+號開頭,kg結(jié)尾,中間為數(shù)字加小數(shù)點的數(shù)據(jù)。其他格式的數(shù)據(jù)修改正則表達式就可以。

      1.2 軟件可靠性能的實現(xiàn)

      在稱重過程中,一般電子秤顯示的重量是從0開始慢慢增加,甚至超過彩盒本身的重量,然后重量再慢慢穩(wěn)定下來。所以程序還需要去判斷最終穩(wěn)定下來的重量,這個重量才是彩盒真實的重量。所以優(yōu)化算法,采用的方法是每次提取的重量緩存起來,然后和上次提取的重量進行比較,如果相差的值在門限范圍(Accuracy)內(nèi),比如在電子秤精度范圍內(nèi),認為這是一次穩(wěn)定值。然后累計這個穩(wěn)定值,當穩(wěn)定值超過設(shè)定次數(shù)(Num),比如5次,認為這是最終的重量。因為不同電子秤它重量穩(wěn)定的時間不一樣,所以這個穩(wěn)定次數(shù)可以自己設(shè)置。穩(wěn)定次數(shù)設(shè)置越大,軟件讀取重量的時間就會越長,所以需要根據(jù)實際的電子秤進行調(diào)節(jié),以減少讀取時間。

      最后,在線程里面將重量顯示在控件上weightout.text= weight.ToString()這個代碼會有問題。因為不能在線程里面去操作主線程上的控件,需要采用委托。修改如下:

      public delegate void SetText(string txt); '聲明委托類型

      var settxt = new SetText(DisplayWeight);

      settxt(weight.ToString());

      private void DisplayWeight(string txt)

      {

      weightout.Text=txt;

      }

      2 軟件總結(jié)

      該程序采用串口控件SerialPort來讀取電子秤上傳的數(shù)據(jù),并用正則表達式提取重量。將正則表達式保存在配置文件,使用者可以方便的修改正則表達式,從而使軟件適配所有的電子秤。利用多線程和委托,使得讀取電子秤數(shù)據(jù)和主程序可以并行運行,方便程序設(shè)計。通過算法優(yōu)化,可以防止讀取不穩(wěn)定的重量,減少程序的誤讀。該軟件已經(jīng)在一些企業(yè)中使用,可以兼容各種型號的電子秤,重量讀取精度高且穩(wěn)定。

      參考文獻

      [1] 李春葆,曾平,喻丹丹.C#程序設(shè)計教程(第3版)[M].清華大學出版社,2015.

      [2] 魏汪洋,靳鯤鵬.C#從入門到精通[M].化學工業(yè)出版社,2011.

      The Weighing Soft of Phone Box Based on C#

      DENG Xiao-ding

      (Heyuan Polytechnic,Heyuan Guangdong? ?517000)

      Abstract:After the mobile phone packs in the box,it is necessary to weigh to prevent the more or less accessories.Analysis of the data uploaded by electronic scales through software,weight is extracted.Then the extracted weight is compared with the standard weight,and the result are saved in the server database.

      Key words:serial port;regular expression;Multithreading;weight stability;delegate

      猜你喜歡
      多線程委托串口
      淺談AB PLC串口跟RFID傳感器的通訊應用
      Java并發(fā)工具包對并發(fā)編程的優(yōu)化
      績效評價在委托管理酒店中的應用
      新聞前哨(2016年1期)2016-12-01 06:18:04
      基于多線程文件傳輸關(guān)鍵技術(shù)研究與實現(xiàn)
      網(wǎng)頁爬蟲技術(shù)的關(guān)鍵技術(shù)研究探索
      一種基于多線程的高速磁盤鏡像算法
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
      地礦測繪(2015年3期)2015-12-22 06:27:26
      治理現(xiàn)代化:委托制下的權(quán)力清單制
      招標代理中的授權(quán)委托——以案說法
      习水县| 天峻县| 无为县| 宜良县| 屯留县| 正蓝旗| 湖北省| 邹平县| 怀集县| 湄潭县| 华亭县| 库车县| 桃园县| 饶阳县| 静海县| 永年县| 塘沽区| 凤山市| 湟源县| 得荣县| 武陟县| 凤阳县| 安泽县| 涿鹿县| 于田县| 旺苍县| 荣成市| 榆树市| 吉木乃县| 贡觉县| 屏南县| 屯留县| 宜黄县| 汽车| 双牌县| 井陉县| 平顶山市| 洛扎县| 徐汇区| 扎囊县| 周至县|