搜档网
当前位置:搜档网 › C# SerialPort串口控件的使用

C# SerialPort串口控件的使用

C# SerialPort串口控件的使用
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 获取或设置一个值,该值指示在串行通信中是否启用请求发送

(RTS) 信号

StopBits 获取或设置每个字节的标准停止位数

WriteBufferSize 获取或设置串行端口输出缓冲区的大小

WriteTimeout 获取或设置写入操作未完成时发生超时之前的毫秒数

表13.2 SerialPort类的常用方法方法名称说明

Close 关闭端口连接,将IsOpen 属性设置为False,并释放内部Stream 对象

Open 打开一个新的串行端口连接

Read 从SerialPort 输入缓冲区中读取

ReadByte 从SerialPort 输入缓冲区中同步读取一个字节

ReadChar 从SerialPort 输入缓冲区中同步读取一个字符

ReadLine 一直读取到输入缓冲区中的NewLine 值

ReadTo 一直读取到输入缓冲区中指定value 的字符串

Write 已重载。将数据写入串行端口输出缓冲区

WriteLine 将指定的字符串和NewLine 值写入输出缓冲区

注意:用跳线使串口的第2、3针连接,可以在本地计算机上实现串口通信,所以,通过串口的第2、3针的连接可以对程序进行检测。串口截面图如图13.2所示。

图13.2 串口截面图

实现过程

(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。

(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。

(3)主要程序代码。

private void button1_Click(object sender, EventArgs e)

{

serialPort1.PortName = "COM1";

serialPort1.BaudRate = 9600;

serialPort1.Open();

byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);

string str = Convert.ToBase64String(data);

serialPort1.WriteLine(str);

MessageBox.Show("数据发送成功!","系统提示");

}

private void button2_Click(object sender, EventArgs e)

{

byte[] data = Convert.FromBase64String(serialPort1.ReadLine());

textBox2.Text = Encoding.Unicode.GetString(data);

serialPort1.Close();

MessageBox.Show("数据接收成功!","系统提示");

}

举一反三

根据本实例,读者可以实现以下功能。

远程监控对方计算机屏幕。

下位机控制程序。

实例419通过串口关闭对方计算机

实例说明

在网络应用程序中,主要通过网卡实现数据的传输,因此可以利用套接字技术实现远程关闭计算机。如果计算机中没有安装网卡,该如何实现远程关闭计算机呢?本例实现了利用串口关闭对方计算机,程序运行结果如图13.3所示。

技术要点

本实例使用SerialPort类的属性和方法,请参见实例“通过串口发送数据”。下面主要介绍SerialPort类的DataReceived 事件,DataReceived 事件为本实例的主要使用技术。DataReceived 事件表示将处理SerialPort 对象的数据接收事件的方法。串行接收事件可以由SerialData 枚举中的任何项引起,是否引发此事件由操作系统决定,所以不一定会报告所有奇偶校验错误。

注意:本实例从开发到测试,都是由本地计算机完成的,用户只需要使用跳线将串口的第2、3针连接,可以在本地计算机上实现串口通信。跳线连接请参见图13.2。

实现过程

(1)新建一个项目,命名为Ex13_02,默认窗体为Form1。

(2)在Form1窗体中,主要添加两个Button控件,分别用于打开通信串口和关闭对方计算机。

(3)主要程序代码。

private void button1_Click(object sender, EventArgs e)

{

//打开串口

serialPort1.PortName = "COM1";

serialPort1.Open();

button1.Enabled = false;

button2.Enabled = true;

} //数据接收事件,等待接收关机命令

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

byte[] data = Convert.FromBase64String(serialPort1.ReadLine());

string str = Encoding.Unicode.GetString(data);

serialPort1.Close();

if (str == "关机")

{

Process p = new Process();

p.StartInfo.FileName = "cmd.exe";

https://www.sodocs.net/doc/5e1004147.html,eShellExecute = false;

p.StartInfo.RedirectStandardInput = true;

p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.RedirectStandardError = true;

p.StartInfo.CreateNoWindow = true;

p.Start();

p.StandardInput.WriteLine("shutdown /s");

p.StandardInput.WriteLine("exit");

}

} //发送关机命令

private void button2_Click(object sender, EventArgs e)

{

if (button2.Text == "关闭计算机")

{

//发送关机命令数据

byte[] data = Encoding.Unicode.GetBytes("关机");

string str = Convert.ToBase64String(data);

serialPort1.WriteLine(str);

button2.Text = "取消关机";

}

else

{

button2.Text = "关闭计算机";

button1.Enabled = true;

button2.Enabled = false;

//取消关机

Process p = new Process();

p.StartInfo.FileName = "cmd.exe";

https://www.sodocs.net/doc/5e1004147.html,eShellExecute = false;

p.StartInfo.RedirectStandardInput = true;

p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.RedirectStandardError = true;

p.StartInfo.CreateNoWindow = true;

p.Start();

p.StandardInput.WriteLine("shutdown /a");

p.StandardInput.WriteLine("exit");

}

}

在我的测试软件中发现一个问题,就是当发送数据小于或等于8位时,一切正常,如果大于8为字节,则在datareceived事件中接收到的数据会分成两段,第一段为8位,第二段为剩下的字节,很奇怪,在msdn中讲到不能保证每次发送的数据都能正确接收到,需要参照BytesToRead属性来确定要读取的数据量,所以我想出来的解决办法为:

int DataLength=serialPort.BytesToRead;

int i=0;

StringBuilder sb=new StringBuilder();

while(i

{

byte[] ds=new byte[1024];

int len=serialPort.Read(ds,0,1024);

sb.Append(Encoding.Ascii.GetString(ds,0,len));

i+=len;

}

Console.Write(sb,ToString());

这种奇怪的方法可以解决问题,后来想想应该是串口的工作方式决定的也有可能,期待其他的解决方式。

来源地:https://www.sodocs.net/doc/5e1004147.html,/jackeyrain/blog/item/f4e3ef1fa3272fcea68669c6.html

VisualStudio_各个控件详解

.NET控件详解 (2011-07-20 22:44:33) 转载 标签:it分类:C#语言 微软的.net控件详解,没有那个比这个更权威的了网址: https://www.sodocs.net/doc/5e1004147.html,/QuickStartv20/aspnet/doc/ctrlref/standard/multiview.aspx 参考资料:https://www.sodocs.net/doc/5e1004147.html,/QuickStartv20/aspnet/doc/ctrlref/standard/multiview.aspx 网易学院:https://www.sodocs.net/doc/5e1004147.html,/special/000915SN/stvs2005.html 参考资料:https://www.sodocs.net/doc/5e1004147.html,/tianine5/blog/item/1470aa35f46bad8aa61e1285.html .NET控件命名规范

按功能列出的推荐控件和组件:(windows程序用的控件和组件) 数据显示: DataGridView控件 DataGridView控件提供用来显示数据的可自定义表。使用DataGridView类,可以自定义单元格、行、列和边框。 注意DataGridView控件提供DataGrid控件所不具备的许多基本和高级功能。有关更多信息数据绑定和定位: BindingSource组件 通过提供当前项管理、更改通知和其他服务,来简化将窗体上的控件绑定到数据的过程。

文本编辑: BindingNavigator控件 提供工具栏式的界面来定位和操作窗体上的数据。 TextBox控件 显示设计时输入的文本,它可由用户在运行时编辑或以编程方式更改。 RichTextBox控件 使文本能够以纯文本或RTF 格式显示。 MaskedTextBox控件约束用户输入的格式信息显示(只读): Label 控件显示用户无法直接编辑的文本。 LinkLabel控件 将文本显示为Web 样式的链接,并在用户单击该特殊文本时触发事件。该文本通常是到另一个窗口或网站的链接。 StatusStrip控件 通常在父窗体的底部使用有框架的区域显示有关应用程序的当前状态的信息。ProgressBar控件向用户显示操作的当前进度。 网页显示: WebBrowser控件使用户可以在窗体内导航网页。

mscomm控件的使用和安装

一、引言 目前,在用计算机进行数据传输时,常用的是串行通信方式。用C++Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的MSComm控件。利用API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。但是使用串行通信控件就相对简单一些,而且功能强大,性能安全可靠。本文就简单的介绍一下在C++ Builder中利用MSComm 控件进行编程。 二、MSComm控件的常用属性和事件 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。 事件驱动方式 在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件将解发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。 查询方式 查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。 1.MSComm 控件的常用属性 CommPort属性:设置或返回通讯端口号,可以设置为1到16之间的任何值,本系统采用缺省值2; Settings属性:以字符串形式设置或返回波特率、奇偶校验、数据位和停止位,本系统采用缺省值"9600,n,8,1"; PortOpen属性:设置或返回通讯口的状态以及打开和关闭端口,可通过把该属性设置为true或者false来打开或者关闭端口; InBufferSize和OutBufferSize属性:分别设置接收和发送缓冲区分配的内存数量,单位为字节,缺省值分别为1024byte和512byte; InputLen属性:确定希望从接收缓冲区移出的字符数量,当InputLen=0时,一次把接收缓冲区的字符全部移出;

电脑--电子秤通信 连接线制作方法

电脑--电子秤通信连接线制作方法 一.准备工作: 1.按电子秤(地磅表头)说明书制作好数据通讯线. PS:一般电子秤数据通讯线的制作连接方法: ①一般电子秤采用的RS232通信.其数据通讯线只使用3根线. ②如果电子秤端采用9芯连接头,则使用2,3,5三根线.那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-5(如采集不到数据请修改为:2-3,3-2,5-5再试) ③如果电子秤端采用15芯连接头,则使用6,7,8三根线,那么其与电脑COM口9芯连接头的连接方式对应是:6-2,7-3,8-5(如采集不到数据请修改为:6-3,7-2,8-5再试) ④如果电子秤端采用25芯连接头,则使用2,3,7三根线,那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-7(如采集不到数据请修改为:2-3,3-2,5-7再试) 2.电子秤(地磅表头)通讯参数设置. 一般电子秤(地磅表头)均可由操作者自行设置通讯参数.包括:波特率设置.数据传输方式. 其中波特率一般均支持:1200,2400,4800,9600. 数据传输方式:根据电子秤生产厂家的设定不同而不同. PS:一般电子秤数据传输入方式: ①连续传送:当电子秤开机并且稳定,不论当前称重情况,电子秤每100ms传送一笔称重数据至COM口.

②稳定传送:当电子秤开机并且稳定,且当前电子秤过磅中,且电子秤稳重后.系统自动传送一笔称重数据至COM口.(电子秤零点不传送.未稳定时不传送.每称重一次只传送一次.下一次电子秤必须回到零点后再次称重.) ③按键传送:当电子秤开机并且稳定,且当前电子秤过磅中,能过电子秤的K/B(按键)上某一特定按键后,系统自动传送一笔称重数据至COM口.(具体说明请参见电子秤说明书或咨询电子秤供应商.)

串口通讯

串口通信的基本知识概念(232 422 485) 串口通信的基本概念: 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte) 的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它 很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总 常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如 300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采 样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在 传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现 了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同

VB6.0下MSComm控件实现串口通信

VB6.0下用MSComm控件实现串口通信 MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能,以下先对其属性进行详细的说明后再举一个例子进行说明: 1基本属性 CommPort O https://www.sodocs.net/doc/5e1004147.html,mPort[=value] Object为MSComm控件,value为整数值,标志端口号。 说明:该属性设置并返回通讯端口号,value的值可以设为1-16间的任意数(默认为1)。在打开端口之前必须先设置CommPort属性,当端口不存在时,如果用PortOpen属性打开它,MSComm控件会产生错误68(即设备无效的错误)。 Settings Objiect.Setting[=value] Object为MSComm控件,value为字符串类型,表示通讯端口的设置值。 说明:本属性用来设置并返回端口的波特率、奇偶校验位、数据位和停止位参数。当端口打开时,如果指定的value参数非法,则MSComm控件产生380号(非法属性值)错误。有效的value参数值由四个设置值组成,有如下格式:“BBBB,P,D,S”,其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。Value的默认值为:“9600,N,8,1”,下面给出合法的波特率、奇偶校验位、数据位和停止位参数: 波特率:110,300,600,1200,2400,4800,9600(默认),14400,19200,28800,38400,56000,57600,115200,128000,256000。 奇偶校验值:E(偶校验,Even)、M(标记,Mark)、N(默认,Default,None)、O(奇校验,Odd)、S(空格,Space)。 数据位值:4,5,6,7,8(默认),9。 停止位值:1(默认),1.5,2。 PortOpen O bject.PortOpen[=value] Object为MSComm控件。Value为布尔类型,表明通讯端口的状态。 说明:本属性用来设置或返回通讯端口的状态(开或关)。在设计时本属性无效。 设置PortOpen属性为True时端口将会被打开。设置为False时将关闭端口并清除接收和传输缓冲区中的数据。当应用程序终止时,SMComm控件自动关闭串行端口。 在打开端口之前,必须给CommPort属性设置一个合法的端口号。如果CommPort属性被设置成一个非法的端口号,则在打开端口时,MSComm控件将产生错误码为68(表示设备无效)的错误。另外,串行端口设备必须支持Settings属性的当前设置值。如果Settings属性包含硬件不支持的通讯设置值,则硬件可能不会正常工作。如果在端口打开之前,DTREnable 或RTSEnable属性被设置为True,则在关闭总线时,这些属性将被设置为False。否则DTR 和RTS线仍将保持其先前的状态。 Input Object.Input Object为MSComm控件。

串口通信基本接线方法要点

串口通信基本接线方法 龚建伟2001.6.20 目次:1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法 3.串口调试中要注意的几点 目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连,以回答前段网友的咨询。 1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 ?同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; ?两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战 百胜。 3.串口调试中要注意的几点: ?不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; ?线路焊接要牢固,不然程序没问题,却因为接线问题误事; ?串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; ?强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

使用窗体控件

第2章使用窗体控件 课堂练习:为控件创建事件处理程序 5)传递给这个事件处理程序的第二个参数(e)的目的是什么? 答:参数e包含事件数据。它是一个EventArgs 对象(实际不包含事件数据的基类),或者是一个派生类(像MouseEventArgs)的实例。要查看派生类的完整列表,请在Visual Studio .NET帮助文档中使用短语“EventArgs 类”进行查找,然后点击链接转到“派生类”。 ●为Click 事件创建一个事件处理程序。 3)上面的双击动作为什么创建了一个Click 事件处理程序? 答:当在设计视图中双击一个控件时,IDE会自动为默认事件创建一个事件处理程序。课堂练习:创建和使用ToolBar控件 8)为什么不能向ToolBar 按钮添加图像呢? 答:ToolBar 控件将ImageList 控件作为图像源。使用ToolBar 控件的ImageList 属性指定Toolbar 将从哪个ImageList 控件获取图像。 13)运行应用程序。单击工具栏按钮时有事情发生吗?必须处理什么事件以响应单击ToolBar按钮? 答:ToolBar 的ButtonClick事件用来处理ToolBar按钮的单击。ToolBarButtonClickEventArgs 用来确定单击了哪个按钮。 课堂练习:在运行时添加和移除控件 ●添加新控件 6)为什么decimalCheckBox 出现在GroupBox1控件的左上角? 答:控件位置属性的默认坐标X和Y的值均为零。 课堂练习:在运行时更新菜单 ●使用另一个MainMenu 9)什么时候能在一个应用程序中使用多个MainMenu 控件? 答:在应用程序的上下文改变或者应用程序有多种状态时,使用(显示)多个MainMenu 对象会很有帮助。 ●将一个ContextMenu 分配给一个控件。 5)如何找出哪个控件与ContextMenu 有关联? 答:ContextMenu.SourceControl 属性获取显示快捷方式菜单的控件。 ●找出与ContextMenu关联的控件

使用VB中的MSComm控件实现串口通信

使用VB中的MSComm控件实现RS-232串口通信 实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线(接法见本章有关习题的参考答案),在实验前检查计算机的两个串口是否能够正常工作。 实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。对例题中涉及调制解调器的内容,采用计算机与调制解调器连接的方式;对在例题中 VB (1 (CD) (2 来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“OK”响应。 每个使用的MSComm控件都对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。可以在Windows“控制面板”中改变端口地址和 中断地址。

下面这个简单的例子采用了轮询方法演示了用调制解调器进行基本的串行通讯: Private Sub Form_Load() Dim Instring As String '保存输入子串的缓冲区 https://www.sodocs.net/doc/5e1004147.html,mPort=3 '使用COM3。 MSComm1.Settings="2400,N,8,1" '2400波特率,无奇偶校验,8位数据位,一位停止位 下面我们将讲述一下MSComm控件的所有属性,其中前5个是最基本的,必须首先 掌握。 ⑴MsComm控件属性 1)CommPort,设置并返回通讯端口号。语法为: https://www.sodocs.net/doc/5e1004147.html,mPort[=value]

串口通信的接线方法

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422、RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1、DB9和DB25的常用信号脚说明 2、RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 图2 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。 3、串口调试中要注意的几点: 不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; 线路焊接要牢固,不然程序没问题,却因为接线问题误事;

串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 RS232C标准串口接线方法 (第二版) 检验仪器与微机的通讯主要是以RS232C标准接口为主,而串口的接线方法也有一定的标准,在此谈谈几种常用的串口接法,仅作参考: 一、标准接法 1、9对9(包括9针对9孔,9孔对9孔,9针对9针): 说明:以下的孔、针指串口线两端的串口,不过2、3有可能不交换 2-------------3 3-------------2 4-------------6 5-------------5 6-------------4 7-------------8 8-------------7 2、9对25(包括9孔对25孔,9孔对25针) 2-------------3 (备注:2、3有可能不交换) 3-------------2 4-------------6 5-------------7 6-------------20 7-------------5 8-------------4

实验三 高级UI控件的使用

实验三高级UI控件的使用 姓名:杨赟班级:电信1302班学号:0121309340121 一、实验目的 学会高级UI控件的使用:菜单,对话框,提示通知,时间控件,列表和进度二、主要仪器设备及套数 计算机 三、实验内容 1.菜单 Options menu介绍 Options menu 是一个Activity中的菜单选项的主要组成部分,它是作用在全局的app中的,比如说 "Search","Compose email","Settings." 在Android 2.3 版本以下或者更低版本中,用户可以通过点击菜单按钮来弹出菜单选项面板 在Android 3.0 高级别的版本中,这种选项菜单已经被 Action Bar 这种直接在屏幕中操作选项或者弹出选项的组件所替代了。从Android 3.0 开始,菜单按钮是不赞成使用了(很多设备已经没有了菜单的按钮) ,所以你应该转移到 ActionBar 提供给用户操作其它选项的动作。 详情参考:Creating an Options Menu 2) Options menu 定义方式 创建 Options menu 这个菜单有两种使用方式,一种是在代码中直接创建,主要是使用add()方法的方式,查看Menu API 文档中的add()方法 public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title) groudId:是指组ID,用以批量地对菜单子项进行处 理和排序 itemId:是子项ID,是每一个菜单子项的唯一标识 order:指定菜单子项在选项菜单中的排列顺序 titler:菜单标题 另外一种是在 XML 中定义一个菜单,引用代码如下 3) 触发事件 触发点击事件,当用户选择从菜单选项中选择一项的时候(包括 ActionBar中的action items) ,系统会调用你Activity的onOptionsItemSelected()方法,这个方法会

VCMSComm串口发送与接收上位机制做总结

VC++MSComm串口发送与接收上位机本设计用VC编写的一个简单的上位机软件,实现功能为:简单的串口数据发送与接收。 具体步骤如下: 一.建立应用程序工程“串口通信_韩季方01” 1.打开VC++6.0—》建立对话框MFC应用程序:串口通信_韩季方01—》 添加基本控件如图1.0。 图1.0 2.添加MSComm控件:Add To Project—》Components and Controls…打开如图1.1,双击“Registered ActiveX Contronls”项—》出现如图1.2—》选择“Microsoft Communications Control,version 6.0”控件—》点击“Insert”—》提示“…”确认即可—》弹出图1.3—》点击“OK”—》再点击“Close”。 下一步,将对话框资源控件中的电话状控件托到对话框中即可,如图1.4。

图1.1 图1.2

图1.3 图1.4 3.编辑控件及其属性设置:如表1.0

4.添加变量及其类型方法如图1.5 图1.5 二.初始化串口:设置MSComm控件属性 打开Class Wizard—》Member Variables—》选IDC_MSCOMM1—》点击“Add Varialbe…”—》添加变量m_ctrlComm。如图1.5。 之后,在工作空间打开文件如图2.0—》在函数OnInitDialog中添加代码如图2.1。

图2.0

图2.1 三.添加串口事件消息处理函数OnComm() 打开Class Wizard—》Member Maps—》Class Name中选择C_01Dlg—》在Object Ids中选择IDC_MSCOMM1—》在Message中选中OnComm—》单击“Add Function”按钮—》将函数名改为OnComm(好记而已)—》单击OK,完成后如图3.0 同理在函数OnComm()中添加代码如图3.1

RS232串口通信基本知识与实例

1,RS232串口通信基本知识 (1)目前较为常用的串口是9针串口(DB9。通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口;若距离较远,需附加调制解调器(MOD EM)。 (2)RS232C串口通信接线方法(三线制) 接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接 (3)DB9接口三线引脚定义 2 ---- RXD 接收数据 3 ---- TXD 发送数据 5 ---- GND 信号地 (4)串行通信方式 1)单工:信息只能单向传送 2)半双工:信息可双向传送但不能同时进行 3)全双工:信息可同时进行双向传送 (5)RS232逻辑电平 逻辑0电平规定为+5 ~ +15V之间;逻辑1是电平为-5 ~ -15V之间,因此在与单片机进行通信时需要进行电平转换 (6)RS232串行通信接口电路设计 (7)51单片机串行通信接口软件设计 1)两个重要指标:可靠性和速度,可靠性是第一位。 2)与串口通信相关的几个寄存器和控制位 TMOD:可以用它来设置定时器工作方式(如果在MCU中使用的是定时器来产生波特率,就需要对这个寄存器进行设置,通常设为0x20,即设置定时器1为8位自动重装定时器,即工作方式1) TH1和TL1:定时器1初始值(可通过波特率计算软件获得) TR1:开启定时器1 SCON:串口控制寄存器,通常设为0x50,即10位异步传输,由定时器1

产生波特率,无奇偶校验位,允许接收 PCON:这个寄存器主要用到它的最高位SMON,当最高位设为1时,原波特率加倍 ES:串口中断使能位 EA:全局中断使能位 3)波特率计算方法(使用一个名为“51波特率初值计算.exe”的小软件)第1步:选择定时器工作方式(方式2) 第2步:输入晶振值(11.0592) 第3步:选择波特率(9600) 第4步:设置SMOD值(0) 第5步:点击确定 第6步:将软件上显示值赋给TH1和TL1 4)串口初始化程序 void Initial_RS232(unsigned char rate) { //默认晶振值为11.0592MHz unsigned char Reload1; switch(rate) //根据拨码器设置波特率 { case 0: Reload1 = 0xE8; //2400bps break; case 1: Reload1 = 0xF4; //4800bps break; case 2: Reload1 = 0xFA; //9600bps break; case 3: Reload1 = 0xFD; //19200bps break; default: Reload1 = 0x00; break; } PCON = PCON|0x80; //SMOD = 1 ;波特率加倍 TMOD = 0x20; //0011,00010设置定时器1为8位自动重装计数器 SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位 TH1 = Reload1; //设置定时器1自动重装数 TL1 = Reload1; TR1 = 1; //开定时器1 ES = 1; //允许串口中断 EA = 1; //开总中断 }

控件使用

、控件mscomm32.ocx 的几个重要属性 CommPort:设置并返回通讯端口号。 Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口。 Input:从接收缓冲区返回和删除字符。 Output:向传输缓冲区写一个字符串。 InBufferCount:返回接收缓冲区中等待的字符数,该属性在设计时无效,可以把InBufferCount 属性设置为0 来清除接收缓冲区。 InBufferSize:设置并返回接收缓冲区的字节数,接收缓冲区的大小。Rthreshold:产生OnComm 事件之前要接收的字符数。设置Rthreshold 为1,接收缓冲区收到每一个字符都会使MSComm 控件产生OnComm 事件。设置为0(缺省值)则不产生OnComm 事件。 CommEvent:返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。只要有通讯错误或事件发生时都会产生OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。CommEvent 属性返回2 表示收到Rthreshold 个字符。该事件将持续产生直到用Input 属性从接收缓冲区中删除数据。 2、实例: 该事例演示如何控制COM口发送命令及如何接收数据。本事例采用轮讯方式。适用于通讯数据 不是很巨大的和要求不是很高速的情况下。 (1)在VFP中,建立一个新的表单 (2)插入文本(命名为TEXT1,用来显示读取的数据) (3)建立Microsoft Communication Control1 控件在工具栏中点插入ole容器控件,选择Microsoft Communication Control 控件(NAMe为mscomm1) (4)建立一个按纽命名为command1 (5)在CHICK属性里下如下代码: **存储变量名字 buffer="" ** 使用COM1。 https://www.sodocs.net/doc/5e1004147.html,mPort = 1 **9600 波特,无奇偶校验,8 位数据,一个停止位。 thisform.MSComm1.Settings = "9600,N,8,1" * 告诉控件读入整个缓冲区。 thisform.MSComm1.InputLen = 0 * 打开端口。 thisform.MSComm1.PortOpen = True **将attention 命令送到调制解调器。这是MODEM的状态读取命令 thisform.MSComm1.Output = "ATV1Q0" & Chr$(13) ** CHR(13)是回车符号,用来表示命令结束 **等待数据返回到串行端口。 vv=1 do while .t. Buffer = thisform.MSComm1.Input *从串行端口读"OK" 响应。

串口基本常识

串口引脚图.jpg 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置

C#串口通信:MSComm控件使用详解

C#串口通信:MSComm控件使用详解 目次 MSComm 控件两种处理通讯的方式 CommPort 属性 RThreshold 属性 CTSHolding 属性 SThreshold 属性 CDHolding 属性 DSRHolding 属性 Settings 属性 InputLen 属性 EOFEnable 属性 Handshake 常数 OnComm 常数 InputMode 常数 错误消息 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi 等语言中均可使用。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 向传输缓冲区写一个字符串。 下面分别描述:

串口通信的连线方法

转载:目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1.DB9和DB25的常用信号脚说明 9针串口(DB9) 25针串口(DB25[被屏蔽广告]) 针号功能说明缩写针号功能说明缩写 1 数据载波检测 DCD 8 数据载波检测 DCD 2 接收数据 RXD 3 接收数据 RXD 3 发送数据 TXD 2 发送数据 TXD 4 数据终端准备 DTR 20 数据终端准备 DTR 5 信号地 GND 7 信号地 GND 6 数据设备准备好 DSR 6 数据准备好 DSR 7 请求发送 RTS 4 请求发送 RTS 8 清除发送 CTS 5 清除发送 CTS 9 振铃指示 DELL 22 振铃指示 DELL 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 · 同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; · 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。 3.串口调试中要注意的几点: 串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 单工、半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。 电话线就是二线全双工信道。由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也将收、发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。 奇偶校验 串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:0100,0101=45H D7 D0 由于干扰,可能使位变为1,这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。 最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。

串口通信MSComm控件和SerialPort

一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/5e1004147.html,技术广泛应用的今天,Visual S https://www.sodocs.net/doc/5e1004147.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/5e1004147.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/5e1004147.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 的字符串),其余的方法

VC++串口编程(基本概念)

在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。我们可以通过设备管理器来查看COM的硬件参数设置,如图1。 图1 在Windows上查看PC串口设置 迄今为止,几乎每一台PC都包含COM。本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。 尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB 等接口取代。RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。 本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。 在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见): 作者email:21cnbao@https://www.sodocs.net/doc/5e1004147.html,(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述); 硬件原理 众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous

相关主题