• (52) C# 串口通讯


     

    一、串口通讯基本参数

    1.波特率:每秒传输n个多少个二进制位。

    例如 9600 b/s  = 1200 B/s=  1.172KB/S

    2.传输数据格式

    数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成

    在串行通信的信号线路上,共有两种状态,分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑1高电平状态。

    (1)起始位:

    起始位必须是持续一个比特时间的逻辑0(低电平),使数据线处于逻辑0低电平状态,提示接收器数据传输即将开始,即标志传输一个字符的开始。发送器通过发送起始位而开始一个字符传送,接收方可用起始位使自己的接收时钟与发送方的数据同步。

    (2) 数据位:

    数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数由通信双方共同约定,一般可以是6位、7位或8位,比如标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。传输数据时先传送字符的低位,后传送字符的高位,即低位(LSB)在前,高位(MSB)在后

    (3)奇偶校验位:

    校验位一般用来判断接收的数据位有无错误,一般采用奇偶校验.

    假设传输的数据位为01001100,如果是奇校验,则奇校验位为0(要确保总共有奇数个1);如果是偶校验,则偶校验位为1(要确保总共有偶数个1)

    奇偶校验位仅是对数据进行简单的置逻辑高位或逻辑低位,不会对数据进行实质的判断,好处是接收设备能够知道一个位的状态变化,从而判断是否有噪声干扰了通信以及传输的数据是否同步

    奇偶检验位不是必须有的

    (4)停止位:

    这里要提到一个概念,单位时长;指的是此波特率下发送一次所需要的时间,例如 9600波特率理论上发送一个包需要 1/9600秒。

    停止位在数据格式的最后,用以标志一个字符传送的结束,对应于逻辑1(高电平)状态。停止位可以是1位、1.5位或2位,可以由软件设定。但它一定是逻辑1高电平,标志着传输一个字符的结束

     例如:如果停止位是1.5表示 1.5* 1/9600 秒的时间里一直发送1. 客户端就可以知道这个数据包发送完成了---个人理解

    二、常用串口通讯协议

    1.RS-232

    一般个人PC机上会有一个9针的RS232。传输距离大概15米左右

    2.RS-422

    3.RS-485

     用在工控机上比较多,可以个主机带多个口.传输距离可达1500米左右

    三、C# SerialPort类

    1.初始化设置

    using System.IO.Ports;
    
    SerialPort sp = new SerialPort();
    sp.PortName = "COM1";//COM口名称
    sp.BaudRate = 9600; //波特率
    sp.DataBits = 8;//每发送/接收一个字节的数据数目
    sp.StopBits = StopBits.One;//每发送/接收一个字节的停止位数目

     

    2.方法

    打开端口连接

    public void Open ();

    关闭端口连接

    public void Close ();

     

    读取串口

    public int Read (char[] buffer, int offset, int count);

    参数1 buffer Char[] 将输入写入到其中的字符数组。
    参数2 offset Int32 要写入字符的 buffer 中的偏移量。
    参数3 count Int32 最多读取的字符数。 如果 count 大于输入缓冲区中的字符数,则读取较少的字符。
    返回 Int32 读取的字符数

    写入数据

    查看机器COM口数量

        class Program
        {
            static void Main(string[] args)
            {
                string[] ports = SerialPort.GetPortNames();//遍历COM口返回数组
    
                foreach (string port in ports)
                {
                    Console.WriteLine(port);
                }
    
                Console.ReadLine();
            }
        }

    四、接受串口数据方式

    (1)连续输出和命令输出

    例如:

     (2)连续输出的格式

    例如:托利多地秤串口通讯

     代码:

    (3)命令输出

    代码:

  • 相关阅读:
    react实现拖拽
    JS实现判断滚动条滚到页面底部并执行事件的方法
    获取地址中的参数 封装在params对象里面
    git常用命令
    Linux定时任务Crontab命令详解
    tars 部署
    tars 问题汇总
    Mac
    http head
    SSL
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/11392751.html
Copyright © 2020-2023  润新知