×

VisualStudio2005中serialPort控件访问串口实例[转载]

Kalet Kalet 发表于2009-03-20 12:00:13 浏览338 评论0

抢沙发发表评论

点评:这个例子包括了这个控件几乎所有的操作,非常有参考价值.serialPort是在.net framework2.0中才有的东西,感觉这个东西和MSCOMM很相似.这里给出的例子是基于vb.net和CSHAPE
的,相应的可以在Cshape和c++中使用,基本上都是一样的.
VisualStudio2005中serialPort控件访问串口实例[转载]

Imports System 
Imports System.IO.Ports 
Imports System.Threading 
 
Public Class PortChat 
     
Shared _continue As Boolean
      
Shared _serialPort As SerialPort 

      
Public Shared Sub Main() 
         
Dim name As String
          
Dim message As String
          
Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase 
         
Dim readThread As Thread = New Thread(AddressOf Read) 

          
' Create a new SerialPort object with default settings.
          _serialPort = New SerialPort() 

          
' Allow the user to set the appropriate properties.
          _serialPort.PortName = SetPortName(_serialPort.PortName) 
         _serialPort.BaudRate 
= SetPortBaudRate(_serialPort.BaudRate) 
         _serialPort.Parity 
= SetPortParity(_serialPort.Parity) 
         _serialPort.DataBits 
= SetPortDataBits(_serialPort.DataBits) 
         _serialPort.StopBits 
= SetPortStopBits(_serialPort.StopBits) 
         _serialPort.Handshake 
= SetPortHandshake(_serialPort.Handshake) 

          
' Set the read/write timeouts
          _serialPort.ReadTimeout = 500 
         _serialPort.WriteTimeout 
= 500 

          _serialPort.Open() 
         _continue 
= True
          readThread.Start() 

          Console.Write(
"Name: "
         name 
= Console.ReadLine() 

          Console.WriteLine(
"Type QUIT to exit"

          
While (_continue) 
             message 
= Console.ReadLine() 

              
If sComparer.Equals("quit", message) Then
                  _continue 
= False
              
Else
                  _serialPort.WriteLine( _ 
                     
String.Format("<{0}>: {1}", name, message)) 
             
End If
          
end while

           readThread.Join() 
         _serialPort.Close() 
     
End Sub


       
Public Shared Sub Read() 
         
While (_continue) 
             
Try
                  
Dim message As String = _serialPort.ReadLine() 
                 Console.WriteLine(message) 
             
Catch ex As TimeoutException 
                 
' Do nothing
              End Try
          
End While
      
End Sub


       
Public Shared Function SetPortName(ByVal defaultPortName As StringAs String
          
Dim newPortName As String

           Console.WriteLine(
"Available Ports:"
         
Dim s As String
          
For Each s In SerialPort.GetPortNames() 
             Console.WriteLine(
" {0}", s) 
         
Next s 

          Console.Write(
"COM port({0}): ", defaultPortName) 
         newPortName 
= Console.ReadLine() 

          
If newPortName = "" Then
              newPortName 
= defaultPortName 
         
End If
          
Return newPortName 
     
End Function

VisualStudio2005中serialPort控件访问串口实例[转载]
       
Public Shared Function SetPortBaudRate(ByVal defaultPortBaudRate As IntegerAs Integer
          
Dim newBaudRate As String

           Console.Write(
"Baud Rate({0}): ", defaultPortBaudRate) 
         newBaudRate 
= Console.ReadLine() 

          
If newBaudRate = "" Then
              newBaudRate 
= defaultPortBaudRate.ToString() 
         
End If

           
Return Integer.Parse(newBaudRate) 
     
End Function


       
Public Shared Function SetPortParity(ByVal defaultPortParity As Parity) As Parity 
         
Dim newParity As String

           Console.WriteLine(
"Available Parity options:"
         
Dim s As String
          
For Each s In [Enum].GetNames(GetType(Parity)) 
             Console.WriteLine(
" {0}", s) 
         
Next s 

          Console.Write(
"Parity({0}):", defaultPortParity.ToString()) 
         newparity 
= Console.ReadLine() 

          
If newparity = "" Then
              newparity 
= defaultPortParity.ToString() 
         
End If

           
Return CType([Enum].Parse(GetType(Parity), newParity), Parity) 
     
End Function


       
Public Shared Function SetPortDataBits(ByVal defaultPortDataBits As IntegerAs Integer
          
Dim newDataBits As String

           Console.Write(
"Data Bits({0}): ", defaultPortDataBits) 
         newDataBits 
= Console.ReadLine() 

          
If newDataBits = "" Then
              newDataBits 
= defaultPortDataBits.ToString() 
         
End If

           
Return Integer.Parse(newDataBits) 
     
End Function


       
Public Shared Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits 
         
Dim newStopBits As String

           Console.WriteLine(
"Available Stop Bits options:"
         
Dim s As String
          
For Each s In [Enum].GetNames(GetType(StopBits)) 
             Console.WriteLine(
" {0}", s) 
         
Next s 

          Console.Write(
"Stop Bits({0}):", defaultPortStopBits.ToString()) 
         newStopBits 
= Console.ReadLine() 

          
If newStopBits = "" Then
              newStopBits 
= defaultPortStopBits.ToString() 
         
End If

           
Return CType([Enum].Parse(GetType(StopBits), newStopBits), StopBits) 
     
End Function


       
Public Shared Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake 
         
Dim newHandshake As String

           Console.WriteLine(
"Available Handshake options:"
         
Dim s As String
          
For Each s In [Enum].GetNames(GetType(Handshake)) 
             Console.WriteLine(
" {0}", s) 
         
Next s 

          Console.Write(
"Stop Bits({0}):", defaultPortHandshake.ToString()) 
         newHandshake 
= Console.ReadLine() 

          
If newHandshake = "" Then
              newHandshake 
= defaultPortHandshake.ToString() 
         
End If

           
Return CType([Enum].Parse(GetType(Handshake), newHandshake), Handshake) 
     
End Function
 
End Class
VisualStudio2005中serialPort控件访问串口实例[转载]
 


群贤毕至

访客