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.

148 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO.Ports;
using System.Data;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Net;
using System.Net.Sockets;
using System.Configuration;
namespace AUCMA_Air.Business
{
public class ControlOffLineScan
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
extern static int GetTickCount();
public Action<string> RecAutoDataAction;
public string m_ComPort = ConfigurationManager.AppSettings["ComPort"];
#region 串口扫码器变量
//条码
public static SerialPort BarScanPort;
public static bool BarScanConn = false; //条码扫描设备连接状态
#endregion
#region 初始化
public void SystemInitialization()//初始化
{
InitBarScanPortProperty();//初始化串口扫码器
}
#endregion
public void ScanProvider(string m_ComPort)
{
try
{
BarScanPort = new SerialPort();
//AGVPort.PortName = BaseSystemInfo.SerialPortName;//设置串口名 默认COM1
BarScanPort.PortName = m_ComPort;
BarScanPort.BaudRate = 115200;//设置串口的波特率
BarScanPort.StopBits = StopBits.One;
BarScanPort.DataBits = 8;//设置数据位
BarScanPort.Parity = Parity.None;
BarScanPort.ReadTimeout = -1;//设置超时读取时间
//sp.RtsEnable=true; //定义DataReceived事件当串口收到数据后触发事件
BarScanPort.ReceivedBytesThreshold = 1;
}
catch (Exception)
{
throw;
}
}
public bool Open()
{
try
{
BarScanPort.Open();
return true;
}
catch (Exception)
{
return false;
}
}
public void InitBarScanPortProperty()//设置串口的属性
{
try
{
BarScanPort = new SerialPort();
//AGVPort.PortName = BaseSystemInfo.SerialPortName;//设置串口名 默认COM1
BarScanPort.PortName = m_ComPort;
BarScanPort.BaudRate = 9600;//设置串口的波特率
BarScanPort.StopBits = StopBits.One;
BarScanPort.DataBits = 8;//设置数据位
BarScanPort.Parity = Parity.None;
BarScanPort.ReadTimeout = -1;//设置超时读取时间
//sp.RtsEnable=true; //定义DataReceived事件当串口收到数据后触发事件
BarScanPort.ReceivedBytesThreshold = 1;
BarScanPort.DataReceived -= new SerialDataReceivedEventHandler(sp_DataReceived);
BarScanPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
BarScanPort.Open();
BarScanConn = true;
ICSharpCode.Core.LoggingService.Info("手持扫码枪连接成功!");
}
catch(Exception ex)
{
ICSharpCode.Core.LoggingService.Error("error:接收返回消息异常!具体原因:" + ex.Message);
BarScanConn = false;
}
}
public void Dispose()
{
if (BarScanPort!= null)
{
if (BarScanPort.IsOpen)
{
BarScanPort.Close();
}
BarScanPort.Dispose();
BarScanPort = null;
}
}
#region 串口扫码器数据获取
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string g_s_Data = "";
try
{
#region
Thread.Sleep(100);
do
{
g_s_Data = BarScanPort.ReadExisting().Trim();
}
while (BarScanPort.BytesToRead > 0);
if (g_s_Data.Length > 0)
{
ICSharpCode.Core.LoggingService.Info("获取手持条码:" + g_s_Data);
//区分箱体码
RecAutoDataAction?.Invoke(g_s_Data);
//逻辑操作g_s_Data为条码数据
}
GC.Collect();
#endregion
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("error:接收返回消息异常!具体原因:" + ex.Message);
//SysBusinessFunction.WriteLog();
}
}
#endregion
}
}