using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Config;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SlnMesnac.Common
{
public sealed class ControlOffLineScanHelper
{
#region 单例实现
private static readonly ControlOffLineScanHelper lazy = new ControlOffLineScanHelper();
public static ControlOffLineScanHelper Instance
{
get
{
return lazy;
}
}
#endregion
#region 变量定义
private static SerialPort serialPort = new SerialPort();
#endregion
///
/// 扫码委托
///
///
///
public delegate void RefreshMaterialCodeStr(string code);
public static event RefreshMaterialCodeStr RefreshMaterialCodeStrEvent;
public Action RecAutoDataAction;
//初始化串口并启动接收数据
public void InstanceSerialPort(string ComPort)
{
try
{
//端口名 注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字
serialPort.PortName = ComPort;// portName;
//波特率 霍尼威尔扫码枪115200,普通9600
serialPort.BaudRate = 115200;
//奇偶校验
serialPort.Parity = Parity.None;
//停止位
serialPort.StopBits = StopBits.One;
//数据位
serialPort.DataBits = 0x8;
//忽略null字节
serialPort.DiscardNull = true;
//接收事件
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
//开启串口
serialPort.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
///
/// 接收数据
///
///
///
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//string result = "";
//result = serialPort.ReadExisting().Trim();
//RecAutoDataAction?.Invoke(result);
//Console.WriteLine(result);
string g_s_Data = "";
try
{
#region
Thread.Sleep(100);
do
{
g_s_Data = serialPort.ReadExisting().Trim();
}
while (serialPort.BytesToRead > 0);
if (g_s_Data.Length > 0)
{
//区分箱体码
RecAutoDataAction?.Invoke(g_s_Data);
//逻辑操作,g_s_Data为条码数据
}
GC.Collect();
#endregion
}
catch (Exception ex)
{
}
}
}
}