设为首页 加入收藏

TOP

.NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用(二)
2019-09-17 18:24:27 】 浏览:68
Tags:.NET Core 跨平台 串口 通讯 Windows/Linux flyfire.CustomSerialPort 使用
summary>
public class SerialSerice { /// <summary> /// 获取计算机的所有串口 /// </summary> public void GetSerial() {
        //CustomSerialPort.GetPortNames() 静态方法,获取计算机的所有串口名称
        //因为已经继承,也可以使用 string[] vs = 串口通讯.GetPortNames();
string[] vs = CustomSerialPort.GetPortNames(); Console.WriteLine("你电脑的串口列表:"); foreach (var i in vs) { Console.WriteLine(i); } } } public class 串口通讯 : CustomSerialPort { public 串口通讯(string portName, int baudRate = 115200, Parity parity = Parity.None, int databits = 8, StopBits stopBits = StopBits.One) :base(portName, baudRate, parity, databits, stopBits) { } } }

 

开始在 Program.cs 中使用

     static void Main(string[] args)
        {
            SerialSerice serialSerice = new SerialSerice();
            serialSerice.GetSerial();
            Console.ReadKey();
        }

运行试试

6,实现把数据写入串口

上面已经获取到串口,要把数据写入一个串口,就要初始化串口类,实现使用串口、向串口写入不同类型、不同进制的数据

为了简单一些,我们使用默认配置。

把代码 Copy 到你的项目,笔者已经详细列举出步骤

namespace SerialPortTest
{
    /// <summary>
    ///  用于封装需要的串口通讯
    /// </summary>
    public class SerialSerice
    {
        //实现串口通讯的对象
        串口通讯 串口;
        /// <summary>
        /// 获取计算机的所有串口 步骤 1
        /// </summary>
        public void GetSerial()
        {
            string[] vs = 串口通讯.GetPortNames();
            Console.WriteLine("你电脑的串口列表(输入名称此端口,注意大小写):");

            foreach (var i in vs)
            {
                Console.WriteLine(i);
            }
        }
        //初始化串口 步骤 2
        public void 初始化(string portname)
        {
            串口 = new 串口通讯(portname);
        串口.Open(); }
//向串口写入数据 步骤 3 public void 写入(string str) { //方式 1 串口.Write(str); Console.WriteLine("已经向串口输入:" + str);         Thread.Sleep(500); //方式 2、3 byte[] b_字符 = Encoding.Default.GetBytes(str); byte[] b_16进制 = new byte[b_字符.Length]; //转16进制再发送 Console.WriteLine("发送的16进制数据:"); for (int i = 0; i < b_字符.Length; i++) { b_16进制[i] = Convert.ToByte(b_字符[i].ToString(), 16); Console.Write(b_16进制[i] + " "); }
        Console.WriteLine();
//方式 2、3 写入串口 串口.Write(b_字符);
        Thread.Sleep(500); 串口.Write(b_16进制);
        Thread.Sleep(500); } }
public class 串口通讯 : CustomSerialPort { public 串口通讯(string portName, int baudRate = 115200, Parity parity = Parity.None, int databits = 8, StopBits stopBits = StopBits.One) : base(portName, baudRate, parity, databits, stopBits) { } } }

服务已经配置好,接下来就是使用写好的服务了。

class Program
    {
        static void Main(string[] args)
        {
            // 初始化串口通讯服务
            SerialSerice 串口功能 = new SerialSerice();

            //显示串口列表、并让用户选择串口
            串口功能.GetSerial();
            string portname= Console.ReadLine();

            //步骤 2 
            串口功能.初始化(portname);

            Console.WriteLine("输入你想发送给客户端的内容,退出请输入 exit");
            //因为示例了三种写入方法,第三种方法需要转换,非数字会报错
            //实际上你可以发送如何类型的数据,就看你怎么写步骤 3 的方法
            Console.WriteLine("只能输入数字!8进制、10进制、16进制均可,请勿输入字符串");
            while (true)
            {
                string str = Console.ReadLine();
                if (str == "exit")
                    break;

                //步骤 3
                串口功能.写入(str);
            }

            Console.ReadKey();
        }

示例:

 

关于进制转换这些,可以找一些文章看,串口通讯对 byte、int16、int32、string 等类型间的转换要求比较高。

7,实现监听串口消息、多设备进行通讯

在开始前,看一下图:

点击展开代码

protected void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int canReadBytesLen = 0;
            if (ReceiveTimeoutEnable)
            {
                while (sp.BytesToRead > 0)
                {
                    canReadBytesLen = sp.BytesToRead;
                    if (receiveDatalen + canReadBytesLen > BufSize)
                    {
                        receiveDatalen = 0;
                        throw new Exception("Serial port r
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.NET高级代码审计(第一课)XmlSe.. 下一篇.NET开源快速开发框架Colder发布 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目