退出软件断开与板子连接

This commit is contained in:
maqiao 2025-01-18 09:39:33 +08:00
parent 5d04921387
commit 386a663026
4 changed files with 40 additions and 20 deletions

View File

@ -3,7 +3,7 @@
<connectionStrings> <connectionStrings>
<!-- 数据库连接字符串 --> <!-- 数据库连接字符串 -->
<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />--> <!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
<add name="database" connectionString="server=127.0.0.1;port=3306;database=xiangtan_mazuike_xx;userid=root;password=root" /> <add name="database" connectionString="server=127.0.0.1;port=3306;database=xiangtan_mazuike;userid=root;password=root" />
</connectionStrings> </connectionStrings>
<!--<runtime> <!--<runtime>
--><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!-- --><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
@ -37,7 +37,7 @@
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow--> <!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="2" /> <add key="returnDrugMode" value="2" />
<!-- 自动退出时间单位秒为0时不自动退出 --> <!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="5"/> <add key="autoExit" value="0"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 --> <!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="180"/> <add key="stopRecord" value="180"/>

View File

@ -4,6 +4,7 @@ using DM_Weight.util;
using DM_Weight.ViewModels; using DM_Weight.ViewModels;
using log4net; using log4net;
using Mina.Core.Future; using Mina.Core.Future;
using Mina.Core.Session;
using Mina.Filter.Codec; using Mina.Filter.Codec;
using Mina.Filter.Logging; using Mina.Filter.Logging;
using Mina.Transport.Socket; using Mina.Transport.Socket;
@ -25,18 +26,18 @@ namespace DM_Weight.Port
private readonly ILog logger = LogManager.GetLogger(typeof(SocketHelper)); private readonly ILog logger = LogManager.GetLogger(typeof(SocketHelper));
AsyncSocketConnector acceptor = new AsyncSocketConnector(); AsyncSocketConnector acceptor = new AsyncSocketConnector();
IConnectFuture iConnectFuture; IConnectFuture iConnectFuture;
public bool OpenStatus=false; public bool OpenStatus = false;
public bool ConnectedStatus = false; public bool ConnectedStatus = false;
//多线程退出标识 //多线程退出标识
public bool IsMultiThread = false; public bool IsMultiThread = false;
string ip = ConfigurationManager.AppSettings["modbusIp"].ToString(); string ip = ConfigurationManager.AppSettings["modbusIp"].ToString();
int port =Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]); int port = Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
IEventAggregator _eventAggregator; IEventAggregator _eventAggregator;
FingerprintUtil _fingerprintUtil; FingerprintUtil _fingerprintUtil;
public DateTime dateTime { get; set; } = DateTime.Now; public DateTime dateTime { get; set; } = DateTime.Now;
public SocketHelper(IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil) public SocketHelper(IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil)
{ {
_fingerprintUtil= fingerprintUtil; _fingerprintUtil = fingerprintUtil;
_eventAggregator = eventAggregator; _eventAggregator = eventAggregator;
acceptor.ExceptionCaught += (o, e) => acceptor.ExceptionCaught += (o, e) =>
{ {
@ -59,18 +60,22 @@ namespace DM_Weight.Port
OpenStatus = (bool)e.Message; OpenStatus = (bool)e.Message;
logger.Info("MessageReceived>>>>>>>>>>>>>>>>" + OpenStatus); logger.Info("MessageReceived>>>>>>>>>>>>>>>>" + OpenStatus);
}; };
acceptor.SessionClosed += (o, e) => acceptor.SessionClosed += new EventHandler<IoSessionEventArgs>(SessionCloseMethod);
{
logger.Info("SessionClosed"); //acceptor.SessionClosed += (o, e) =>
//Task.Delay(50).Wait(); //{
SocketConnect(); // logger.Info($"SessionClosed;ExitFlag:{ExitFlag}");
Task.Factory.StartNew(() => // //Task.Delay(50).Wait();
{ // if (!ExitFlag)
_fingerprintUtil.FingerDisconnect(); // {
}); // SocketConnect();
}; // Task.Factory.StartNew(() =>
// {
// _fingerprintUtil.FingerDisconnect();
// });
// }
//};
this.SocketConnect(); this.SocketConnect();
} }
int i = 0; int i = 0;
@ -84,14 +89,13 @@ namespace DM_Weight.Port
{ {
if (i <= 3) if (i <= 3)
{ {
Thread.Sleep(1950);
//没连上会再连两次 //没连上会再连两次
SocketConnect(); SocketConnect();
} }
else else
{ {
logger.Error($"尝试{i}次连接后均连接不上"); logger.Error($"尝试{i}次连接后均连接不上");
//AlertMsg alertMsg = new AlertMsg //AlertMsg alertMsg = new AlertMsg
//{ //{
// Message = $"网口连接断开!", // Message = $"网口连接断开!",
@ -107,9 +111,24 @@ namespace DM_Weight.Port
ConnectedStatus = iConnectFuture.Connected; ConnectedStatus = iConnectFuture.Connected;
} }
private void SessionCloseMethod(System.Object o, IoSessionEventArgs e)
{
logger.Info($"SessionClosed");
SocketConnect();
Task.Factory.StartNew(() =>
{
_fingerprintUtil.FingerDisconnect();
});
}
public void SocketDisConnect()
{
acceptor.SessionClosed -=new EventHandler<IoSessionEventArgs>(SessionCloseMethod);
iConnectFuture.Session.CloseNow();
}
public void SendMessage(MyBaseMessage baseMessage) public void SendMessage(MyBaseMessage baseMessage)
{ {
if(!ConnectedStatus) if (!ConnectedStatus)
{ {
SocketConnect(); SocketConnect();
} }

View File

@ -503,7 +503,7 @@ namespace DM_Weight.ViewModels
&& cs.Quantity >= oi._OrderDetail.Quantity).First(); && cs.Quantity >= oi._OrderDetail.Quantity).First();
if (cs == null) if (cs == null)
{ {
empChannelStock += $"{oi.OrderNo},{oi._OrderDetail.DrugId},{oi._OrderDetail.SetManuNo},{oi._OrderDetail.SetEffDate};"; empChannelStock += $"{oi.OrderNo},{oi._OrderDetail.DrugId},{oi._OrderDetail.SetManuNo};";
continue; continue;
} }
cs.Quantity = cs.Quantity - oi._OrderDetail.Quantity; cs.Quantity = cs.Quantity - oi._OrderDetail.Quantity;

View File

@ -377,6 +377,7 @@ _exitCommand ??= new DelegateCommand(Exit);
void Exit() void Exit()
{ {
//_chkFunction.HIKLoginOut(); //_chkFunction.HIKLoginOut();
_socketHelper.SocketDisConnect();
Process.GetCurrentProcess().Kill(); Process.GetCurrentProcess().Kill();
Environment.Exit(0); Environment.Exit(0);
} }