移植VB維護程序到mobile下
Windows CE現在在嵌入式系統應用已經(jīng)很多了,以前使用EVC的開(kāi)發(fā)多些,開(kāi)發(fā)難度大周期長(cháng)。VS2005退出后,CF.net2.0對于VB.NET支持很好,使將原來(lái)的基于windows平臺的Visual Basic維護程序移植到CE上面提供呢可能,本文將就Visual Basic維護程序移植到CE上面做一個(gè)試驗性質(zhì)的開(kāi)發(fā)。
本文引用地址:http://dyxdggzs.com/article/201610/305854.htmVisual Basic因為其界面開(kāi)發(fā)快速,掌握難度低,在嵌入式系統的程序員中應用很廣,比如說(shuō)本人,以前經(jīng)常做些單片機的開(kāi)發(fā),那么一些系統參數或規約的驗證,就會(huì )隨手寫(xiě)個(gè)Visual Basic程序驗證下,以前是VB6.0,后來(lái)VB.net多些,VB的開(kāi)發(fā)擴展性好,做界面簡(jiǎn)單快速,而且方便在調試中修改程序,在驗證單片機的程序時(shí)是再方便不過(guò)了。
最早的人機界面、維護參數基本是通過(guò)串口通訊,在計算機或便攜筆記本上面顯示,設置。隨著(zhù)嵌入式系統發(fā)展,用戶(hù)要求越來(lái)越高,現在好多的設備上面要有顯示參數和狀態(tài)的液晶,對于一些高檔設備,更是需要復雜的用戶(hù)界面,如果能將設備的維護和狀態(tài)顯示程序移植到基于Windows CE的系統平臺上面去,就會(huì )提供快速的軟件開(kāi)發(fā),用戶(hù)界面會(huì )更加美觀(guān),開(kāi)發(fā)速度大幅提供,方便嵌入式系統工程師的開(kāi)發(fā)工作,同時(shí)基于windows CE的PDA掌上電腦,方便攜帶,待機時(shí)間更加長(cháng),方便現場(chǎng)維護人員和分布式系統的設置和分析工作。
講原有的VB.net移植到winCE,比較簡(jiǎn)單,如果沒(méi)有使用第三方的windows平臺的控件,可以很簡(jiǎn)單的移植過(guò)去,窗體可以很簡(jiǎn)單的復制過(guò)去,代碼基本是可以復用的,如果是VB6的程序,移植的難度會(huì )大些,窗體部分設計需要重新設置,VB.net的窗體界面和VB的區別很大,可以先按照老的程序的界面設置,在新的程序里面設置,代碼方面的移植難度不大,基本的語(yǔ)句還是一樣的,VB.NET支持界面上的元素可以全新創(chuàng )建,不用想VB那樣,從窗口的控件數組里面派生了,而且vb.net可以在運行中定義事件的處理函數,這個(gè)對VB是很大的改進(jìn),是自動(dòng)根據規約或界面設置進(jìn)行處理變得方便快捷。
對于嵌入式系統來(lái)說(shuō)和外界的通訊主要有幾個(gè)方面,串口(RS485、RS232),網(wǎng)絡(luò )。網(wǎng)絡(luò )方面的程序區別不是很大,串口方面,windows下面VB程序員一般是使用MSCOMM來(lái)進(jìn)行通訊,微軟在CF.NET2.0里面提供了新的串口開(kāi)發(fā)支持SerialPort,比1.0和EVC更加快速。另外VB.NET支持多線(xiàn)程,使串口開(kāi)發(fā)變得容易。
下面提供一個(gè)我自己實(shí)現的串口多線(xiàn)程類(lèi)。
Imports System.IO.Ports
Imports System.Threading
'232串口操作類(lèi)
'2006 6 20 V1.0 by 趙力釗
'使用說(shuō)明
'使用前調用 Init 退出程序或關(guān)閉串口使用 Close
'SendDate 發(fā)送數據到串口 返回發(fā)送成功與否
'判斷ComStatus 是否為2 數據是否準備好 準備好 調用 ReadData 傳空的BYTE數組(可以Redim的),返回數據長(cháng)度
Public Class RS232TXClass
Shared m_SerialPort As New SerialPort
Shared readThread As Thread = New Thread(AddressOf Read)
Public ComSetting As String '9600,n,8,1
Public ComPort As Integer
Public ComType As Integer '硬件設置
Dim strBaudRate As String
Dim Parity As String
Dim Handshake As Integer
Dim DataBits As Integer
Dim PortName As String
Dim StopBits As Integer
Shared _continue As Boolean
Shared bRxLock As Boolean
Shared iRxLen As Integer
Shared iRxTime As Integer
Shared bRxStatus As Byte
Const READOK = 2
Const READOUTTIME = 4
Const READLOCK = 8
Const COMOK = 1
Const COMERROR = 0
Const COMFREE = 16
'輸入函數 setting 串口設置如 9600,n,8,1 Type 握手協(xié)議 0 沒(méi)有握手協(xié)議 Port 串口號
Public Sub Init(ByVal Setting As String, ByVal Type As Integer, ByVal Port As Integer)
ComSetting = Setting
ComPort = Port
ComType = Type
ComInit()
End Sub
Sub ComInit()
Dim iStart As Integer
Dim iTemp As Integer
Dim bDate() As Byte
m_SerialPort = New System.IO.Ports.SerialPort()
iStart = InStr(1, ComSetting, ,)
strBaudRate = Mid(ComSetting, 1, iStart - 1)
iTemp = InStr(iStart + 1, ComSetting, ,)
Parity = Mid(ComSetting, iStart + 1, iTemp - iStart - 1)
iStart = iTemp + 1
iTemp = InStr(iStart, ComSetting, ,)
DataBits = CInt(Mid(ComSetting, iStart, iTemp - iStart))
iStart = iTemp + 1
StopBits = CInt(Mid(ComSetting, iStart, Len(ComSetting) - iStart + 1))
m_SerialPort.BaudRate = strBaudRate
Select Case Parity
Case n
m_SerialPort.Parity = IO.Ports.Parity.None
Case N
m_SerialPort.Parity = IO.Ports.Parity.None
Case e
m_SerialPort.Parity = IO.Ports.Parity.Even
Case E
m_SerialPort.Parity = IO.Ports.Parity.Even
Case o
m_SerialPort.Parity = IO.Ports.Parity.Odd
Case O
m_SerialPort.Parity = IO.Ports.Parity.Odd
End Select
m_SerialPort.DataBits = DataBits
Select Case StopBits
Case 0
m_SerialPort.StopBits = IO.Ports.StopBits.None
Case 1
m_SerialPort.StopBits = IO.Ports.StopBits.One
Case 2
m_SerialPort.StopBits = IO.Ports.StopBits.Two
End Select
Select Case ComType
Case 0
m_SerialPort.Handshake = IO.Ports.Handshake.None
評論