文档章节

C#用SerialPort实现串口通讯

深圳大道
 深圳大道
发布于 2016/12/29 15:33
字数 510
阅读 22
收藏 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
william.yang/KopSoftTool

KopSoftTool 介绍 KopSoftTool:二维码标签打印程序,C#串口通信SerialPort,SCADA监控与数据采集 西门子PLC OPC,等 作者网站 http://www.kopsoft.cn/ 软件架构 Microsoft .NET Framework 4.5 p...

william.yang
03/31
0
0
Qt5 自带 串口通讯基础模块

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

萨斯辈的呼唤
2014/03/31
18.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
40分钟前
5
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
55分钟前
173
9
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
9
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部