diff --git a/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs b/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
index 67e7e2db..2f7bd499 100644
--- a/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
+++ b/Aucma.Core.ProductOffLine/Business/MvCodeHelper.cs
@@ -1,5 +1,6 @@
using Admin.Core.Common;
using Aucma.Core.Scanner;
+using log4net;
using MvCodeReaderSDKNet;
using StackExchange.Profiling;
using System;
@@ -8,6 +9,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
+using UAParser;
namespace Aucma.Core.ProductOffLine.Business
{
@@ -23,8 +25,17 @@ namespace Aucma.Core.ProductOffLine.Business
// 箱壳扫码器ip
private static string ShellScannerIp = allScanners.First(x => x.Name == "外侧扫码器2").Ip;
+ private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
+
+
+ #region 全局变量定义
+ public static MvCodeReader ShellDevice = null;
+ public static MvCodeReader LinerDevice = null;
+ public static DateTime ShellLiveTime = DateTime.Now;
+ public static DateTime LinerLiveTime = DateTime.Now;
+ #endregion
#region 委托事件
-
+
///
/// 成品下线委托
///
@@ -38,7 +49,7 @@ namespace Aucma.Core.ProductOffLine.Business
///
///
///
- public delegate void RefreshState(string ip);
+ public delegate void RefreshState(string ip,bool flag);
public static event RefreshState RefreshStateEvent;
@@ -59,7 +70,10 @@ namespace Aucma.Core.ProductOffLine.Business
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
if (stBcrResult.nCodeNum == 0)
{
- Console.WriteLine("外侧--->No Read 处理");
+ Console.WriteLine(DateTime.Now + ":外侧--->No Read 处理");
+ log.Info(DateTime.Now + ":外侧--->No Read 处理");
+ //更新扫码器存活时间
+ ShellLiveTime = DateTime.Now;
}
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
{
@@ -67,21 +81,26 @@ namespace Aucma.Core.ProductOffLine.Business
if (bIsValidUTF8)
{
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
- Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ Console.WriteLine(DateTime.Now + ":Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+
}
else
{
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
- Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ Console.WriteLine(DateTime.Now + ":外侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ log.Info(DateTime.Now + ":外侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
// RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
if (strCode.Trim().TrimEnd('\0').Length == 20)
{
+ //更新扫码器存活时间
+ ShellLiveTime = DateTime.Now;
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
// 业务处理
}
else
{
- Console.WriteLine("外侧--->No Read 处理");
+ Console.WriteLine(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
+ log.Info(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
}
}
@@ -106,7 +125,10 @@ namespace Aucma.Core.ProductOffLine.Business
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
if (stBcrResult.nCodeNum == 0)
{
- Console.WriteLine("内侧--->No Read 处理");
+ Console.WriteLine(DateTime.Now+":内侧--->No Read 处理");
+ log.Info(DateTime.Now + ":内侧--->No Read 处理");
+ // 更新存活时间
+ LinerLiveTime = DateTime.Now;
}
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
{
@@ -114,24 +136,27 @@ namespace Aucma.Core.ProductOffLine.Business
if (bIsValidUTF8)
{
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
- Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ Console.WriteLine(DateTime.Now + ":Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
}
else
{
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
- Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ Console.WriteLine(DateTime.Now + ":内侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
+ log.Info(DateTime.Now + ":内侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
// RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), LinerScannerIp);
if (strCode.Trim().TrimEnd('\0').Length == 20)
{
+ // 更新存活时间
+ LinerLiveTime = DateTime.Now;
// 业务处理
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), LinerScannerIp);
}
else
{
- Console.WriteLine("内侧--->No Read 处理");
+ Console.WriteLine(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
+ log.Info(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
}
-
}
}
@@ -208,13 +233,17 @@ namespace Aucma.Core.ProductOffLine.Business
// ch:打开设备 | en:Open device
nRet = device.MV_CODEREADER_OpenDevice_NET();
+
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
Console.WriteLine("Open device failed:{0:x8}", nRet);
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
break;
}
+
// 刷新扫码器状态
- RefreshStateEvent?.Invoke("外侧");
+ RefreshStateEvent?.Invoke("外侧",true);
// ch:注册回调函数 | en:Register image callback
ImageCallback = new MvCodeReader.cbOutputEx2delegate(ShellImageCallbackFunc);
nRet = device.MV_CODEREADER_RegisterImageCallBackEx2_NET(ImageCallback, IntPtr.Zero);
@@ -231,8 +260,11 @@ namespace Aucma.Core.ProductOffLine.Business
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
break;
}
-
+
+ // 关闭使用
+ ShellDevice = device;
Console.WriteLine("Press enter to exit");
+ Console.WriteLine(DateTime.Now.ToString());
Console.ReadLine();
// ch:停止抓图 | en:Stop grabbing
@@ -339,10 +371,12 @@ namespace Aucma.Core.ProductOffLine.Business
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
Console.WriteLine("Open device failed:{0:x8}", nRet);
+ // 刷新扫码器状态
+ RefreshStateEvent?.Invoke("外侧", false);
break;
}
// 刷新扫码器状态
- RefreshStateEvent?.Invoke("内侧");
+ RefreshStateEvent?.Invoke("内侧", true);
// ch:注册回调函数 | en:Register image callback
ImageCallback = new MvCodeReader.cbOutputEx2delegate(LinerImageCallbackFunc);
@@ -360,8 +394,11 @@ namespace Aucma.Core.ProductOffLine.Business
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
break;
}
+ // 关闭使用
+ ShellDevice = device;
Console.WriteLine("Press enter to exit");
+ Console.WriteLine(DateTime.Now.ToString());
Console.ReadLine();
// ch:停止抓图 | en:Stop grabbing
@@ -401,6 +438,114 @@ namespace Aucma.Core.ProductOffLine.Business
}
+ ///
+ /// 关闭内胆扫码器
+ ///
+ public static void CloseLiner()
+ {
+ int nRet = MvCodeReader.MV_CODEREADER_OK;
+ MvCodeReader device = LinerDevice;
+ // ch:停止抓图 | en:Stop grabbing
+ nRet = device.MV_CODEREADER_StopGrabbing_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
+ return;
+ }
+
+ // ch:关闭设备 | en:Close device
+ nRet = device.MV_CODEREADER_CloseDevice_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Close device failed{0:x8}", nRet);
+ return;
+ }
+
+ // ch:销毁设备 | en:Destroy device
+ nRet = device.MV_CODEREADER_DestroyHandle_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Destroy device failed:{0:x8}", nRet);
+ return;
+ }
+ Console.WriteLine("关闭内胆扫码器成功");
+ return;
+ }
+
+ ///
+ /// 关闭箱壳扫码器
+ ///
+ public static void CloseShell()
+ {
+ int nRet = MvCodeReader.MV_CODEREADER_OK;
+ MvCodeReader device = ShellDevice;
+ // ch:停止抓图 | en:Stop grabbing
+ nRet = device.MV_CODEREADER_StopGrabbing_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
+ return;
+ }
+
+ // ch:关闭设备 | en:Close device
+ nRet = device.MV_CODEREADER_CloseDevice_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Close device failed{0:x8}", nRet);
+ return;
+ }
+
+ // ch:销毁设备 | en:Destroy device
+ nRet = device.MV_CODEREADER_DestroyHandle_NET();
+ if (MvCodeReader.MV_CODEREADER_OK != nRet)
+ {
+ Console.WriteLine("Destroy device failed:{0:x8}", nRet);
+ return;
+ }
+ Console.WriteLine("关闭箱壳扫码器成功");
+ return;
+ }
+
+ ///
+ /// 监测扫码器15分钟以内是否有触发操作,如果超时未触发,关闭再重连扫码器
+ ///
+ public static void JudgeShellIsConnectedAndReConnect()
+ {
+ try
+ {
+ DateTime dateTime = DateTime.Now;
+ TimeSpan timeSpan = dateTime.Subtract(ShellLiveTime);
+ Task.Run(() =>
+ {
+ if (timeSpan.TotalMinutes >= 1)
+ {
+ Console.WriteLine("箱壳扫码器超时,重连");
+ ShellLiveTime = dateTime;
+ CloseShell();
+ Shell();
+ }
+ });
+ Task.Run(() =>
+ {
+ TimeSpan timeSpan2 = dateTime.Subtract(LinerLiveTime);
+ if (timeSpan2.TotalMinutes >= 1)
+ {
+ Console.WriteLine("内胆扫码器超时,重连");
+ LinerLiveTime = dateTime;
+ CloseLiner();
+ Liner();
+ }
+ });
+
+ }
+ catch (Exception ex)
+ {
+ log.Error("JudgeShellIsConnectedAndReConnect判断扫码器重连方法异常:"+ex.Message.ToString());
+ }
+
+ }
+
+
#region 判断字符编码
///
/// 判断字符编码