diff --git a/DM_Weight/Finger/FingerprintUtil.cs b/DM_Weight/Finger/FingerprintUtil.cs
index 349ff39..bb861c1 100644
--- a/DM_Weight/Finger/FingerprintUtil.cs
+++ b/DM_Weight/Finger/FingerprintUtil.cs
@@ -20,7 +20,7 @@ namespace DM_Weight.Finger
{
private readonly ILog logger = LogManager.GetLogger(typeof(FingerprintUtil));
- public zkemkeeper.CZKEMClass axCZKEM1; //= new zkemkeeper.CZKEMClass();
+ public zkemkeeper.CZKEMClass axCZKEM1= new zkemkeeper.CZKEMClass();
public bool bIsConnected = false;
private string fingerIp = ConfigurationManager.AppSettings["fingerIp"].ToString();
@@ -42,12 +42,12 @@ namespace DM_Weight.Finger
{
try
{
- axCZKEM1 = new CZKEMClass();
+ //axCZKEM1 = new CZKEMClass();
bIsConnected = axCZKEM1.Connect_Net(fingerIp, fingerPort);
logger.Info($"连接指纹机,IP:{fingerIp},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
if (bIsConnected)
{
- if (axCZKEM1.RegEvent(machineNumber, 65535))
+ if (axCZKEM1.RegEvent(machineNumber, 9))
{
this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
//this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger);
@@ -67,6 +67,24 @@ namespace DM_Weight.Finger
logger.Info($"连接指纹机异常{ex.Message.ToString()}");
}
}
+ ///
+ /// 用于退出登录重连指纹机
+ ///
+ public void FingerDisconnect()
+ {
+ try
+ {
+ axCZKEM1.Disconnect();
+ this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
+ this.axCZKEM1.OnEnrollFingerEx -= new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx);
+ ConnectionMain();
+ }
+ catch (Exception ex)
+ {
+ logger.Info($"指纹机Disconnect异常{ex.Message.ToString()}");
+ ConnectionMain();
+ }
+ }
//If your fingerprint(or your card) passes the verification,this event will be triggered
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
diff --git a/DM_Weight/Models/IpAndPort.cs b/DM_Weight/Models/IpAndPort.cs
new file mode 100644
index 0000000..185033e
--- /dev/null
+++ b/DM_Weight/Models/IpAndPort.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DM_Weight.Models
+{
+ ///
+ /// 记录系统中网口通信中用到的ip与端口号
+ ///
+ public class IpAndPort
+ {
+ public string Ip { get; set; }
+ public int Port { get; set; }
+ }
+}
diff --git a/DM_Weight/Port/KeepAliveSocket.cs b/DM_Weight/Port/KeepAliveSocket.cs
new file mode 100644
index 0000000..73fe290
--- /dev/null
+++ b/DM_Weight/Port/KeepAliveSocket.cs
@@ -0,0 +1,72 @@
+using Polly;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Net;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using DM_Weight.Models;
+using DM_Weight.ViewModels;
+using log4net;
+
+namespace DM_Weight.Port
+{
+ public class KeepAliveSocket
+ {
+ ///
+ /// 生成带有心跳检测的socket
+ ///
+ public class KeepALiveSocket
+ {
+
+ private static ILog socketLogger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
+ public static Socket MakeKeepALiveSocket(string ip, int port)
+ {
+ uint dummy = 0;
+ byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
+ BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);//启用Keep-Alive
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));//在这个时间间隔内没有数据交互,则发送探测包
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);//发探测包时间间隔
+ IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ip), port);
+ Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ _socket = Policy.Handle()
+ .Retry(3, (exception, retryCount) => {
+ socketLogger.Info($"建立Socket,第{retryCount}次重试", exception);
+ // return TimeSpan.FromSeconds (1);
+ })
+ .Execute(() => {
+ _socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
+ _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
+ _socket.Connect(iep);
+ return _socket;
+ });
+ return _socket;
+ }
+ public static Socket MakeKeepALiveSocket(IpAndPort ipAndPort)
+ {
+ uint dummy = 0;
+ byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
+ BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);//启用Keep-Alive
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));//在这个时间间隔内没有数据交互,则发送探测包
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);//发探测包时间间隔
+ IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ipAndPort.Ip), ipAndPort.Port);
+ Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ _socket = Policy.Handle()
+ .Retry(3, (exception, retryCount) => {
+ socketLogger.Info($"建立Socket,第{retryCount}次重试", exception);
+ // return TimeSpan.FromSeconds (1);
+ })
+ .Execute(() => {
+ _socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
+ _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
+ _socket.Connect(iep);
+ return _socket;
+ });
+ return _socket;
+ }
+
+ }
+ }
+}
diff --git a/DM_Weight/Port/ModbusHelper.cs b/DM_Weight/Port/ModbusHelper.cs
index b058017..648e9a4 100644
--- a/DM_Weight/Port/ModbusHelper.cs
+++ b/DM_Weight/Port/ModbusHelper.cs
@@ -1,8 +1,10 @@
-using DM_Weight.ViewModels;
+using DM_Weight.msg;
+using DM_Weight.ViewModels;
using log4net;
using log4net.Repository.Hierarchy;
using Modbus.Device;
using Polly;
+using Prism.Events;
using System;
using System.Collections.Generic;
using System.Configuration;
@@ -11,23 +13,28 @@ using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
+using System.Speech.Synthesis;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using static DM_Weight.Port.KeepAliveSocket;
namespace DM_Weight.Port
{
public class ModbusHelper
{
+ private static ModbusHelper instance;
private ModbusIpMaster master;
private Socket socket;
private TcpClient client;
- private static ModbusHelper instance;
- //private static readonly object objLock = new object();
private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
+ string ip = ConfigurationManager.AppSettings["modbusIp"].ToString();
+ int port = Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
+ public static bool BoxOperate { get; set; }
private ModbusHelper()
{
- socket = MakeKeepALiveSocket();
+ logger.Info("ModbusHelper");
+ socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port);
client = new TcpClient();
client.Client = socket;
master = ModbusIpMaster.CreateIp(client);
@@ -35,14 +42,6 @@ namespace DM_Weight.Port
}
public static ModbusHelper GetInstance()
{
- //if (instance == null)
- //{
- // lock (objLock)
- // {
- // if (instance == null)
- // instance = new ModbusHelper();
- // }
- //}
if (instance == null)
{
instance = new ModbusHelper();
@@ -51,52 +50,79 @@ namespace DM_Weight.Port
}
private void SetModusIpMaster()
{
- Debug.WriteLine("SetModusIpMaster");
- socket = MakeKeepALiveSocket();
+ logger.Info("SetModusIpMaster");
+ socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port); ;
client = new TcpClient();
client.Client = socket;
master = ModbusIpMaster.CreateIp(client);
}
+
public bool[] GetAllBoxState()
{
- if (ConfigurationManager.AppSettings["test"] != null && ConfigurationManager.AppSettings["test"].ToString() == "Y")
- {
- return new bool[] { false,false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
- }
- bool[] bools = Policy.Handle()
- .Retry(3, (exception, retryCount) =>
- {
- this.Dispose();
- //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
- logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}");
- Thread.Sleep(50);
- this.SetModusIpMaster();
- // return TimeSpan.FromSeconds (1);
- }).Execute(() =>
- {
- bool[] flags = new bool[18];
- var result = master.ReadInputRegisters(1, 0x0033, 2);
- var r1 = Convert.ToString(((int)result[0] >> 14) | ((int)result[1] << 2), 2).PadLeft(18, '0');
- var r2 = r1.ToCharArray();
- Debug.WriteLine("r2=>" + string.Join(", ", r2));
- for (int i = 0; i < 18; i++)
+ //bool[] bools = { true };
+ //if (BoxOperate)
+ //{
+ //if (ConfigurationManager.AppSettings["test"] != null && ConfigurationManager.AppSettings["test"].ToString() == "Y")
+ //{
+ // return new bool[] { false,false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
+ //}
+ bool[] bools = Policy.Handle()
+ .Retry(3, (exception, retryCount) =>
{
- flags[i] = r2[17 - i] == '1' ? true : false;
- }
- logger.Info($"获取所有箱子门状态返回:{string.Join(',',flags)}");
- Thread.Sleep(50);
- return flags;
- });
+ this.Dispose();
+ //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
+ logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}");
+ Thread.Sleep(50);
+ this.SetModusIpMaster();
+ BoxOperate = false;
+ // return TimeSpan.FromSeconds (1);
+ }).Execute(() =>
+ {
+ bool[] flags = new bool[18];
+ if(master==null)
+ {
+ this.SetModusIpMaster();
+ }
+ var result = master.ReadInputRegisters(1, 0x0033, 2);
+ var r1 = Convert.ToString(((int)result[0] >> 14) | ((int)result[1] << 2), 2).PadLeft(18, '0');
+ var r2 = r1.ToCharArray();
+ logger.Info("r2=>" + string.Join(", ", r2));
+ //var r2=new char[18] { '0','0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' };
+ for (int i = 0; i < 18; i++)
+ {
+ flags[i] = r2[17 - i] == '1' ? true : false;
+ }
+ logger.Info($"获取所有箱子门状态返回:{string.Join(',', flags)};");
+ //bool allFalse = Array.TrueForAll(flags, b => b == false);
+ //if (!allFalse)
+ //{
+ // Task.Delay(500);
+ // Task.Factory.StartNew(async () =>
+ // {
+ // SpeakAsync("药箱已打开,请及时关闭");
+ // await Task.Delay(15000);
+ // });
+ //}
+ //else
+ //{
+ // BoxOperate = false;
+ //}
+
+ return flags;
+ });
+ //}
return bools;
}
public bool OpenBoxDoor(int boxNum)
{
- if (ConfigurationManager.AppSettings["test"]!=null&& ConfigurationManager.AppSettings["test"].ToString()=="Y")
- {
- return true;
- }
- bool bFlag=false;
+ BoxOperate = true;
+ //if (ConfigurationManager.AppSettings["test"]!=null&& ConfigurationManager.AppSettings["test"].ToString()=="Y")
+ //{
+ // return true;
+ //}
+ bool bFlag = false;
+ Thread.Sleep(50);
Policy.Handle().Retry(3, ((exception, retryCount) =>
{
this.Dispose();
@@ -110,6 +136,7 @@ namespace DM_Weight.Port
logger.Info($"正在打开{boxNum}号药箱");
master.WriteSingleRegister(1, (ushort)boxNum, 14);
logger.Info($"开门指令已发送{(ushort)boxNum}");
+ SpeakAsync("药箱已打开,请及时关闭");
//Console.WriteLine($"开门指令已发送{(ushort)boxNum}");
bFlag = true;
});
@@ -122,32 +149,10 @@ namespace DM_Weight.Port
client.Close();
master.Dispose();
}
- public static Socket MakeKeepALiveSocket()
+ private static SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
+ public static void SpeakAsync(string textinfo)
{
- uint dummy = 0;
- byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
- BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);//启用Keep-Alive
- BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));//在这个时间间隔内没有数据交互,则发送探测包
- BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);//发探测包时间间隔
- //IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.13"), 502);
- string modbusIp = ConfigurationManager.AppSettings["modbusIp"].ToString();
- int modbusPort =Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
- IPEndPoint iep = new IPEndPoint(IPAddress.Parse(modbusIp), modbusPort);
- Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- _socket = Policy.Handle()
- .Retry(3, (exception, retryCount) =>
- {
- Console.WriteLine($"建立Socket,第{retryCount}次重试", exception);
- // return TimeSpan.FromSeconds (1);
- })
- .Execute(() =>
- {
- _socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
- _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
- _socket.Connect(iep);
- return _socket;
- });
- return _socket;
+ speechSynthesizer.SpeakAsync(textinfo);
}
}
}
diff --git a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
index 8a828d1..5f81c6a 100644
--- a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
@@ -454,72 +454,75 @@ namespace DM_Weight.ViewModels
}
}
}
- List chlList = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5").ToList();//.Select(cl => cl.BelongUser).First();
- if (chlList != null && chlList.Count > 0)
+ else
{
- for (int i = 0; i < chlList.Count; i++)
+ List chlList = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5").ToList();//.Select(cl => cl.BelongUser).First();
+ if (chlList != null && chlList.Count > 0)
{
- ChannelList chl = chlList[i];
- if (Convert.ToDateTime(chl.EffDate).ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
+ for (int i = 0; i < chlList.Count; i++)
{
- switch (chl.DrawerNo)
+ ChannelList chl = chlList[i];
+ if (Convert.ToDateTime(chl.EffDate).ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
{
- case 1:
- Button1Color = Brushes.Yellow;
- break;
- case 2:
- Button2Color = Brushes.Yellow;
- break;
- case 3:
- Button3Color = Brushes.Yellow;
- break;
- case 4:
- Button4Color = Brushes.Yellow;
- break;
- case 5:
- Button5Color = Brushes.Yellow;
- break;
- case 6:
- Button6Color = Brushes.Yellow;
- break;
- case 7:
- Button7Color = Brushes.Yellow;
- break;
- case 8:
- Button8Color = Brushes.Yellow;
- break;
- case 9:
- Button9Color = Brushes.Yellow;
- break;
- case 10:
- Button10Color = Brushes.Yellow;
- break;
- case 11:
- Button11Color = Brushes.Yellow;
- break;
- case 12:
- Button12Color = Brushes.Yellow;
- break;
- case 13:
- Button13Color = Brushes.Yellow;
- break;
- case 14:
- Button14Color = Brushes.Yellow;
- break;
- case 15:
- Button15Color = Brushes.Yellow;
- break;
- case 16:
- Button16Color = Brushes.Yellow;
- break;
- case 17:
- Button17Color = Brushes.Yellow;
- break;
- case 18:
- Button18Color = Brushes.Yellow;
- break;
- default:
- break;
+ switch (chl.DrawerNo)
+ {
+ case 1:
+ Button1Color = Brushes.Yellow;
+ break;
+ case 2:
+ Button2Color = Brushes.Yellow;
+ break;
+ case 3:
+ Button3Color = Brushes.Yellow;
+ break;
+ case 4:
+ Button4Color = Brushes.Yellow;
+ break;
+ case 5:
+ Button5Color = Brushes.Yellow;
+ break;
+ case 6:
+ Button6Color = Brushes.Yellow;
+ break;
+ case 7:
+ Button7Color = Brushes.Yellow;
+ break;
+ case 8:
+ Button8Color = Brushes.Yellow;
+ break;
+ case 9:
+ Button9Color = Brushes.Yellow;
+ break;
+ case 10:
+ Button10Color = Brushes.Yellow;
+ break;
+ case 11:
+ Button11Color = Brushes.Yellow;
+ break;
+ case 12:
+ Button12Color = Brushes.Yellow;
+ break;
+ case 13:
+ Button13Color = Brushes.Yellow;
+ break;
+ case 14:
+ Button14Color = Brushes.Yellow;
+ break;
+ case 15:
+ Button15Color = Brushes.Yellow;
+ break;
+ case 16:
+ Button16Color = Brushes.Yellow;
+ break;
+ case 17:
+ Button17Color = Brushes.Yellow;
+ break;
+ case 18:
+ Button18Color = Brushes.Yellow;
+ break;
+ default:
+ break;
+ }
}
}
}
@@ -821,6 +824,18 @@ namespace DM_Weight.ViewModels
public void OpenBoxAction(string strDrawerNo)
{
+ //bool[] bools = ModbusHelper.GetInstance().GetAllBoxState();
+ //bool allFalse = Array.TrueForAll(bools, b => b == false);
+ //if (!allFalse)
+ //{
+ // Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
+ // return;
+ //}
+ if (ModbusHelper.BoxOperate)
+ {
+ Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
+ return;
+ }
DrawerNo = Convert.ToInt32(strDrawerNo);
MachineRecord machineRecord = new MachineRecord();
machineRecord.MachineId = "DM5";
@@ -840,6 +855,25 @@ namespace DM_Weight.ViewModels
//记录开药箱日志
SqlSugarHelper.Db.Insertable(machineRecord).ExecuteCommand();
ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo);
+ Task.Factory.StartNew(async () =>
+ {
+ bool loop = true;
+ while (loop)
+ {
+ await Task.Delay(9000);
+ bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
+ bool state = Array.TrueForAll(boolsl, b => b == false);
+ if (state)
+ {
+ loop = false;
+ ModbusHelper.BoxOperate = false;
+ }
+ else
+ {
+ ModbusHelper.SpeakAsync("药箱已打开,请及时关闭");
+ }
+ }
+ });
}
}
diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs
index 8f0c821..d5029ab 100644
--- a/DM_Weight/ViewModels/HomeWindowViewModel.cs
+++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs
@@ -37,20 +37,20 @@ namespace DM_Weight.ViewModels
private UserList? _userList2;
- ///
- /// 冰箱温度
- ///
- private string _wd = "恒温冷藏抽屉当前温度2.8(非真实数据)";
- public string WD { get => _wd; set => SetProperty(ref _wd, value); }
- System.Timers.Timer WDTimer;
+ /////
+ ///// 冰箱温度
+ /////
+ //private string _wd = "恒温冷藏抽屉当前温度2.8(非真实数据)";
+ //public string WD { get => _wd; set => SetProperty(ref _wd, value); }
+ //System.Timers.Timer WDTimer;
- System.Timers.Timer WSDTimer;
+ //System.Timers.Timer WSDTimer;
- ///
- /// 是否有冰箱抽屉
- ///
- private string hasFridge = ConfigurationManager.AppSettings["hasFridge"].ToString().Equals("1") ? "Visible" : "Collapsed";
- public string HasFridge { get => hasFridge; set => SetProperty(ref hasFridge, value); }
+ /////
+ ///// 是否有冰箱抽屉
+ /////
+ //private string hasFridge = ConfigurationManager.AppSettings["hasFridge"].ToString().Equals("1") ? "Visible" : "Collapsed";
+ //public string HasFridge { get => hasFridge; set => SetProperty(ref hasFridge, value); }
private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
public bool MultiLogin
@@ -148,7 +148,7 @@ namespace DM_Weight.ViewModels
// }
// }
// }
- SetProperty(ref _selectedChildMenu, value);
+ SetProperty(ref _selectedChildMenu, value);
//}
}
}
@@ -287,10 +287,10 @@ namespace DM_Weight.ViewModels
//}
if (SelectedMenu != null && SelectedMenu.PremissionName == "退出")
{
- bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
- bool allTrue = Array.TrueForAll(boolArrs, b => b);
+ //bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
+ //bool allTrue = Array.TrueForAll(boolArrs, b => b);
//false是关着,true是开着
- if (!allTrue)
+ if (!ModbusHelper.BoxOperate)
{
logger.Info($"用户【{Operator?.Nickname}】退出登录");
Operator = null;
@@ -300,12 +300,8 @@ namespace DM_Weight.ViewModels
else
{
//还有药箱开着不能退出
- AlertMsg alertMsg = new AlertMsg
- {
- Message = "请关闭药箱后再退出系统",
- Type = MsgType.ERROR
- };
- _eventAggregator.GetEvent().Publish(alertMsg);
+ _portUtil.SpeakAsync("请关闭药箱后再退出");
+ SelectedMenu = _premissionDmList[0];
}
}
else
@@ -346,7 +342,8 @@ namespace DM_Weight.ViewModels
private PortUtil _portUtil;
//private CHKFunction _chkFunction;
IEventAggregator _eventAggregator;
- public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator)
+ //private ModbusHelper _modbusHelper;
+ public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IUnityContainer container, IDialogService dialogService, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_regionManager = iRegionManager;
@@ -354,6 +351,7 @@ namespace DM_Weight.ViewModels
_container = container;
this._eventAggregator = eventAggregator;
//_chkFunction = cHKFunction;
+ //_modbusHelper = modbusHelper;
}
public DelegateCommand OpenFingerDialog
@@ -546,10 +544,10 @@ namespace DM_Weight.ViewModels
{
Operator = null;
Reviewer = null;
- Application.Current.Dispatcher.Invoke(() =>
- {
- _regionManager.RequestNavigate("MainRegion", "LoginWindow");
- });
+ //Application.Current.Dispatcher.Invoke(() =>
+ //{
+ _regionManager.RequestNavigate("MainRegion", "LoginWindow");
+ //});
AlertMsg alertMsg = new AlertMsg
{
Message = $"用户{UserList.Nickname}或还未设置权限,请联系管理员",
@@ -611,17 +609,40 @@ namespace DM_Weight.ViewModels
// timer.Start();
//}
#region 温度查询定时
- int interval = Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]);
- if (interval > 0)
- {
- WSDTimer = new System.Timers.Timer();
+ //int interval = Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]);
+ //if (interval > 0)
+ //{
+ // WSDTimer = new System.Timers.Timer();
- WSDTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetWSD);
- WSDTimer.Interval = interval;
- WSDTimer.Start();
- //WDTimer.AutoReset = true;
- //WDTimer.Enabled = true;
- }
+ // WSDTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetWSD);
+ // WSDTimer.Interval = interval;
+ // WSDTimer.Start();
+ // //WDTimer.AutoReset = true;
+ // //WDTimer.Enabled = true;
+ //}
+ Task.Factory.StartNew(async () =>
+ {
+ while (true)
+ {
+ TemperatureHumidityInfo temp = _portUtil.GetWSD();
+ if (temp != null)
+ {
+ SqlSugarHelper.Db.Insertable(new TemperatureHumidityInfo()
+ {
+ GroupNo = temp.GroupNo,
+ Temp = temp.Temp,
+ Humi = temp.Humi,
+ AddTime = DateTime.Now
+ }).ExecuteCommand();
+ logger.Info($"保存温湿度信息:{temp.Temp},{temp.Humi}");
+ await Task.Delay(1200000);//20分钟查一次
+ }
+ else
+ {
+ logger.Info("温湿度信息返回空");
+ }
+ }
+ });
#endregion
//if (stopRecord > 0)
//{
@@ -663,7 +684,7 @@ namespace DM_Weight.ViewModels
Reviewer = null;
//Application.Current.Dispatcher.Invoke(() =>
//{
- _regionManager.RequestNavigate("MainRegion", "LoginWindow");
+ _regionManager.RequestNavigate("MainRegion", "LoginWindow");
//});
}
diff --git a/DM_Weight/ViewModels/LoginWindowViewModel.cs b/DM_Weight/ViewModels/LoginWindowViewModel.cs
index 0e36963..af35290 100644
--- a/DM_Weight/ViewModels/LoginWindowViewModel.cs
+++ b/DM_Weight/ViewModels/LoginWindowViewModel.cs
@@ -120,9 +120,10 @@ namespace DM_Weight.ViewModels
_portUtil = portUtil;
_regionManager = regionManager;
_eventAggregator = eventAggregator;
- FingerMsg = !_fingerprintUtil.bIsConnected;
+ FingerMsg = _fingerprintUtil.bIsConnected;
_eventAggregator.GetEvent().Subscribe(LoginEvent);
- logger.Info("LoginWindowViewModel");
+ logger.Info($"LoginWindowViewModel;FingerMsg:{FingerMsg}");
+ _fingerprintUtil.FingerDisconnect();
}
private DelegateCommand? _loginCommand;
diff --git a/DM_Weight/ViewModels/OpenBoxNewWindowViewModel.cs b/DM_Weight/ViewModels/OpenBoxNewWindowViewModel.cs
index 531f37c..a04f521 100644
--- a/DM_Weight/ViewModels/OpenBoxNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/OpenBoxNewWindowViewModel.cs
@@ -25,8 +25,8 @@ namespace DM_Weight.ViewModels
public class OpenBoxNewWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
//定时查询药箱状态
- System.Timers.Timer StateTimer = new System.Timers.Timer(15000);
-
+ //System.Timers.Timer StateTimer = new System.Timers.Timer(5000);
+
private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
private int _drawerType = -1;
@@ -54,8 +54,8 @@ namespace DM_Weight.ViewModels
//开公共药箱按钮的显示状态
- private bool _publicEnable = true;
- public bool PublicEnable { get => _publicEnable; set => SetProperty(ref _publicEnable, value); }
+ //private bool _publicEnable = true;
+ //public bool PublicEnable { get => _publicEnable; set => SetProperty(ref _publicEnable, value); }
//公共药箱按钮显示内容
private string _publicContent;
@@ -110,11 +110,10 @@ namespace DM_Weight.ViewModels
public static ChannelList iList = new ChannelList();
//第几个抽屉号
//public static int iNumber = 1;
- private PortUtil _portUtil;
+ //private PortUtil _portUtil;
IEventAggregator _eventAggregator;
- public OpenBoxNewWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
+ public OpenBoxNewWindowViewModel(IEventAggregator eventAggregator)
{
- _portUtil = portUtil;
_eventAggregator = eventAggregator;
}
#region 抽屉按钮
@@ -581,32 +580,32 @@ namespace DM_Weight.ViewModels
//int listSelfState = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5")
// .WhereIf(cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).Select(cl => cl.DrawerState).First();
- int listDrawerState = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5" && cl.DrawerType == this.DrawerType)
- .WhereIF(this.DrawerType == 0, cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).Select(cl => cl.DrawerState).First();
- if (DrawerType == 1) //公共药箱
- {
- if (listDrawerState == 0)
- {
- SelfContent = "还公共药箱";
- }
- else
- {
- SelfContent = "取公共药箱";
- }
+ //int listDrawerState = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5" && cl.DrawerType == this.DrawerType)
+ // .WhereIF(this.DrawerType == 0, cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).Select(cl => cl.DrawerState).First();
+ //if (DrawerType == 1) //公共药箱
+ //{
+ // if (listDrawerState == 0)
+ // {
+ // SelfContent = "还公共药箱";
+ // }
+ // else
+ // {
+ // SelfContent = "取公共药箱";
+ // }
- }
- else
- {
- if (listDrawerState == 0)
- {
- SelfContent = "还名下药箱";
- }
- else
- {
- SelfContent = "取名下药箱";
- }
+ //}
+ //else
+ //{
+ // if (listDrawerState == 0)
+ // {
+ // SelfContent = "还名下药箱";
+ // }
+ // else
+ // {
+ // SelfContent = "取名下药箱";
+ // }
- }
+ //}
}
public DelegateCommand OpenBoxDelegate
@@ -619,6 +618,14 @@ namespace DM_Weight.ViewModels
}
private void SearchBox()
{
+ //bool[] bools = ModbusHelper.GetInstance().GetAllBoxState();
+ //bool allFalse = Array.TrueForAll(bools, b => b == false);
+ //if (!allFalse)
+ if (ModbusHelper.BoxOperate)
+ {
+ Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
+ return;
+ }
iList = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5" && cl.DrawerType == this.DrawerType && cl.DrawerNo == DrawerNo)
.WhereIF(this.DrawerType == 0, cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).First();
// .Select(cl => cl.DrawerNo).ToList();
@@ -648,44 +655,76 @@ namespace DM_Weight.ViewModels
channelList.DrawerState = SelfContent.Substring(0, 1) == "取" ? 0 : 1;
SqlSugarHelper.Db.Updateable(channelList).UpdateColumns(it => new { it.EffDate, it.DrawerState }).ExecuteCommand();
- StateTimer.Elapsed += OnTimerElapsed;
- if (StateTimer.Enabled)
+ //StateTimer.Elapsed += OnTimerElapsed;
+ //if (StateTimer.Enabled)
+ //{
+ // StateTimer.Stop();
+ // logger.Info($"停止定时查询状态方法");
+ // Thread.Sleep(100);
+ //}
+ //else
{
- StateTimer.Stop();
- logger.Info($"停止定时查询状态方法");
- Thread.Sleep(1000);
- }
- else
- {
- _portUtil.SpeakAsync($"正在打开{DrawerNo}号药箱");
+ ModbusHelper.SpeakAsync($"正在打开{DrawerNo}号药箱");
}
+ //ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo - 1);
ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo - 1);
- Thread.Sleep(15000);
- StateTimer.Start();
+
+ Task.Factory.StartNew(async() =>
+ {
+ bool loop = true;
+ while (loop)
+ {
+ await Task.Delay(9000);
+ bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
+ bool state = Array.TrueForAll(boolsl, b => b == false);
+ if(state)
+ {
+ loop = false;
+ ModbusHelper.BoxOperate = false;
+ }
+ else
+ {
+ ModbusHelper.SpeakAsync("药箱已打开,请及时关闭");
+ }
+ }
+ });
+
+
+ //StateTimer.Start();
SelfStatus = 0;
- PublicEnable = true;
- SelfEnable = true;
+ //PublicEnable = true;
+ //SelfEnable = true;
DrawerType = -1;
}
}
- private void OnTimerElapsed(object sender, ElapsedEventArgs e)
+ //private void OnTimerElapsed(object sender, ElapsedEventArgs e)
+ //{
+ // bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
+ // bool allTrue = Array.TrueForAll(boolArrs, b => b == false);
+ // logger.Info($"进入定时查询状态方法{allTrue}");
+ // if (allTrue)
+ // {
+ // //药箱全部关闭,停止查询
+ // StateTimer.Stop();
+ // }
+ // else
+ // {
+ // _portUtil.SpeakAsync("药箱已打开,请及时关闭");
+ // //Console.Beep(800, 1100);
+ // }
+ //}
+ void DoMyPrismEvent(DeviceMsg msg)
{
- bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
- bool allTrue = Array.TrueForAll(boolArrs, b => b == false);
- logger.Info($"进入定时查询状态方法{allTrue}");
- if (allTrue)
+ switch (msg.EventType)
{
- //药箱全部关闭,停止查询
- StateTimer.Stop();
- }
- else
- {
- _portUtil.SpeakAsync("药箱已打开,请及时关闭");
- //Console.Beep(800, 1100);
+ case EventType.DRAWERCLOSE:
+ SelfEnable = false;
+ break;
}
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
+ _eventAggregator.GetEvent().Subscribe(DoMyPrismEvent);
RequestData();
}
@@ -696,6 +735,7 @@ namespace DM_Weight.ViewModels
public void OnNavigatedFrom(NavigationContext navigationContext)
{
+ _eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent);
}
}
}
diff --git a/DM_Weight/ViewModels/SettingBoxWindowViewModel.cs b/DM_Weight/ViewModels/SettingBoxWindowViewModel.cs
index 0c2f2a2..c95a3d6 100644
--- a/DM_Weight/ViewModels/SettingBoxWindowViewModel.cs
+++ b/DM_Weight/ViewModels/SettingBoxWindowViewModel.cs
@@ -198,6 +198,14 @@ namespace DM_Weight.ViewModels
{
if (DrawerNo > 0)
{
+ //bool[] bools = ModbusHelper.GetInstance().GetAllBoxState();
+ //bool allFalse = Array.TrueForAll(bools, b => b == false);
+ //if (!allFalse)
+ if (ModbusHelper.BoxOperate)
+ {
+ Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
+ return;
+ }
IsEnable = false;
Status = 1;
//_portUtil.SpeakAsync("正在打开药箱");
@@ -213,12 +221,31 @@ namespace DM_Weight.ViewModels
Type = 55,
InvoiceId = $"打开{DrawerNo}号药箱",
}).ExecuteCommand();
- bool bFlag = ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo - 1);
- if (bFlag)
+ ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo - 1);
+ //if (bFlag)
{
IsEnable = true;
Status = 0;
}
+ Task.Factory.StartNew(async () =>
+ {
+ bool loop = true;
+ while (loop)
+ {
+ await Task.Delay(9000);
+ bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
+ bool state = Array.TrueForAll(boolsl, b => b == false);
+ if (state)
+ {
+ loop = false;
+ ModbusHelper.BoxOperate = false;
+ }
+ else
+ {
+ ModbusHelper.SpeakAsync("药箱已打开,请及时关闭");
+ }
+ }
+ });
}
});
}
diff --git a/DM_Weight/Views/HomeWindow.xaml.cs b/DM_Weight/Views/HomeWindow.xaml.cs
index 841f3bc..c046a3c 100644
--- a/DM_Weight/Views/HomeWindow.xaml.cs
+++ b/DM_Weight/Views/HomeWindow.xaml.cs
@@ -55,10 +55,10 @@ namespace DM_Weight.Views
private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
// 串口无人操作
- bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
- bool allTrue = Array.TrueForAll(boolArrs, b => b == false);
- logger.Info($"进入自动退出定时方法{allTrue}");
- if (allTrue&&idleTimer.Enabled)
+ //bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
+ //bool allTrue = Array.TrueForAll(boolArrs, b => b == false);
+ logger.Info($"进入自动退出定时方法{ModbusHelper.BoxOperate}");
+ if (ModbusHelper.BoxOperate && idleTimer.Enabled)
{
idleTimer.Stop();
//无人操作,自动退出
diff --git a/DM_Weight/Views/OpenBoxNewWindow.xaml b/DM_Weight/Views/OpenBoxNewWindow.xaml
index 308e3b4..b96f8e0 100644
--- a/DM_Weight/Views/OpenBoxNewWindow.xaml
+++ b/DM_Weight/Views/OpenBoxNewWindow.xaml
@@ -19,7 +19,7 @@
-
+