搜档网
当前位置:搜档网 › SerialPort控件的使用

SerialPort控件的使用

SerialPort控件的使用
SerialPort控件的使用

ms-help://MS.VSCC.v80/MS.MSDN.v80/https://www.sodocs.net/doc/d64205957.html,DEVFX.v20.chs/cpref8/html/T_System_IO_P orts_SerialPort_Members.htm//串口控件

一.概述

在Visual Studio 6.0中编写串口通讯程序,一般都使用

Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/d64205957.html,技术广泛应用的今天,Visual https://www.sodocs.net/doc/d64205957.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/d64205957.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。

现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 6.0的MSComm控件和SerialPort 类设计方法的异同点。

二.SerialPort常用属性、方法和事件

1.命名空间

System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。

2.串口的通讯参数

串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别:

a.通讯端口号

[PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/d64205957.html,mPort的short 类型。通常情况下,PortName正常返回的值为COM1、COM2……,SerialPort 类最大支持的端口数突破了CommPort控件中CommPort属性不能超过16的限止,大大方便了用户串口设备的配置。

b. 通讯格式

SerialPort类对分别用[BaudRate]、[Parity]、[DataBits]、[StopBits]属性设置通讯格式中的波特率、数据位、停止位和校验位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFive、Two。

SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。

3.串口的打开和关闭

SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Open()和Close()方法。

4. 数据的发送和读取

Serial类调用重载的Write和WriteLine方法发送数据,其中WriteLine 可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法有许多,其中除了ReadExisting和ReadTo,其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常。

5.DataReceived事件

该事件类似于MSComm控件中的OnComm事件,DataReceived事件在接收到了[ReceivedBytesThreshold]设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。其中[ReceivedBytesThreshold]相当于MSComm控件的[Rthreshold]属性,该事件的用法与MsComm控件的

OnComm事件在CommEvent为comEvSend和comEvEof时是一致的。

三.SerialPort的使用

对于熟悉MSComm控件的程序设计者,SerialPort类是相当容易上手的。在进行串口通讯时,一般的流程是设置通讯端口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。

数据接收的设计方法在这里比较重要,采用轮询的方法比较浪费时间,在Visual Basic中的延时方法中一般会调用API并用DOEvents方法来处理,但程序不易控制,建议采用DataReceived事件触发的方法,合理的设置ReceivedBytesThreshold的值,若接收的是定长的数据,则将ReceivedBytesThreshold设为接收数据的长度,若接收数据的结尾是固定的字符或字符串则可采用ReadTo的方法或在DataReceived事件中判断接收的字符是否满足条件。

SerialPort类读取数据的许多方法是同步阻塞调用,尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法。

由于DataReceived事件在辅线程被引发,当收到完整的一条数据,返回主线程处理或在窗体上显示时,请注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。

四.结束语

在.NET平台下熟练使用SerialPort 类,可以很好地开发出串口通讯类程序,对于过去使用MSComm控件设计了一些通讯程序,也可以将MSComm 控件替换为SerialPort类,当然为了避免对以前的项目做大的改动,可以使用SerialPort类设计一些与MSComm控件具有相同接口的类,在今后工业控制中,SerialPort类将广泛地应用于串口通讯程序的设计中,发挥着与MSComm 控件一样的作用。

C# SerialPort运行方式

SerialPort中串口数据的读取与写入有较大的不同。由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取。一、线程实时读串口;二、事件触发方式实现。

由于线程实时读串口的效率不是十分高效,因此比较好的方法是事件触发的方式。在SerialPort 类中有DataReceived事件,当串口的读缓存有数据到达时则触发DataReceived事件,其中SerialPort.ReceivedBytesThreshold属性决定了当串口读缓存中数据多少个时才触发DataReceived事件,默认为1。

另外,SerialPort.DataReceived事件运行比较特殊,其运行在辅线程,不能与主线程中的显示数据控件直接进行数据传输,必须用间接的方式实现。如下:

SerialPort spSend; //spSend,spReceive用虚拟串口连接,它们之间可以相互传输数据。spSend 发送数据

SerialPort spReceive; //spReceive接受数据

TextBox txtSend; //发送区

TextBox txtReceive; //接受区

Button btnSend; //数据发送按钮

delegate void HandleInterfaceUpdateDelegate(string text); //委托,此为重点HandleInterfaceUpdateDelegate interfaceUpdateHandle;

public void InitClient() //窗体控件已在初始化

{

interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox); //实例化委托对象

spSend.Open(); //SerialPort对象在程序结束前必须关闭,在此说明

spReceive.DataReceived += Ports.SerialDataReceivedEventHandler(spReceive_DataReceive d);

spReceive.ReceivedBytesThreshold = 1;

spReceive.Open();

}

public void btnSend_Click(object sender,EventArgs e)

{

spSend.WriteLine(txtSend.Text);

}

public void spReceive_DataReceived(object sender,Ports.SerialDataReceivedEventArgs e) {

byte[] readBuffer = new byte[spReceive.ReadBufferSize];

spReceive.Read(readBuffer, 0, readBuffer.Length);

this.Invoke(interfaceUpdateHandle, new string[] { Encoding.Unicode.GetString(readBuffer) });

}

private void UpdateTextBox(string text)

{

txtReceive.Text = text;

}

点评:这个例子包括了这个控件几乎所有的操作,非常有参考价值.serialPort是在.net framework2.0中才有的东西,感觉这个东西和MSCOMM很相似.这里给出的例子是基于https://www.sodocs.net/doc/d64205957.html,和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 String)As 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 Integer)As 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 Integer)As 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)

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}):",

SerialPort类的源代码已经放在下面,SerialPort类是由Remon Spekreijse提供的免费串口类。CSerialPort支持线连接的串口编程,而且是基于多线程的,工作流程:

1.设置串口参数。

函数原型:

2.串口监测线程。

3.监测线程接收事件信息,再进行消息处理即可。

SerialPort类的应用

基于对话框的串口程序开发:

1.将SerialPort类添加进工程;

2.进行消息的映射;

(注意:在SerialPort类的头文件中的:

#define WM_COMM_RXCHAR WM_USER+7

需要手动进行映射)

在工程的主对话框头文件中,格式如下:

afx_msg LONG OnComm(WPARAM ch,LPARAM port);

在工程的主对话框的CPP文件中,格式如下:

BEGIN_MESSAGE_MAP(CMy20040889SerialPortTestDlg, CDialog) //{{AFX_MSG_MAP(CMy20040889SerialPortTestDlg)

ON_MESSAGE(WM_COMM_RXCHAR,OnComm)

...

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

然后在CPP中添加消息处理函数,本例中为OnComm。

例如:

LONG CTestDlg::OnComm(WPARAM ch, LPARAM port)

3.实现串口的初始化,打开/关闭串口按钮的响应函数,最后是发送信息按钮的函数实现。void CTestDlg::OnButtonOpen()

{

int nPort=m_ctrlComboComPort.GetCurSel()+1;

if(m_SerialPort.InitPort(this, nPort, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))

{

m_SerialPort.StartMonitoring();

m_bSerialPortOpened=TRUE;

}

else

{

AfxMessageBox("没有发现此串口或被占用");

m_bSerialPortOpened=FALSE;

}

GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);

VB常用控件习题与解答

常用控件习题与解答 一、填空题 1.在图片框上放置的控件称为图片框的(子)对象,而窗体是图片框的(父)对象。 2.窗体的“名称”(Name)属性只能在(属性窗口中)设置。 3.在程序中设置窗体Form1的Caption属性为"主窗体",使用的赋值语句是(Form1.Caption="主窗体")。 4.当窗体的Enabled属性为(True)时,指定窗体响应事件。 5.窗体的Unload事件是在QueryUnload事件发生之(后)发生。 6.程序中,把当前窗体移动到屏幕左上角使用的方法为(Move0,0)。 7.在窗体Form1中坐标为(1600,800)的位置上输出字符串“Visual Basic 6.0”使用的语句为(Form1.Currrentx=1600)、(Form1.Currenty=800)、和(Form1.Print "VisualBasic6.0")。 8.若使文本框有边框,需设置BorderStyle属性的值为(1)。 9.在程序运行期间,用户可以用文本框显示信息。文本框接收输入的内容的属性是 (Text)。 10.若使文本框内能够接受多行文本,则要设置Multiline属性的值为(True)。 11.要把图形文件“C:\sample\diannt.jpg”装载到图片框Picture1上,使用的语句为(Picturel.Picture=LoadPicture("C:\sample\diannt.jpg"))。 12.若使图片框自动调整大小以适应装入的图形,则要设置Autosize属性的值为(True)。 13.除了在程序使用LoadPicture函数装载图形外,还可以在设计阶段通过修改(Picture)属性装载图形。 14.若程序中要把一些文本内容输出到图片框PictureBox,应使用(Print)方法。 15.当单选按钮OpdonButton的Value属性为(False)时,表示该单选按钮处于未选中状态。 16.若使命令按钮Command1重新生效,则使用的赋值语句为(Command1.Enabled=True)。 17.若使命令按钮不能接收和响应任何事件,可以设置Visible属性的值为(False)。 18.只有控件对象的Enabled和Visible属性值都为(True)时,该控件对象才能接受焦点。 19.Tab顺序是由建立控件时的(先后顺序)确定的。 20.设置框架Frame上的文本内容需要使用(Caption)属性。 21.在框架上可以设置一组相关控件,这些控件作为框架的(子)控件,它们具有总体的激活/屏蔽特性。 22.若屏蔽框架上的控件对象,则需设置(Enabled)属性的值为False。 23.列表框ListBox中项目的序号从(0)开始,到(Listcount-1)结束。 24.要显示列表框List1中序号为3项目内容,语句为(PrintList1.List(3))。

serialport使用方法

上位机和单片机通信用16进制比较多,下面是16进制通信的例子,数据发送用Write,数据接收用ReadByte。 Imports System.IO.Ports '使用SerialPort所引用的命名空间 Public Class Form1 Dim fx() As Byte '待发送数据数组 Dim Rc() As Byte '接收数据数组 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Button1.Text = "打开串口" Then SerialPort1.PortName = "COM1" SerialPort1.Open() '串口打开与关闭 Button1.Text = "关闭串口" Button2.Enabled = True Timer1.Enabled = True Else If SerialPort1.IsOpen Then SerialPort1.Close() Button1.Text = "打开串口" Timer1.Enabled = False Button2.Enabled = False End If End Sub '待发送数据处理与发送 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i As Integer Dim n As Integer Dim Cmd As String = TextBox1.Text n = Len(Cmd) \ 2 ReDim fx(n)

窗体中的常用控件 单选3分

窗体中的常用控件单选3分 1.在计算机控件中,每个表达式前都要加上("=") 2.用于显示更新数据库中的字段的控件类型是(绑定型) 3.关于控件的叙述,(选项组不能设置为表达式)的说法正确 4.(表)不是窗体控件 5.纵栏式窗体同一时刻能显示(一条记录) 6.无论是自动创建窗体还是报表,都必须选定要创建该窗体或报表基于的(报表) 7.没有数据来源的控件类型是(非绑定型) 8.关于控件的叙述,(在窗体设计视图窗口中的工具箱中只能看到部分控件)说法错误 9.能够接受数字型数据输入的窗体控件是(文本框) 10.在教师信息输入窗口中,为职称字段提供"教授""副教授""讲师"等选项供用户直接选择,应使用控件是(组合框) 11.要用文本框来显示当前日期,应设置文本框的控件来源属性是(=Data()) 12.窗口事件是指操作窗口时所引发的事件,(取消)不属于窗口事件 13.如果想再加入控件时,控件自动与网格对其,则应在加入控件前,执行"格式(对其网格)"命令 14.当窗体的内容比较多无法在一页中全部显示时,可以使用(选项卡)进行分页,若要进行页面切换,用户只需单击选项卡上的标签即可 15.(选项组)是用来显示一组有限选项集合的控件 16.在学生表中使用"照片"字段存放相片,当使用向导为该表创建窗体时,照片字段使用的默认控件是(绑定对象框) 17.为窗体上的控件设置Tab键的顺序,应选择属性对话框中的(数据选项卡) 18.使用窗体设计视图,不能创建(报表) 19.如果在窗体上输入的数据总是取自某一个表或查询中记录的数据,或者取自某固定内容的数据,可以使用(组合框或列表框)控件 20.(只要单击选项组中所需的值,就可以为字段选定数据值)的说法正确 21.(命令按钮)代表一个或一组操作 22.(可以向组合框中输入新值,而列表框不行) 23.创建窗体的数据源不能是(报表) 24.若要求在文本框中输入文本时达到密码"*"号的显示效果,则应设置的属性是("输入掩码"属性) 25.(窗体设计器)不是窗体的组成部分 26.关于控件的叙述,(在选项组中每次只能选择一个选项)的说法是正确的 27.

SerialPort控件

SerialPort常用属性、方法和事件 名称说明 BaseStream获取SerialPort对象的基础Stream对象。BaudRate获取或设置串行波特率。 BreakState获取或设置中断信号状态。 BytesToRead获取接收缓冲区中数据的字节数。 BytesToWrite获取发送缓冲区中数据的字节数。 CDHolding获取端口的载波检测行的状态。 Container 获取IContainer,它包含Component。 (从Component继承。) CtsHolding获取“可以发送”行的状态。 DataBits获取或设置每个字节的标准数据位长度。 DiscardNull获取或设置一个值,该值指示Null 字节在端口和接收缓 冲区之间传输时是否被忽略。 DsrHolding获取数据设置就绪(DSR) 信号的状态。 DtrEnable获取或设置一个值,该值在串行通信过程中启用数据终端 就绪(DTR) 信号。 Encoding获取或设置传输前后文本转换的字节编码。Handshake获取或设置串行端口数据传输的握手协议。 IsOpen获取一个值,该值指示SerialPort 对象的打开或关闭状 态。 NewLine获取或设置用于解释ReadLine和WriteLine方法调用 结束的值。 Parity获取或设置奇偶校验检查协议。 ParityReplace获取或设置一个字节,该字节在发生奇偶校验错误时替换 数据流中的无效字节。

PortName获取或设置通信端口,包括但不限于所有可用的COM 端 口。 ReadBufferSize获取或设置SerialPort 输入缓冲区的大小。 ReadTimeout获取或设置读取操作未完成时发生超时之前的毫秒数。 ReceivedBytesThreshold获取或设置DataReceived事件发生前内部输入缓冲区 中的字节数。 RtsEnable获取或设置一个值,该值指示在串行通信中是否启用请求 发送(RTS) 信号。 Site 获取或设置Component 的 ISite。 (从 Component 继承。) StopBits获取或设置每个字节的标准停止位数。WriteBufferSize获取或设置串行端口输出缓冲区的大小。WriteTimeout获取或设置写入操作未完成时发生超时之前的毫秒数 代码例程 1、串口配置代码 Sub PortStart() 'SerialPort1.PortName = COMX'计算机串口设置X,是串口号。可以使用下列列表框选择。 SerialPort1.BaudRate = 9600 …波特率设置 SerialPort1.DataBits = 8 '数据位设置 SerialPort1.StopBits = StopBits.One '停止位设置 SerialPort1.Encoding = Encoding.UTF8 SerialPort1.DtrEnable = True SerialPort1.ReadTimeout = 500 '超时时间 SerialPort1.NewLine = vbCrLf '行结束符合 End Sub 2、计算机串口读取

用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/d64205957.html,技术广泛应用的今天,Visual https://www.sodocs.net/doc/d64205957.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/d64205957.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visual Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: 通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/d64205957.html,mPort的short类型。通常情况下,PortName正常返回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPort 属性不能超过16的限止,大大方便了用户串口设备的配置。 通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parity 类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFive、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。

各类光纤接口类型的区别与图示

各类光纤接口类型的区别与图示 光纤的接口比较复杂,在项目的过程中有时候确实很容易弄错,为了方便自己和大家的工作,特整理了以下资料: 光纤接头类型主要可以分为以下几种: FC 圆型带螺纹(配线架上用的最多) ST 卡接式圆型 SC 卡接式方型(光纤收发器用的较多) LC 卡接式方形,比SC略小(光纤交换机用的较多) MT-RJ 方型,一头光纤收发一体 如下图所示: 光纤模块主要分为以下两种,一般都支持热插拔: GBIC(Giga Bitrate Interface Converter)使用的光纤接口多为SC或ST型 SFP小型封装GBIC,使用的光纤为LC型 光纤单模和多模的标识: L:表示单模,波长1310纳米; LH:表示单模长距,波长1310纳米,1550纳米; SM:表示多模,波长850纳米;

SX/LH :表示可以使用单模或多模光纤; 单模光纤的传输距离要比多模光纤远。 下面,是一些接线图,方便大家查看: 另外,如下图所示,在表示尾纤接头的标注中,我们常能见到“FC/PC”,“SC/APC”等,其含义如下:

“/”前面部分表示尾纤的连接器型号: “SC”接头是标准方型接头,采用工程塑料,具有耐高温,不容易氧化优点。传输设备侧光接口一般用SC 接头 “LC”接头与SC接头形状相似,较SC接头小一些。 “FC”接头是金属接头,一般在ODF侧采用,金属接头的可插拔次数比塑料要多。 “/”后面表明光纤接头截面工艺,即研磨方式: “PC” 微球面研磨抛光,在电信运营商的设备中应用得最为广泛,其接头截面是平的,。 “UPC”的衰耗比“PC”要小,一般用于有特殊需求的设备,一些国外厂家ODF架内部跳纤用的就是FC/UPC,主要是为提高ODF设备自身的指标。 “APC”呈8度角并做微球面研磨抛光,可改善电视信号的质量。 版权所有? mcsrainbow,保留所有原创日志的权利。转载请注明出处:https://www.sodocs.net/doc/d64205957.html, 。 这篇文章发表于2010/01/25 15:49,属于Network分类。你可以通过RSS 2.0来跟踪这篇文章。你还可以对它进行评论。

串口通信MSComm控件和SerialPort

一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/d64205957.html,技术广泛应用的今天,Visual S https://www.sodocs.net/doc/d64205957.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/d64205957.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计 串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visu al Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: ?通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/d64205957.html,mPort的short类型。通常情况下,PortName正常返 回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPor t属性不能超过16的限止,大大方便了用户串口设备的配置。 ?通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parit y类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFi ve、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化Seri alPort 类的新实例。 3.串口的打开和关闭 SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Op en()和Close()方法。 4. 数据的发送和读取 SerialPort类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法有许多,其中除了ReadExisting(读取SerialPort对象的流和输入缓冲区中所有立即可用的字节)和ReadTo(一直读取到输入缓冲区中的指定value 的字符串),其余的方法

四大类插孔接口详解

四大类插孔接口详解 编辑整理—王兆贵 在平板电视市场高速发展的同时,电视背部接口也引起了消费者的广泛关注。作为数字电视,现在不仅仅是用来观看电视,很多用户都开始用它与数码相机、硬盘、电脑、微软Xbox 360、索尼的PS3和任天堂Wii游戏机等设备进行链接,这时对接口就有一些要求,像HDMI接口、USB接口都成为了高清平板电视的主流接口。到底哪些为目前液晶、等离子电视的必备接口呢?下面笔者就从必备、使用、可选、趋势四大方面对接口进行了简单解析,一起来看看吧。 平板电视四大类接口详解-王兆贵 四大类接口 ● 必备接口: ·HDMI接口:是最新的高清数字音视频接口,收看高清节目,只有在HDMI通道下,才能达到最佳的效果,是高清平板电视必须具有的基本接口。 ·DVI接口:是数字传输的视频接口,可将数字信号不加转换地直接传输到显示器中。(王兆贵1157440560) ·色差分量接口:是目前各种视频输出接口中较好的一种。 ·AV接口:AV接口实现了音频和视频的分离传输,避免了因音/视频混合干扰而导致的图像质量下降。

·RF输入接口:是接收电视信号的射频接口,将视频和音频信号相混合编码输出,会导致信号互相干扰,画质输出质量是所有接口中最差的。 ● 实用接口:(王兆贵1157440560) ·光纤接口:使用这种接口的平板电视不通过功放就可以直接将音频连接到音箱上,是目前最先进的音频输出接口。 ·RS-232接口:是计算机上的通讯接口之一,用于调制解调器、打印机或者鼠标等外部设备连接。带此接口的电视可以通过这个接口对电视内部的软件进行维护和升级。 ·VGA接口:是源于电脑显卡上的接口,显卡都带此种接口。VGA就是将模拟信号传输到显示器的接口。 ·S端子:是AV端子的改革,在信号传输方面不再对色度与亮度混合传输,这样就避免了设备内信号干扰而产生的图像失真,能够有效地提高画质的清晰程度。 ● 可选接口: ·USB接口:是目前使用较多的多媒体辅助接口,可以连接U盘、移动硬盘等设备。 ·蓝牙接口:是一种短距的无线通讯技术,不需要链接实现了无线听音乐,无线看电视。 ·耳机接口:使用电视无线耳机可在电视静音的情况下,自由欣赏精彩节目。 ● 趋势接口: ·DisplayPort接口:可提供的带宽就高达10.8Gb/s,也允许音频与视频信号共用一条线缆传输,支持多种高质量数字音频。 ● 必备接口:什么是HDMI接口?(王兆贵1157440560) HDMI是新一代的多媒体接口标准,全称是High-Definition Multimedia Interface,中文意思为高清晰多媒体接口,该标准由索尼、日立、松下、飞利浦、东芝、Silicon image、Thomson (RCA)等7家公司在2002年4月开始发起的。其产生是为了取代传统的DVD碟机、电视及其它视频输出设备的已有接口,统一并简化用户终端接线,并提供更高带宽的数据传输速度和数字化无损传送音视频信号。

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

实验二 常用控件的使用

实验二常用控件的使用 一、实验目的 (1)掌握常用控件的属性和事件,掌握常用控件的使用,掌握常用控件编程; (2)熟悉并创建Windows窗体应用程序的过程; (3)掌握基于常用控件:MenuStrip、ToolStrip、StatusStrip、Panel、TreeView及 Splitter等构建类似资源管理器的主界面; (4)掌握Timer、ListView、ComboBox、DatePicker等常用控件的属性及应用。 (5)掌握动态构建TreeView节点的方法。 二、实验环境 ?PC机,Windows XP(2000)操作系统及以上; ?Visual Studio 2010(或2008)。 三、实验要求 (1)要求创建类似登录界面,并将登录时输入的信息:用户名传递给主窗体; (2)要求主窗体设置为多文档窗体; (3)要求实现动态创建TreeView控件; (4)实现TreeView节点、MenuStrip、ToolStrip单击事件; (5)实现在StatusStrip上显示登录的用户名、系统当前的日期、实时的时间。 四、实验内容 1、创建基于Windows窗体的应用程序项目; 2、创建登录窗体: (1)用户名和密码输入信息; (2)登录、退出等按钮; (3)实现按钮的单击事件; 3、主窗体的创建 (1)主窗体中要求实现:菜单、工具栏、功能树、状态栏; (2)功能树的创建要求动态创建,建议采用递归算法方式实现,建议树节点 参考信息如下:

(3)主窗体布局参考资源管理的方式实现,具体的布局方式参考下图。 4、数据的模拟 (1)功能树部分的数据可采用二维数组方式; (2)菜单至少建立2个以上菜单项; (3)工具栏至少建立两个以上工具栏项目; 5、部分参考代码: (1) 将字符串类型的窗体名称转换成Form类型 (2) 在主界面显示单文档窗体的参考代码 其中:this代表MDI窗体; GetForm为在(1)中定义的函数。

SerialPort控件的使用

ms-help://MS.VSCC.v80/MS.MSDN.v80/https://www.sodocs.net/doc/d64205957.html,DEVFX.v20.chs/cpref8/html/T_System_IO_P orts_SerialPort_Members.htm//串口控件 一.概述 在Visual Studio 6.0中编写串口通讯程序,一般都使用 Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/d64205957.html,技术广泛应用的今天,Visual https://www.sodocs.net/doc/d64205957.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/d64205957.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 6.0的MSComm控件和SerialPort 类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: a.通讯端口号

vb常用控件习题(含问题详解)

1.下列控件中没有Caption属性的是________。 A)框架B)列表框C)复选框D)单选按钮 2.复选框的Value 属性为1 时,表示________。 A)复选框未被选中B)复选框被选中 C)复选框有灰色的勾D)复选框操作有误 3.用来设置斜体字的属性是________。 A)FontItalic B)FontBold C)FontName D)FontSize 4.将数据项“China”添加到列表框List1中成为第二项应使用________语句。 A)List1.AddItem “China”,1 B)List1.AddItem “China ”, 2 C)List1.AddItem 1,“China”D)List1.AddItem 2,“China ” 5.引用列表框List1最后一个数据项,应使用________语句。 A)List1.List(List1.ListCount)B)List1.List(ListCount) C)List1.List(List1.ListCount-1)D)List1.List(ListCount-1) 6.假如列表框List1有四个数据项,那么把数据项“China”添加到列表框的最后,应使用________语句。 A)List1.AddItem 3,“China ” B)List1.AddItem “China ”, List1.ListCount-1 C)List1.AddItem “China ”, 3 D)List1.AddItem “China”,List1.ListCount 7.执行了下面的程序后,列表框中的数据项有________。 Private Sub Form_Click() For i = 1 to 6 List1.AddItem i Next i For i = 1 to 3 List1.RemoveItem i Next i End Sub A)1,5,6 B)2,4,6 C )4,5,6 D)1,3,5 8.如果列表框List1中没有选定的项目,则执行 List1.RemoveItem List1.ListIndex 语句的结果是________。 A)移去第一项B)移去最后一项 C)移去最后加入列表中的一项D)以上都不对 9.如果列表框List1中只有一个项目被用户选定,则执行 Debug.Print List1.Selected(List1.ListIndex)语句的结果是________。 A)在Debug窗口输出被选定的项目的索引值 B)在Debug窗口输出True C)在窗体上输出被选定的项目的索引值 D)在窗体上输出True 10.在窗体上画一个名称为List1的列表框,一个名称为Label1的标签,列表框中显示若干城市的名称。但单击列表框中的某个城市名时,该城市名从列表框中消失,并在标签中显示出来。下列能正确实现上述操作的程序是______。 A)Private Sub List1_Click()

光模块接口区分

三、光纤接口的主要类型: 光纤接口是用来连接光纤线缆的物理接口,通常有SC、LC、FC、ST等几种类型。不同的光模块对应的光纤接口不尽相同。1×9及GBIC光模块通常采用SC光纤接口,而SFP 和XFP封装形式的光模块通常采用LC光纤接口。 LC、SC、FC等均指外形尺寸,PC、APC、UPC都是指光纤连接器的插针端面。 装置在光纤末端使两根光纤实现光信号传输的连接器,光信号通过时只引入很低衰减的装置。 光纤连接器,是光纤与光纤之间进行可拆卸(活动)连接的器件,它把光纤的两个端面精密对接起来,以使发射光纤输出的光能量能最大限度地耦合到接收光纤中去,并使由于其介入光链路而对系统造成的影响减到最小,这是光纤连接器的基本要求。在一定程度上,光纤连接器影响了光传输系统的可靠性和各项性能。 分类 光纤连接器按传输媒介的不同可分为常见的硅基光纤的单模、多模连接器,还有其它如以塑胶等为传输媒介的光纤连接器;按连接头结构形式可分为:FC、SC、ST、LC、D4、DIN、MU、MT等等各种形式。其中,ST连接器通常用于布线设备端,如光纤配线架、光纤模块等;而SC和MT连接器通常用于网络设备端。按光纤端面形状分有FC、PC(包括SPC 或UPC)和APC;按光纤芯数划分还有单芯和多芯(如MT-RJ)之分。光纤连接器应用广泛,品种繁多。在实际应用过程中,我们一般按照光纤连接器结构的不同来加以区分。以下是一些目前比较常见的光纤连接器: FC型光纤连接器 这种连接器最早是由日本NTT研制。FC是Ferrule Connector的缩写,表明其外部加强方式是采用金属套,紧固方式为螺丝扣。最早,FC类型的连接器,采用的陶瓷插针的对接端面是平面接触方式(FC)。此类连接器结构简单,操作方便,制作容易,但光纤端面对微尘较为敏感,且容易产生菲涅尔反射,提高回波损耗性能较为困难。后来,对该类型连接器做了改进,采用对接端面呈球面的插针(PC),而外部结构没有改变,使得插入损耗和回波损耗性能有了较大幅度的提高。 SC型光纤连接器 这是一种由日本NTT公司开发的光纤连接器。其外壳呈矩形,所采用的插针与耦合套筒的结构尺寸与FC型完全相同。其中插针的端面多采用PC或APC型研磨方式;紧固方式是采用插拔销闩式,不需旋转。此类连接器价格低廉,插拔操作方便,介入损耗波动小,

SerialPort与MSComm 详解

VB,C# MSComm控件的用法与详细介绍 MSComm 是控件 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API 函数,而且在VC、VB、Delphi与C#等语言中均可使用。Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。 1.MSComm控件两种处理通讯的方式 MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。 1.1 事件驱动方式 事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。 1.2 查询方式 查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。 2.MSComm 控件的常用属性 MSComm控件有很多重要的属性,但首先必须熟悉几个属性。 CommPort 设置并返回通讯端口号。 Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。 Input 从接收缓冲区返回和删除字符。 Output 向传输缓冲区写一个字符串。 下面分别描述:

C# SerialPort串口控件的使用

C# SerialPort串口控件的使用 2010-10-27 11:07 现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据传输到另一台计算机上,那么利用串口通信就可以实现。运行本程序,在“发送数据”文本框中输入要传送的数据,单击【发送】按钮,将传送的数据发送到所选择的端口号中;单击【接收】按钮,传递的数据被接收到“接收数据”文本框中。如图13.1所示。 技术要点 在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等。下面主要介绍该类的主要属性(表13.1)和方法(表13.2)。 表13.1 SerialPort类的常用属性名称说明 BaseStream 获取SerialPort 对象的基础Stream 对象 BaudRate 获取或设置串行波特率 BreakState 获取或设置中断信号状态 BytesToRead 获取接收缓冲区中数据的字节数 BytesToWrite 获取发送缓冲区中数据的字节数 CDHolding 获取端口的载波检测行的状态 CtsHolding 获取“可以发送”行的状态 DataBits 获取或设置每个字节的标准数据位长度 DiscardNull 获取或设置一个值,该值指示Null 字节在端口和接收缓冲区之间传输时是否被忽略 DsrHolding 获取数据设置就绪(DSR) 信号的状态 DtrEnable 获取或设置一个值,该值在串行通信过程中启用数据终端就绪(DTR) 信号 Encoding 获取或设置传输前后文本转换的字节编码 Handshake 获取或设置串行端口数据传输的握手协议 IsOpen 获取一个值,该值指示SerialPort 对象的打开或关闭状态 NewLine 获取或设置用于解释ReadLine( )和WriteLine( )方法调用结束的值 Parity 获取或设置奇偶校验检查协议续表 名称说明 ParityReplace 获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节 PortName 获取或设置通信端口,包括但不限于所有可用的COM 端口ReadBufferSize 获取或设置SerialPort 输入缓冲区的大小 ReadTimeout 获取或设置读取操作未完成时发生超时之前的毫秒数 ReceivedBytesThre shold 获取或设置DataReceived 事件发生前内部输入缓冲区中的字节数 RtsEnable 获取或设置一个值,该值指示在串行通信中是否启用请求发送

接口的定义及使用

1、课程名称:接口的定义及使用 2、知识点 2.1、上次课程的主要知识点 1、抽象类的设计是在普通类之上的抽象类; 2、抽象类关键的问题就是约定了子类必须要覆写的抽象方法; 3、抽象类的使用原则: ·抽象类必须有子类,子类利用extends关键字来继承抽象类,一个子类只能够继承一个父类; ·抽象类的子类(如果不是抽象类),那么必须要覆写抽象类中的全部抽象方法; ·抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。 2.2、本次预计讲解的知识点 1、接口的基本定义以及使用形式; 2、与接口有关的设计模式的初步认识; 3、接口与抽象类的区别。

3、具体内容(★★★★★★★★★★★★★★) 接口与抽象类相比,接口的使用几率是最高的,所有的设计几乎都是围绕着接口进行的,但是要想把接口彻底闹明白,需要很长一段时间。 3.1、接口的基本概念 接口是一种特殊的类,但是在接口里面的组成与类不同,比类的组成部分简单,主要由抽象方法和全局常量所组成。而接口使用interface关键字来定义。 范例:定义一个接口 当一个接口定义完成之后,需要遵循如下的步骤进行接口的使用: ·接口一定要定义子类,子类利用implements关键字来实现接口,一个子类可以同时实现多个接口; |- 秒杀抽象类的单继承局限,一个抽象类只能够被一个子类所继承; ·接口的子类(如果不是抽象类)那么必须覆写接口中的全部抽象方法; ·接口的对象利用子类对象的向上转型进行实例化操作。 范例:使用接口

但是这个时候会有这样一种比较神奇的操作。 注意:关于接口的组成描述 接口里面在定义的时候就已经明确的给出了开发要求:抽象方法和全局常量,所以以下两种接口的定义从本质上讲是完全一样的。 如果在定义接口方法的时候没有使用public ,那么本质上也不是default 权限,而默认就是public 。 很多时候为了防止一些开发者概念不清晰,所以以后建议大家在定义接口的时候永远都写上public ,但是一般都不会去写abstract 。 现在程序之中出现有类、抽象类、接口,这几者之间的联系就需要注意好了。 一个普通类如果要实现接口又要求继承抽象类,则一定采用先extends 继承抽象类,再implements 实现接口。格式: 范例:观察子类的多继承

C#使用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程序 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/d64205957.html,技术广泛应用的今天,Visual S https://www.sodocs.net/doc/d64205957.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/d64205957.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计 串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visu al Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: ?通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/d64205957.html,mPort的short类型。通常情况下,PortName正常返 回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPor t属性不能超过16的限止,大大方便了用户串口设备的配置。 ?通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parit y类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFi ve、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化Seri alPort 类的新实例。 3.串口的打开和关闭 SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Op en()和Close()方法。 4. 数据的发送和读取

相关主题