C#中使用SerialPort类实现简单串口编程_第1页
C#中使用SerialPort类实现简单串口编程_第2页
C#中使用SerialPort类实现简单串口编程_第3页
C#中使用SerialPort类实现简单串口编程_第4页
C#中使用SerialPort类实现简单串口编程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#中使用SerialPort类实现简单串口编程 .NET提供了SerialPort类进行串口通信,使用很简单,连我这个.NET新手也能很快上手.以下是从网上找到并自己修改后的参考代码: 1using System; 2using System.Collections.Generic; 3using System.Linq;聚酯纤维吸音板 4using System.Text; 5using System.Windows;/ 6using System.Windows.Controls; 7using System.Windows.Data; 8using System.Windows.Documents; 9using System.Windows.Input; 10using System.Windows.Media; 11using System.Windows.Media.Imaging; 12using System.Windows.Navigation; 13using System.Windows.Shapes; 14using System.IO.Ports; 15 16namespace CsharpComm 17 18 / 19 / Window1.xaml 的交互逻辑 20 / 21 public partial class Window1 : Window 22 23 public Window1() 24 25 InitializeComponent(); 26 27 28 /定义 SerialPort对象 29 SerialPort port1; 30 31 /初始化SerialPort对象方法.PortName为COM口名称,例如COM1,COM2等,注意是string类型 32 public void InitCOM(string PortName) 33 34 port1= new SerialPort(PortName); 35 port1.BaudRate= 9600;/波特率 36 port1.Parity= Parity.None;/无奇偶校验位 37 port1.StopBits= StopBits.Two;/两个停止位 38 port1.Handshake= Handshake.RequestToSend;/控制协议 39 port1.ReceivedBytesThreshold= 4;/设置 DataReceived 事件发生前内部输入缓冲区中的字节数 40 port1.DataReceived+= new SerialDataReceivedEventHandler(port1_DataReceived);/DataReceived事件委托 41 42 43 /DataReceived事件委托方法 44 private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e) 45 46 try 47 48 StringBuilder currentline= new StringBuilder(); 49 /循环接收数据 50 while (port1.BytesToRead 0) 51 52 char ch= (char)port1.ReadByte(); 53 currentline.Append(ch); 54 55 /在这里对接收到的数据进行处理 56 / 57 currentline= new StringBuilder(); 58 59 catch(Exception ex) 60 61 Console.WriteLine(ex.Message.ToString(); 62 63 64 65 66 /打开串口的方法 67 public void OpenPort() 68 69 try 70 71 port1.Open(); 72 73 catch 74 if (port1.IsOpen) 75 76 Console.WriteLine(the port is opened!); 77 78 else 79 80 Console.WriteLine(failure to open the port!); 81 82 83 84 /关闭串口的方法 85 public void ClosePort() 86 87 port1.Close(); 88 if (!port1.IsOpen) 89 90 Console.WriteLine(the port is already closed!); 91 92 93 94 /向串口发送数据 95 public void SendCommand(string CommandString) 96 97 byte WriteBuffer= Encoding.ASCII.GetBytes(CommandString); 98 port1.Write(WriteBuffer,0, WriteBuffer.Length); 99 100 101 /调用实例102 private void btnOpen_Click(object sender, RoutedEventArgs e)103 104 /我现在用的COM1端口,按需要可改成COM2,COM3105 InitCOM(COM1);106 OpenPort();107 108 109Code值得注意的是:1. port1.ReceivedBytesThreshold = 4; ReceivedBytesThreshold属性设置触发一次DataReceived事件时将接收到的数据字节数.由于我的硬件是一次发上来4个字节估设置为4.如果不能正确设置这个属性的话,在SerialPort对象第一次触发DataReceived事件时还是正确的(4个字节),但是从第二次触发之后都是一个字节触发一次DataReceived事件.为什么这样搞不清楚.2.如果在 DataReceived 委托事件中使用了不是DataReceived委托事件所在线程创建的UI控件,函数等,需要使用到Dispatcher 类来达到线程安全,不然会报错.以下是MSDN中Dispatcher类的例子(XAML),简单明了: 1private delegate void AddTextDelegate(Panel p, String text); 2 3private void AddText(Panel p, String text) 4 5 p.Children.Clear(); 6 p.Children.Add(new TextBlock Text= text ); 7 8 9private void TestBeginInvokeWithParameters(Panel p)10

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论