http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 91622|回复: 7

[C#语言基础] C#使用SerialPort进行串口数据发送的方法

[复制链接]
发表于 2013-3-23 21:23:55 | 显示全部楼层 |阅读模式
                      C#使用SerialPort进行串口数据发送的方法

       这个功能其实主要是使用C#中的SerialPort控件进行发送的。
方法很简单,只要大家拉一个控件然后处理一下两个方法就可以了,当然第一个是发送数据的,另外一个DataReceived事件是当有数据返回时触发的,意思就是接收数据了。好了下载直接看代码吧。
[C#] 纯文本查看 复制代码
private void btnGo_Click(object sender, EventArgs e)
        {

            try
            {
                serialPort1.PortName = "COM1";
                serialPort1.Open();
                byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
                string str = Convert.ToBase64String(data);
                serialPort1.WriteLine(str);
                serialPort1.Close();
                MessageBox.Show("数据发送成功!", "系统提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message .ToString (),"提示信息");
            }
        }

        //当有数据到达里触发
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.Open();

            byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
            textBox2.Text = Encoding.Unicode.GetString(data);
            serialPort1.Close();
            MessageBox.Show("数据接收成功!", "系统提示");
        }

如果大家还想更深入一步进行研究的话,到是可以看看我的发送短信的登陆
C#使用SerialPort控件操作AT指令控制语音猫的例子
下面是一些常用的属性和方法的说明大家参考一下吧
  1. BaseStream
  2. 获取 SerialPort 对象的基础 Stream 对象

  3. BaudRate
  4. 获取或设置串行波特率

  5. BreakState
  6. 获取或设置中断信号状态

  7. BytesToRead
  8. 获取接收缓冲区中数据的字节数

  9. BytesToWrite
  10. 获取发送缓冲区中数据的字节数

  11. CDHolding
  12. 获取端口的载波检测行的状态

  13. CtsHolding
  14. 获取“可以发送”行的状态

  15. DataBits
  16. 获取或设置每个字节的标准数据位长度

  17. DiscardNull
  18. 获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略

  19. DsrHolding
  20. 获取数据设置就绪 (DSR) 信号的状态

  21. DtrEnable
  22. 获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号

  23. Encoding
  24. 获取或设置传输前后文本转换的字节编码

  25. Handshake
  26. 获取或设置串行端口数据传输的握手协议

  27. IsOpen
  28. 获取一个值,该值指示 SerialPort 对象的打开或关闭状态

  29. NewLine
  30. 获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值

  31. Parity
  32. 获取或设置奇偶校验检查协议

  33. ParityReplace
  34. 获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节

  35. PortName
  36. 获取或设置通信端口,包括但不限于所有可用的 COM 端口

  37. ReadBufferSize
  38. 获取或设置 SerialPort 输入缓冲区的大小

  39. ReadTimeout
  40. 获取或设置读取操作未完成时发生超时之前的毫秒数

  41. ReceivedBytesThreshold
  42. 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数

  43. RtsEnable
  44. 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号

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

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

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

  51.                                               SerialPort类的常用方法

  52. 方 法 名 称
  53. 说  明

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

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

  58. Read
  59. 从 SerialPort 输入缓冲区中读取

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

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

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

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

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

  70. WriteLine
  71. 将指定的字符串和 NewLine 值写入输出缓冲区
复制代码


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-8-28 05:03:46 | 显示全部楼层
应该加分呀
发表于 2013-11-27 15:59:15 | 显示全部楼层
触发不了serialPort1_DataReceived函数
 楼主| 发表于 2013-11-27 16:32:32 | 显示全部楼层
T-TOP-HELL 发表于 2013-11-27 15:59
触发不了serialPort1_DataReceived函数

你怎么写的程序
发表于 2013-11-27 16:41:42 | 显示全部楼层

我建了个窗口,然后拉了serialPort1控件,还有两个文本框和一个按钮。点击button1按钮发送数据
try
            {
                serialPort1.PortName = "COM1";
                serialPort1.Open();
                byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
                string str = Convert.ToBase64String(data);
                serialPort1.WriteLine(str);
                serialPort1.Close();
                MessageBox.Show("数据发送成功!", "系统提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message .ToString (),"提示信息");
            }

然后我给serialPort1添加了serialPort1_DataReceived事件。
当我点击button1把textBox1中的字符发送出去后,没有触发serialPort1_DataReceived事件。
发表于 2014-2-28 16:07:37 | 显示全部楼层
不错  学习学习
发表于 2014-10-15 22:25:50 | 显示全部楼层
感谢您的无私奉献,真是帮了我的大忙了
发表于 2015-5-23 12:47:57 | 显示全部楼层
站长,我也触发不了serialPort1_DataReceived事件
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 20:34

© 2014-2021

快速回复 返回顶部 返回列表