You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.3 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
/// <summary>
/// 扫码委托
/// </summary>
/// <param name="materialCodeStr"></param>
/// <param name="ip"></param>
public delegate void RefreshMaterialCodeStr(string code);
public static event RefreshMaterialCodeStr RefreshMaterialCodeStrEvent;
public Action<string> 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());
}
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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)
{
}
}
}
}