作者小头像 Lv.1
6 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
0
6
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2019/12/09 17:13:26 最后回复 噜噜咪 2020/01/04 20:36:32 版块 HCDE
55824 561 5
他的回复:
.Net Core下SerailPort串口编程.Net下串口编程变得非常简单,因为内置了SerialPort组件。跨平台的.Net Core可以在Linux下使用,包括类似树莓派这样的设备提供一个可运行的demopublic class SerialPortService { private readonly SerialPort _SerialPort; ///  /// 返回卡号和COM口 ///  private Action _Callback; private readonly string _PortName; ///  /// 端口是否打开 ///  public bool IsOpen => _SerialPort.IsOpen; ///  /// 由于设备被拔出等原因,重新打开 ///  ///  public bool ReStart() { if (_SerialPort != null && !_SerialPort.IsOpen && _Callback != null && _PortName != string.Empty) { _SerialPort.Open(); _SerialPort.DiscardInBuffer(); return true; } else return false; } ///  /// 初始化 ///  /// 端口号 /// 波特率 /// 数据位长度 /// 停止位数 /// 奇偶校验 public SerialPortService(string portName, int baudrate = 9600, int databits = 8, StopBits stopbit = StopBits.One, Parity parity = Parity.None) { _PortName = portName; _SerialPort = new SerialPort(portName) { Parity = parity,// Parity.None, BaudRate = baudrate,// 9600, DataBits = databits,//8, StopBits = stopbit,//StopBits.One, DiscardNull = true }; _SerialPort.DataReceived += SerialPort_DataReceived; } ///  /// 打卡端口监听,并回调返回数据 ///  /// 回调事件(卡号,端口号) /// 成功返回ok,失败返回错误信息 public string Start(Action action) { _Callback = action; string result = "Success"; try { _SerialPort.Open(); _SerialPort.DiscardInBuffer(); } catch (Exception ex) { result = ex.Message; } return result; } public void Stop() { if (_SerialPort.IsOpen) _SerialPort.Close(); } private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { var data = _SerialPort.ReadExisting(); if (data.Length > 11) { data = data.Substring(1, 10); if (int.TryParse(data, out int tmp)) { _Callback(tmp.ToString("X8"), _PortName); } } } }使用起来很简单var sp = new SerialPortService("COM10"); sp.Start((cardno, port) => { Console.WriteLine(cardno); });当端口有数据,将会被输出本场景是针对ID卡打卡获取ID卡号