zoukankan      html  css  js  c++  java
  • WinForm—串口通讯

    ialPort(串行端口资源)

    常用属性:

    BaudRate  此串行端口上要使用的波特率

    DataBits  每发送/接收一个字节的数据位数目

    DtrEnable  在通讯过程中是否启用数据终端就绪(Str)行

    PortName  要打开的通讯端口的名称

    RtsEnable  在通讯过程中是否启用请求发送(Rts)行

    StopBits  每发送/接收一个字节的停止位数

     常用事件:

    DataReceived  每次从SerialPort接收数据时引发

    应用:

    0、查询串口 并加载

    1、打开串口

    2、发送数据

    3、接收数据

     1 //SerialPort数据读取
     2         private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
     3         {
     4             //此项目接收数据每12位为一组,并以“02”为开始标识符,第2到第7位的最后一个数字为传输的数据
     5 
     6             //延迟100ms执行,为了防止SerialPort获取数据时,获取到的数据少于12位,显示框不显示数据问题
     7             Thread.Sleep(100);
     8             //当接收到的数据>=12位,即一个完整的数据时,再进行数据读取分析
     9             if (serialPort1.BytesToRead >= 12)
    10             {
    11                 try
    12                 {
    13                     //将缓存区的数据放入by数组中
    14                     byte[] by = new byte[serialPort1.BytesToRead];
    15                     while (serialPort1.BytesToRead > 0)
    16                     {
    17                         //★★★端口控件读取数据★★★
    18                         serialPort1.Read(by, 0, by.Length);
    19                     }
    20                     //result为最终显示结果
    21                     string result = "";
    22                     //循环判断by数组,找到开始标识符“02”
    23                     for (int j = 0; j < by.Length; j++)
    24                     {
    25                         //将当前数据转换为16进制字符串后,不足2位的向左用“0”补齐
    26                         string currentby = Convert.ToString(by[j], 16).PadLeft(2, '0');
    27                         //如果当前为数据开始标识符,则读取分析数据
    28                         if (currentby == "02")
    29                         {
    30                             //当剩余数据包换一个完整的12位数据时进行读取分析
    31                             if (by.Length - j > 11)
    32                             {
    33                                 //第2位开始到第7位结束,共6位为传输的数据
    34                                 for (int k = j + 2; k <= j + 7; k++)
    35                                 {
    36                                     currentby = Convert.ToString(by[k], 16).PadLeft(2, '0');
    37                                     result += currentby.Substring(1, 1);
    38                                     //前三位为整数部分,后三位为小数部分
    39                                     if (k == j + 4)
    40                                     {
    41                                         result += ".";
    42                                     }
    43                                 }
    44                             }
    45                             //展示数据
    46                             txt_Weight.Text = (Convert.ToDecimal(result)).ToString();
    47                             break;
    48                         }
    49                     }
    50                 }
    51                 catch (Exception ex)
    52                 {
    53                     MessageBox.Show(ex.ToString());
    54                 }
    55             }
    56         }
    SerialPort控件数据读取

    4、数据接收错误

    错误:将返回的数据处理后倒入指定的文本框,因线程问题出现错误

     

    解决方案:Form.CheckForIllegalCrossThreadCalls = false;

  • 相关阅读:
    网上邻居无法打开的问题 客户端无法连接打印机问题
    今天一天下午到晚上都在研究如何刷手机,要是被领导知道我帮同学在刷手机系统,非开除我不可。还是贴出来,以后少走弯路吧
    “屏幕保护程序”没有出现“在恢复时使用密码保护”的解决方法
    NOD 32客户端安装时出现的问题
    [模板]二叉树的前、中、后序遍历
    [算法]浅谈求n范围以内的质数(素数)
    [模板]二叉搜索树
    [OI]Noip 2018 题解&总结(普及)
    Centos7.2安装git(源码安装)
    Centos7.2安装maven
  • 原文地址:https://www.cnblogs.com/qq450867541/p/7092653.html
Copyright © 2011-2022 走看看