tnblog
首页
视频
资源
登录

串口通讯

620人阅读 2022/3/14 13:55 总访问:3878 评论:0 收藏:0 手机
分类: .NET
  • 串口通讯,又名:串行端口通讯 主要是通过代码控制硬件操作,中间需要进行连接(端口连接)

  • 本文主要介绍初步连接端口进行数据交互的操作。即:数据读写

  • 所用工具 VS(版本非独),串口工具,串口调试工具

  1. 获取虚拟串口工具

  • 第一个方法

      在电脑上找到:Microsoft Store工具 选择应用 单击搜索串口 选择:超级串口助手  或者 串口调试助手

      可以选择购买也可以选择试用,注意:搜索之后没有东西可能是没有登录,工具需要管理员权限,因为涉及到安装

  2.配置参数 (参数非独)


下面是调试工具的:


串口工具:端口一般为一组,默认COM1和COM2  然后单击Add pair 这时就是创建好虚拟端口了
串口调试工具:在虚拟串口添加好之后,调试工具可以获取到端口号,选择好之后按图配置参数,参数不唯一
                       主要配置参数就是:波特率,数据位,效验位,停止位   数据发送为二进制数据,至于这些参数的意义,可以自行百度
OK,正题来啦 代码到位
3.代码块
  创建控制台应用和窗体应用都可以,本例为控制台应用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Threading;

namespace ModBus
{
    internal class Program
    {
        static void Main(string[] args)
        {
            SerialPort serial = new SerialPort();//新建串口对象

            string portName = "COM1";//端口号
            int baudRate = 9600;//波特率
            Parity parity = Parity.None;//校检位
            int databits = 8;//数据位
            StopBits stopBits = StopBits.One;//终止位
            Encoding encodingType = Encoding.ASCII;//编码类型
            string SendData;
            //------------------------------------------------------
            //初始化
            serial.PortName = portName;
            serial.BaudRate = baudRate;
            serial.Parity = parity;
            serial.DataBits = databits;
            serial.StopBits = stopBits;
            serial.Encoding = encodingType;
            serial.Open();//打开端口


            //发送数据

            SendData = "#011001\r"; //设置发送命令 对应DO2通道打开
            serial.Write(SendData);//发送命令

            //SendData = "#011200\r";//控制DO2通道打开
            //serial.Write(SendData);

            //SendData = "$016\r";//查询状态信息(命令)
            //serial.Write(SendData);
            Thread.Sleep(1000);//线程延迟1000毫秒接受数据 using system.Threading


            //接收数据
            byte[] ReDatas = new byte[serial.BytesToRead];
            serial.Read(ReDatas, 0, ReDatas.Length);
            string content=new UTF8Encoding().GetString(ReDatas);//接收数据转换为字符串
            Console.WriteLine(content);

            //数据解析
            int[] ReDatas_int = new int[7];

            for (int i = 0; i <7; i++)
            {
                if (content[i]<='9'&&content[i]>='0')
                {
                    ReDatas_int[i] = content[i] - '0';
                }
                else if (content[i]<='Z'&&content[i]>='A')
                {
                    ReDatas_int[i] = content[i] - 'A' + 10;
                }
                else
                {
                    ReDatas_int[i]=content[i];
                }
            }


            int[] DOstuas = new int[8];//定义DO通道状态数组
            int wei = ReDatas_int[2];//取第三位
            for (int i = 0; i < 4; i++)
            {

                DOstuas[i] = wei & 1;
                wei= wei>> 1;
            }
            wei = ReDatas_int[1];//取第二位
            for (int i = 0; i < 4; i++)
            {
                DOstuas[i + 4] = wei & 1;
                wei=wei>> 1;
            }
            //输出通道状态
            for (int i = 0; i < 8; i++)
            {
                Console.WriteLine("通道DO" + i + ":" + DOstuas[i]);
            }

            int[] DIstaus = new int[7];
            wei = ReDatas_int[4];
            for (int i = 0; i < 4; i++)
            { 
              DIstaus[i] = wei & 1;
                wei = wei>> 1;
            }
            wei= ReDatas_int[3];
            for (int i = 0; i < 3; i++)
            { 
             DIstaus[i+4]= wei & 1;
                wei=(wei>> 1) & 1;
            }
            //状态输出
            for (int i = 0; i < 7; i++)
            {
                Console.WriteLine("通道DO" + i + ":" + DIstaus[i]);
            }

            serial.Close();//关闭端口

        }
    }
}


注意这里多应用了两个工具包


Threading工具主要用于延迟执行
 
好了本文基本就该完了
注意调试的时候最好打一个断点,在open()方法的位置,防止流水执行,到时候会出现索引超出界限
因为后面的循环是用于获取数据并解析的,但是端口都没有给电脑发送数据,怎么可能可以获取呢对吧

  

评价
与其用时间去get一个未知的以后,不如做好现在,set自己一个好的以后
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2022TNBLOG.NET
技术交流:群号677373950
联系我们:contact@tnblog.net
欢迎加群交流技术