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

来源:互联网 发布:淘宝上好吃的零食 编辑:程序博客网 时间:2024/05/01 22:23
点评:这个例子包括了这个控件几乎所有的操作,非常有参考价值.serialPort是在.net framework2.0中才有的东西,感觉这个东西和MSCOMM很相似.这里给出的例子是基于vb.net和CSHAPE
的,相应的可以在Cshape和c++中使用,基本上都是一样的.
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


       
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

 
using System; 
using System.IO.Ports; 
using System.Threading; 
 
public class PortChat 

     
static bool _continue; 
     
static SerialPort _serialPort; 

      
public static void Main() 
     

         
string name; 
         
string message; 
         StringComparer stringComparer 
= StringComparer.OrdinalIgnoreCase; 
         Thread readThread 
= new Thread(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 (stringComparer.Equals("quit", message)) 
             

                 _continue 
= false
             }
 
             
else
              

                 _serialPort.WriteLine( 
                     String.Format(
"<{0}>: {1}", name, message) ); 
             }
 
         }
 

          readThread.Join(); 
         _serialPort.Close(); 
     }
 

      
public static void Read() 
     

         
while (_continue) 
         

             
try
              

                 
string message = _serialPort.ReadLine(); 
                 Console.WriteLine(message); 
             }
 
             
catch (TimeoutException) { } 
         }
 
     }
 

      
public static string SetPortName(string defaultPortName) 
     

         
string portName; 

          Console.WriteLine(
"Available Ports:"); 
         
foreach (string s in SerialPort.GetPortNames()) 
         

             Console.WriteLine(
" {0}", s); 
         }
 

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

          
if (portName == ""
         

             portName 
= defaultPortName; 
         }
 
         
return portName; 
     }
 

      
public static int SetPortBaudRate(int defaultPortBaudRate) 
     

         
string baudRate; 

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

          
if (baudRate == ""
         

             baudRate 
= defaultPortBaudRate.ToString(); 
         }
 

          
return int.Parse(baudRate); 
     }
 

      
public static Parity SetPortParity(Parity defaultPortParity) 
     

         
string parity; 

          Console.WriteLine(
"Available Parity options:"); 
         
foreach (string s in Enum.GetNames(typeof(Parity))) 
         

             Console.WriteLine(
" {0}", s); 
         }
 

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

          
if (parity == ""
         

             parity 
= defaultPortParity.ToString(); 
         }
 

          
return (Parity)Enum.Parse(typeof(Parity), parity); 
     }
 

      
public static int SetPortDataBits(int defaultPortDataBits) 
     

         
string dataBits; 

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

          
if (dataBits == ""
         

             dataBits 
= defaultPortDataBits.ToString(); 
         }
 

          
return int.Parse(dataBits); 
     }
 
     
     
public static StopBits SetPortStopBits(StopBits defaultPortStopBits) 
     

         
string stopBits; 

          Console.WriteLine(
"Available Stop Bits options:"); 
         
foreach (string s in Enum.GetNames(typeof(StopBits))) 
         

             Console.WriteLine(
" {0}", s); 
         }
 

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

          
if (stopBits == ""
         

             stopBits 
= defaultPortStopBits.ToString(); 
         }
 

          
return (StopBits)Enum.Parse(typeof(StopBits), stopBits); 
     }
 

      
public static Handshake SetPortHandshake(Handshake defaultPortHandshake) 
     

         
string handshake; 

          Console.WriteLine(
"Available Handshake options:"); 
         
foreach (string s in Enum.GetNames(typeof(Handshake))) 
         

             Console.WriteLine(
" {0}", s); 
         }
 

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

          
if (handshake == ""
         

             handshake 
= defaultPortHandshake.ToString(); 
         }
 

          
return (Handshake)Enum.Parse(typeof(Handshake), handshake); 
     }
 
}

原创粉丝点击