设为首页 加入收藏

TOP

.NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用(一)
2019-09-17 18:24:27 】 浏览:66
Tags:.NET Core 跨平台 串口 通讯 Windows/Linux flyfire.CustomSerialPort 使用

 目录

1,前言

2,安装虚拟串口软件

3,新建项目,加入 flyfire.CustomSerialPort

4,flyfire.CustomSerialPort 说明

5,开始使用 flyfire.CustomSerialPort

6,实现把数据写入串口

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

8,Modbus 协议的实现例子

1,前言

开发环境:在 Visual Studio 2017,.NET Core 2.x

串口通讯用于设备之间,传递数据,物联网设备中广泛使用串口方式连接通讯,物联网通讯协议 :Modbus 协议 ASCII、RTU、TCP模式是应用层的协议,与通讯方式无关。

笔者现在实现的是 串口通信,实现后,可以在上层加上 Modbus 协议,笔者的另一篇文章即是在串口上实现 Modbus 协议,计算中心向物联网设备发送消息,要求设备响应,传送设备信息、检测状态等。

本文是 串口通讯 的实现。

2,安装虚拟串口软件

由于开发在 Windows,也为了调试方便,使用需要安装虚拟串口软件:  Virtual Serial Port Driver

安装完成后

添加串口

请添加 4-6 个串口,COM1,COM2,COM3,COM4 ... ...

关机重启

好了,为了使串口生效,请关机重启(不一定要关机,不过为了避免出现问题,还是关机重启比较好)。

开机后,打开 设备管理器 ,查看 设备 - 端口(COM 和 LPT),出现如下图所示,说明正常

 原理

因为是虚拟串口,有些问题需要注意一下

A B(或者说服务端、客户端)不能使用同一个串口,你在设备管理器查看串口时(上面也有图),是不是看到

COM1 -> COM2

COM2 -> COM1

因为这是一个虚拟串口,所以只能是单方向的,所以 A、B 需要分别使用两个串口进行通讯,而虚拟串口把 COM1 - COM2 连接起来了。我们不需要关心这个,这里只是说明一下。

3,新建项目,加入 flyfire.CustomSerialPort

新建一个 .NET Core 控制台项目

名字可以随便起,笔者用了 SerialPortTest ,那我们都用这个吧

添加 flyfire.CustomSerialPort

在项目中 添加 Nuget,搜索 flyfire.CustomSerialPort ,然后安装

把类库需要的 Linux 依赖库添加到项目中,关于原因、添加方法,可以看笔者的另一篇文章 https://www.cnblogs.com/whuanle/p/10499498.html#4

4,flyfire.CustomSerialPort 说明

CustomSerialPort 类,所有功能都集中在这里面了,笔者将详细说明此类下字段、方法等的使用

 

protected SerialPortStream sp;
  • 支持通讯串口通讯的类
public CustomSerialPort(string portName, int baudRate = 115200,
Parity parity = Parity.None, int databits = 8, StopBits stopBits = StopBits.One);

用于初始化一个串口,使用此串口进行通讯

  • portName  串口名称
  • baudRate  比特率,是指每秒传送的比特(bit)数,默认115200bps,不清楚 -> 百度
  • parity     表示奇偶性校验方式,枚举,None:没有校验为,Odd:奇校验,Even:偶检验,Space:总为0,Mark:总为1
  • databits  设置数据位,这里表示 8位
  • stopBits  停止位,One,One5,Twe方便表示1、1.5、2个停止位

因为串口设备通讯是在 OSI 七层的传输层,所以对这些都有相应的规定。TCP/IP 相对于 串口 来说,不必要关注这些。

        public int ReceiveTimeout { get; set; }  //接收超时时间
        public bool ReceiveTimeoutEnable { get; set; }  
        public bool RtsEnable { get; set; }    //不详
        public bool DtrEnable { get; set; }    //不详
        public bool IsOpen { get; }        //检测是否在使用
        public StopBits StopBits { get; set; }  //枚举,上面说明的
        public int DataBits { get; set; }    //上面说明了
        public Parity Parity { get; set; }    //枚举,上面说明了
        public int BaudRate { get; set; }
        public int BufSize { get; set; }
        public string PortName { get; set; }    //使用的串口名
     public event CustomSerialPortReceivedEventHandle ReceivedEvent;    //一个事件,可以把接收到消息后需要触发的时间绑定到此事件

        public static string ByteToHexStr(byte[] bytes);              //把比特流转为字符串
        public static string[] GetPortNames();
        public void Close();                              //关闭串口
        public void Dispose();
        public bool Open();                                //释放串口
        public void Write(string text);                        //以字符串的形式写入串口
        public void Write(byte[] buffer);                       //以字节流的方式写入串口(推荐)
        public void WriteLine(string text);                      //写入字符串,应该是与Modbus ASCII有关,Ascii方式需要在数据后面加上换行符表示已经结束传送
        protected void ReceiveTimeoutCheckFunc();
        protected void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e);  //后台线程处理,表示收到串口消息后,触发那些事件

以上,就是对 flyfire.CustomSerialPort 的说明,下面笔者说明怎么使用。

5,开始使用 flyfire.CustomSerialPort

 新建一个类 SerialSerice.cs

新建一个类 SerialSerice.cs ,设计此类用于提供串口通讯服务。

在 SerialSerice.cs 引入 

using flyfire.IO.Ports;
using RJCP.IO.Ports;
using System.Threading;

编写以下代码(你可能觉得有些奇怪,原因后面说),先不管这些东西,也不要管为什么这样写

namespace SerialPortTest
{
    /// <summary>
    ///  用于封装需要的串口通讯
    /// </
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.NET高级代码审计(第一课)XmlSe.. 下一篇.NET开源快速开发框架Colder发布 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目