Unity的串口操作,正在学习会更新

本文详细介绍了Unity中的串口通信基础知识,包括串口号、波特率、奇偶校验、数据位和停止位的概念,以及Modbus协议和ZigBee的区别。此外,还指导如何在Unity中设置和管理串口,以及可能遇到的问题和解决方案。

Unity中的串口

如下,初学者有很多不明白的地方,或者表述不正确的地方欢迎指正。

2021-4-12 21:24

串口中的专业名词

  1. 串口:
    串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。
    串口号:在"此电脑">右键管理》设备管理器》端口(COM和LPT)中查看串口,一般是虚拟串口,是成对出现的,COM1501对应COM501,客户端是COM501,服务器端COM1501。若运行报错提示串口不存在可以在这里查看是否有对应的虚拟串口。有时又串口也叫端口,这时候就要区别去TCP,UDP这种网络协议中的端口了,在不同的协议中端口的含义不同,注意区分。串口可以同时打开很多个,比如打开COM501,COM502,但是一个一个串口只能同时打开一次,可以参考USB端口,来想象一下。

  2. 波特率:
    波特率表示每秒钟传送的码元符号的个数,它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特率即指每秒传输1个符号。它和比特率不一样,比特率是对信息传输速率(传信率)的度量。波特率一般使用9600.(拷贝来自百度百科)

  3. 奇偶校验:
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。(拷贝来自百度百科)

  4. 数据位:
    数据位是串行通信中的一个概念,在串行异步通信中规定,传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成,如概述图所示(图中未画出奇偶校验位,因为奇偶检验位不是必须有的,如果有奇偶检验位,则奇偶检验位应该在数据位之后,停止位之前)。(拷贝来自百度百科)

  5. 停止位:
    用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。(拷贝来自百度百科)

  6. 从机地址
    接收到的的Modbus指令,例如(01 02 03 FFFF 5678),其中01为从机的地址,代表一个Modbus设备,每一个在Modbus组网中每一个设备都有他自己的从机地址。通过从机地址可以确定是哪一个设备。
    从机地址的分配有手动分配和自动分配。

  7. 起始地址
    接收到的的Modbus指令,例如(01 02 03 FFFF 5678)其中02 是起始地址。
    起始地址有很多其他的名字例如:寄存器起始地址,寄存器地址。
    从机地址是设备,设备上有很多参数,每一个参数对应一个起始地址。通过从机地址和起始地址确定要获取哪一个设备的哪一个参数。
    关于起始地址的几句描述,链接如下:
    有关Modbus起始的几句讨论,不经过很早了。东方俗人,tjig两个人回复

  8. Modbus协议
    物联网通讯协议,有三个变形》
    Modbus RTU:Modbus RTU需要从机地址和串口号,Modbus RTU是一种紧凑的,采用二进制表示数据的方式,RTU格式后续的命令/数据带有循环冗余校验的校验和。
    Modbus ASCII:Modbus ASCII需要从机地址和串口号,Modbus ASCII是一种人类可读的,冗长的表示方式,而ASCII格式采用纵向冗余校验的校验和
    Modbus TCP:Modbus TCP需要IP和端口号,对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和计算。

Modbus RTU,Modbus TCP,Modbus ASCII,所需要的参数是一样的。
Modbus专业介绍⬇
知乎Modbus专栏
简书Modbus协议详解

  1. ZigBee
    ZigBee的知乎连接
  2. MQTT协议
    MQTT菜鸟教程

打开串口需要的东西

引用命名空间

using System.IO.Ports;

声明变量

private SerialPort _slavePort=null;//一个空的串口对象
private string protName="COM502";//串口号
private int baudRate=9600;//波特率
private Parity parity=Parity.None;//奇偶校验
private int dataBits=8;//数据位
private StopBits stopBits=StopBits.One;//停止位

private bool _isOpenPort=false;//判断串口是否打开了

打开串口

打开串口在程序结束之前一定要关闭,不然下次启动程序会报错。

        private void Openports()
        {
            if (_isOpenPort == false)
            {
                _slavePort = new SerialPort(protName, baudRate, parity, dataBits, stopBits);//参数:端口号,波特率,奇偶校验,数据为,停止位
                _slavePort.Open();
                _isOpenPort = true;
            }
        }
     private   void Start()
        {
            Openports();//打开串口
        }

关闭串口

串口被打开一定要关闭

private void ClosePort()
{
           if (_isOpenPort==true)
            {
                _isOpenPort = false;
                _slavePort.Close();
            }
}

在Disable中关闭串口

    protected override void OnDisable()
        {
        	ClosePort();
        }

查看有哪些端口

使用C#自带的控制台程序,可能会提示没有包,升级一下就行了, 在报错的地方使用ALT+ENTER就可以修复错误。

  1. 引用命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO.Ports;

主要是最后一个命名空间

  static void Main(string[] args)
        {
            List<string> cmbPortID = new List<string>();
            string[] ports = SerialPort.GetPortNames();//字符串数组存储端口号
            if (ports.Length > 0)
            {
                for (int i = 0; i < ports.Length; i++)
                {
                    cmbPortID.Add(ports[i]);
                }
            }
            else
            {
                Console.WriteLine("未找到可用串口,请检查连接是否正常!");
            }
            for (int i = 0; i < cmbPortID.Count; i++)
            {
                Console.WriteLine(cmbPortID[i].ToString());
            }
            Console.ReadLine();
        }

控制台和设备管理器查看串口
将脚本随意挂载到GameObject上即可打开COM501串口

可能会遇到的错误

  1. 提示串口不存在
    在"此电脑">右键管理》设备管理器》端口(COM和LPT)中查看串口,检查是否有对应的串口

  2. 串口打开失败
    结束程序之后打开的串口是否被关闭了,重新启动Unity并在结束程序之前关闭串口。

  3. 安装包之后VS还是会报错。提示{ 命名空间“System.IO”中不存在类型或命名空间名“Ports”(是否缺少程序集引用?) }或者提示 { 明明空间转移请使用V=4.000},解决方式:去Unity中修改API,从2.0升级为4.x,步骤Edit>Project Setting>Player>Api Compatibility Level 从.NET Standed 2.0换成。NET 4.x。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值