文档章节

C#用SerialPort实现串口通讯

深圳大道
 深圳大道
发布于 2016/12/29 15:38
字数 510
阅读 31
收藏 0
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO.Ports;

namespace SerialPort
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void CmdSend_Click(object sender, EventArgs e)
        {
            string outdata = TextSend.Text;
            if (!string.IsNullOrEmpty(outdata))
            {
                serialPort1.Write(outdata);
            }
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;
            serialPort1.Open();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
        }


        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string SDateTemp = this.serialPort1.ReadExisting();
            if (!string.IsNullOrEmpty(SDateTemp))
            {
                SDateTemp = GetValue(SDateTemp, "GS", "kg").Trim(); //多少kg
            }
            //读取串口中一个字节的数据  
            this.TextReceive.Invoke(
                //在拥有此控件的基础窗口句柄的线程上执行委托Invoke(Delegate)  
                //即在textBox_ReceiveDate控件的父窗口form中执行委托.  
             new MethodInvoker(
                /*表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。 
                 * 在对控件的 Invoke    方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。*/
             delegate
             {
                 /*匿名方法,C#2.0的新功能,这是一种允许程序员将一段完整代码区块当成参数传递的程序代码编写技术,
                  * 通过此种方法可  以直接使用委托来设计事件响应程序以下就是你要在主线程上实现的功能但是有一点要注意,
                  * 这里不适宜处理过多的方法,因为C#消息机制是消息流水线响应机制,
                  * 如果这里在主线程上处理语句的时间过长会导致主UI线程阻塞,停止响应或响应不顺畅,这时你的主form界面会延迟或卡死 */
                 this.TextReceive.AppendText(SDateTemp);//输出到主窗口文本控件  
                 this.TextReceive.Text += "\n\n\n";
             }
             )
             );
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
            }
        }


        #region 获得字符串中开始和结束字符串之间的值
        /// <summary>
        /// 获得字符串中开始和结束字符串之间的值
        /// </summary>
        /// <param name="str">字符串</param>
        /// <param name="s">开始</param>
        /// <param name="e">结束</param>
        /// <returns></returns> 
        public static string GetValue(string str, string s, string e)
        {
            Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
            return rg.Match(str).Value;
        }
        #endregion
    }
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/26213145

共有 人打赏支持
深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
工具推荐:串口助手-SerialPort 物联网开发利器

刚做IoT业务时,在mac下没有找到一款适用的串口工具,开虚拟机用windows下串口调试很不方便,同事推荐我使用这款SerialPort工具,发现的确非常好用,使用5个月了,可以免费升级,功能强大,界...

ahlfors
2018/05/09
0
0
C#数组访问的“索引超出了数组界限”问题

运行环境:win7+VS2013(社区版) 写的是个串口通讯小程序,用的serialport。 接收的数据为十六进制:AA AA 18 11 02 10 02 02 01 01 00 10 01 02 0C 02 04 03 00 01 01 0D 0E 54 收到后转换为...

黑龙子
2016/12/17
1K
5
[注意]SerialPort操作PCI-1621D多串口卡,出现异常"参数不正确"

开发LED大屏显示、40-20mA模拟量输出的时候,经常要与串口打交道。但是Windows自带的SerialPort串口操作组件貌似兼容性 不是太好,或是SerialPort本身有BUG,在操作PCI-1621D多串口卡的时候出...

唯笑志在
2015/09/29
0
0
Qt5 自带 串口通讯基础模块

QtSerialPort 简介 QtSerialPort模块是Qt5库的附加部分,为硬件和虚拟的串口提供了统一的接口。注意:该模块也增加了对Qt4的支持。 串口由于其简单和可靠,目前在像嵌入式系统,机器人等工业...

萨斯辈的呼唤
2014/03/31
0
2
[连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计

目 录 第五章 串口和网络统一IO设计... 2 5.1 统一IO接口... 2 5.1.1 串口IO.. 4 5.1.2 网络IO.. 7 5.1.3 扩展应用... 12 5.2 IO管理器... 12 5.2.1 串口I O管理器... 13 5.2.2 网络IO管理器...

唯笑志在
2015/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EMAS,一部淘宝十年移动互联网技术的演进史

导读 本文根据2018云栖大会深圳峰会·EMAS专场—移动互联的进化论,阿里巴巴高级技术专家泠茗《 EMAS全景介绍》的演讲整理而成,文中就EMAS的起源史及EMAS的五大移动研发场景解决方案进行了分...

迷你芊宝宝
17分钟前
1
0
C# 图片人脸识别

此程序基于 虹软人脸识别进行的开发 前提条件从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)将获取到的开发包导入到您的应用中 App_id与SDK_key是在初始化...

是哇兴哥棒棒哒
19分钟前
2
0
spring boot web项目连接池配置分析

两篇文档,请读者自行分析: Druid: https://www.cnblogs.com/niejunlei/p/5977895.html HikariCP: http://blog.csdn.net/clementad/article/details/46928621...

sunranhou
20分钟前
1
0
TypeError: Object of type int64 is not JSON serializable

问题 在使用json.dumps(param)将python对象转成json的过程中出现了,如下问题: TypeError: Object of type int64 is not JSON serializable 代码如下: param = { 'remoteId': 'rem......

亚林瓜子
23分钟前
1
0
Android MediaPlayer

1.通过静态方法构造 MediaPlayer.create(Context context,int resid); 2.构造方法: MediaPlayer(); 设置媒体源: setDataSource(String path); 3.设置是否循环: setLooping(boolean) 4.播放......

Coding缘
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部