c#中串口组件的使用方法总结及上位机制作方法

上传人:wt****50 文档编号:37650237 上传时间:2018-04-20 格式:PDF 页数:12 大小:420.24KB
返回 下载 相关 举报
c#中串口组件的使用方法总结及上位机制作方法_第1页
第1页 / 共12页
c#中串口组件的使用方法总结及上位机制作方法_第2页
第2页 / 共12页
c#中串口组件的使用方法总结及上位机制作方法_第3页
第3页 / 共12页
c#中串口组件的使用方法总结及上位机制作方法_第4页
第4页 / 共12页
c#中串口组件的使用方法总结及上位机制作方法_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《c#中串口组件的使用方法总结及上位机制作方法》由会员分享,可在线阅读,更多相关《c#中串口组件的使用方法总结及上位机制作方法(12页珍藏版)》请在金锄头文库上搜索。

1、请勿转载,我会不断的更新和修改。请勿转载,我会不断的更新和修改。修改日志:修改日志:1 1 2009111220091112创建文档创建文档2 2 2009111320091113发送函数介绍,数据的接收,上位机基本功能的完成发送函数介绍,数据的接收,上位机基本功能的完成一、创建一、创建 WindowsWindows 窗体项目窗体项目二、添加二、添加 SerialPortSerialPort 组件组件三、默认产生三、默认产生 serialPort1serialPort1对象对象四、设置串口属性四、设置串口属性三种方法(本实例用第三种)1.设置下面的属性2.代码实现3.用我封装的一个类来实现C#

2、 封装了用于对 Serialport 类属性的配置类及其保存窗五、串口操作五、串口操作( (打开关闭打开关闭) )按上述步骤初始化串口之后进行串口的打开和关闭操作打开关闭串口的函数包含在 SerialPort 类中,利用 SerialPort 对象来引用serialPort1.Open();serialPort1.Close();例如:在程序中添加一个打开串口按钮 btn_open,btn_open.Text 初始化为“打开串口“在 btn_open 响应函数中加入以下代码private void btn_open_Click(object sender, EventArgs e) if (b

3、tn_open.Text = “打开串口“)btn_open.Text = “关闭串口“;serialPort1.Open();elsebtn_open.Text = “打开串口“;serialPort1.Close();此时形成的界面截图如下:此时程序的代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windo

4、ws.Forms;using AHRSmanager;namespace testOfserialPortpublic partial class Form1 : Formpublic Form1()InitializeComponent();private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)private void btn_SerialportSet_Click(object sender, EventArgs e)using (串口设置窗口 fr

5、mConfig = new 串口设置窗口()frmConfig.ShowDialog();private void btn_open_Click(object sender, EventArgs e)if (btn_open.Text = “打开串口“)串口设置窗口.ReadSerialPortSet(serialPort1);/串口初始化btn_open.Text = “关闭串口“;serialPort1.Open();elsebtn_open.Text = “打开串口“;serialPort1.Close();private void Form1_Load(object sender, E

6、ventArgs e)btn_open.Text = “打开串口“;这时该程序已经具有开关串口的作用, 可以用单 PC 机虚拟串口互连方法 介绍的方法进行串口测试(串口互联模式)运行程序,点击串口配置按钮,进行参数配置,点击打开串口,VSPM 就将显示串口的打开和关闭.六、数据的发送六、数据的发送( (一一) ) 十六进制数据发送十六进制数据发送使用方法见C#中用 SerialPort 类中的 Write()方法发送十六进制数1.为程序添加发送按钮,命名为 btn_send,为程序添加文本输入框 tb_send2.在 btn_send 的回调函数中添加以下代码private void btn_

7、send_Click(object sender, EventArgs e)Byte BSendTemp = new Byte1; /建立临时字节数组对象BSendTemp0 = Byte.Parse(this.tb_send.Text);/由文本框读入想要发送的数据this.serialPort1.Write(BSendTemp, 0, 1);/发送数据3.测试将串口配置为 COM3,打开 VSPM 和串口调试助手,调试助手为 COM4打开串口 COM3,将要发送的数写入输入文本框(0-255) ,点击发送在串口调试助手中就会出现相应的十六进制数据显示( (二二) ) 字符串数据发送字符串数

8、据发送1 为程序添加 CheckBox cB_Hex,如若选中则发送 Hex 数据,如若未选则发送 String 数据。2 将 btn_send 的响应函数 btn_send_Click 修改为:private void btn_send_Click(object sender, EventArgs e)if (this.cB_Hex.Checked = true)Byte BSendTemp = new Byte1; /建立临时字节数组对象BSendTemp0 = Byte.Parse(this.tb_send.Text);/由文本框读入想要发送的数据this.serialPort1.Wri

9、te(BSendTemp, 0, 1);/发送数据elsestring serialStringTemp = this.tb_send.Text;this.serialPort1.WriteLine(serialStringTemp);3 运行程序,取消 Checkbox 的选择4 发送字符串,下面为测试图5 这里主要利用了 WriteLine 函数,这个函数在 Console 中也有定义,用发基本一样。七、数据的接收七、数据的接收(A)结构介绍数据的接收大体有两种方案:1 主动定时读取;2 事件响应驱动1 主动定时读取这种方式的适应能力较弱,当数据来源为定时并且不是很快的情况时可以考虑采用这

10、种方法,这种方法主要适用于数据采集系统而不适用于随机事件发生时的通信或控制系统。当然,这种方法的缺点是如果接收的数据不是定时的,则读取定时器的触发频率就要很小,这样才能保证及时的读取串口缓冲区。这也将大大的浪费系统资源。2 事件响应驱动这种方式是串口通信上位机制作的主要方式, 其采用中断思想而成, 当串口输入缓冲区中的字节数据大于某个设定的个数时, 触发串口输入中断, 这时在中断程序中读取串口输入缓冲区中的数据,具有实时性和灵活性,是个常用的较好的方法。本文也是采用这种方法来进行串口输入缓冲区的实时数据读取。(B)事件响应驱动下的串口输入缓冲区数据读取.NET 中封装了 SerialPort

11、类 表示串行端口资源。命名空间:System.IO.Ports程序集:System(在 System.dll 中)除了前面用到的串口常规属性设置(BuadRate,PortName) ,这里用到了一个新的串口属性:ReceivedBytesThreshol 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数。d这个 ReceiveBytesThreshold 属性即是设置串口输入缓冲区中的数据字节大于ReceiveBytesThreshold 时触发 DataReceived 事件。用法:在设计器双击串口 serialport1的 DataReceived 事件,在代码中

12、就会自动加入serialPort1_DataReceived 函数作为 DateReceived 的事件触发函数。作为测试, 先将 serialport1.ReceiveBytesThreshold 设为1, 即串口输入缓冲区有数就触发 DataReceived 事件。加入 RichTextBox rTB_receive 作为串口接收数据的显示组件在 DataReceived 事件响应函数中读取串口输入缓冲区中的数据string serialReadString;private void serialPort1_DataReceived(object sender,System.IO.Port

13、s.SerialDataReceivedEventArgs e)serialReadString += serialPort1.ReadExisting();这里 serialReadString 即为读取到串口输入缓冲区的数据。要想将其显示到 RichTextBox rTB_receive 中,这里出现了一个跨线程的问题,因为DataReceived 事件是在辅助线程中被激发的,所以要将数据显示到 rTB_receive 的主线程中就要进行一定的处理,处理方法如下:C#中 SerialPort 类中 DataReceived 事件 GUI 实时处理方法将 DataReceived 事件响应函

14、数修改为如下:string serialReadString;private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)serialReadString = serialPort1.ReadExisting();this.rTB_receive.Invoke(new MethodInvoker(delegatethis.rTB_receive.AppendText(serialReadString););这时就可以按字符串收发了!测试图,打开上位机和调试助手

15、,点击调试助手的发送按钮,上位机就会相应的显示接收到的数据.这时候就完成了基本上位机功能的编写至此工程文件:下载串口数据的读取还涉及到其他的读取函数,Read已重载。 从 SerialPort 输入缓冲区中读取。ReadByte从 SerialPort 输入缓冲区中同步读取一个字节。ReadChar从 SerialPort 输入缓冲区中同步读取一个字符。ReadExisting在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。ReadLine一直读取到输入缓冲区中的 NewLine 值。ReadTo一直读取到输入缓冲区中的指定 value 的字符串。根据需要自己选择就行了,很简单,就不再啰嗦了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑机械

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号