From c7d7a3b26688da42caaaac9d5402fdea344ce33d Mon Sep 17 00:00:00 2001 From: maqiao <625215135@qq.com> Date: Tue, 10 Dec 2024 15:54:12 +0800 Subject: [PATCH] =?UTF-8?q?=5Fsocket.BeginConnect,=E5=BC=80=E8=8D=AF?= =?UTF-8?q?=E7=AE=B1=E6=8C=87=E4=BB=A414->0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DM_Weight/DM_Weight.csproj | 1 + DM_Weight/Port/KeepAliveSocket.cs | 2 +- DM_Weight/Port/ModBusTcpClientHelper.cs | 64 +++++++++++++++++++++ DM_Weight/Port/ModbusHelper.cs | 31 +++++++++- DM_Weight/ViewModels/HomeWindowViewModel.cs | 48 +++++++--------- 5 files changed, 117 insertions(+), 29 deletions(-) create mode 100644 DM_Weight/Port/ModBusTcpClientHelper.cs diff --git a/DM_Weight/DM_Weight.csproj b/DM_Weight/DM_Weight.csproj index aa44d2f..5fc575a 100644 --- a/DM_Weight/DM_Weight.csproj +++ b/DM_Weight/DM_Weight.csproj @@ -67,6 +67,7 @@ + diff --git a/DM_Weight/Port/KeepAliveSocket.cs b/DM_Weight/Port/KeepAliveSocket.cs index 73fe290..1fa55d6 100644 --- a/DM_Weight/Port/KeepAliveSocket.cs +++ b/DM_Weight/Port/KeepAliveSocket.cs @@ -39,7 +39,7 @@ namespace DM_Weight.Port .Execute(() => { _socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null); _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); - _socket.Connect(iep); + _socket.BeginConnect(iep,null,null); return _socket; }); return _socket; diff --git a/DM_Weight/Port/ModBusTcpClientHelper.cs b/DM_Weight/Port/ModBusTcpClientHelper.cs new file mode 100644 index 0000000..e408b04 --- /dev/null +++ b/DM_Weight/Port/ModBusTcpClientHelper.cs @@ -0,0 +1,64 @@ +using DM_Weight.ViewModels; +using FluentModbus; +using log4net; +using Polly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Speech.Synthesis; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace DM_Weight.Port +{ + public class ModBusTcpClientHelper + { + public static ModbusTcpClient client; + public static bool BoxOperate { get; set; } + private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel)); + public static ModbusTcpClient GetInstance() + { + if (client == null) + { + client = new ModbusTcpClient(); + client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4002), ModbusEndianness.BigEndian); + } + else if (!client.IsConnected) + { + client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4002), ModbusEndianness.BigEndian); + } + return client; + } + public bool OpenBoxDoor(int boxNum) + { + bool bFlag = false; + try + { + BoxOperate = true; + Thread.Sleep(50); + client.WriteSingleRegister(1, (ushort)boxNum, 0); + logger.Info($"开门指令已发送{(ushort)boxNum}"); + SpeakAsync("药箱已打开,请及时关闭"); + bFlag = true; + } + catch (Exception ex) + { + SpeakAsync("药箱已打开,请及时关闭"); + logger.Info($"药箱已打开异常:{ex.Message}"); + } + return bFlag; + } + public bool[] GetAllBoxState() + { + bool[] state = new bool[1]; + return state; + } + private static SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(); + public static void SpeakAsync(string textinfo) + { + speechSynthesizer.SpeakAsync(textinfo); + } + } +} diff --git a/DM_Weight/Port/ModbusHelper.cs b/DM_Weight/Port/ModbusHelper.cs index 648e9a4..b1b31ff 100644 --- a/DM_Weight/Port/ModbusHelper.cs +++ b/DM_Weight/Port/ModbusHelper.cs @@ -35,6 +35,7 @@ namespace DM_Weight.Port { logger.Info("ModbusHelper"); socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port); + //socket = CreateSocket(); client = new TcpClient(); client.Client = socket; master = ModbusIpMaster.CreateIp(client); @@ -51,7 +52,7 @@ namespace DM_Weight.Port private void SetModusIpMaster() { logger.Info("SetModusIpMaster"); - socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port); ; + socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port); client = new TcpClient(); client.Client = socket; master = ModbusIpMaster.CreateIp(client); @@ -128,13 +129,14 @@ namespace DM_Weight.Port this.Dispose(); //Debug.WriteLine($"打开箱子出错,第{retryCount}次重试", exception); logger.Info($"打开箱子出错,第{retryCount}次重试,异常信息{exception}"); + SpeakAsync("打开药箱网中连接失败,正在尝试重新打开"); Thread.Sleep(50); this.SetModusIpMaster(); //return TimeSpan.FromSeconds (1); })).Execute(() => { logger.Info($"正在打开{boxNum}号药箱"); - master.WriteSingleRegister(1, (ushort)boxNum, 14); + master.WriteSingleRegister(1, (ushort)boxNum, 0); logger.Info($"开门指令已发送{(ushort)boxNum}"); SpeakAsync("药箱已打开,请及时关闭"); //Console.WriteLine($"开门指令已发送{(ushort)boxNum}"); @@ -154,5 +156,30 @@ namespace DM_Weight.Port { speechSynthesizer.SpeakAsync(textinfo); } + + + private Socket CreateSocket() + { + Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + string serverIp = "127.0.0.1"; // 服务器IP地址 + int port = 4002; // 服务器端口 + IPAddress serverAddress = IPAddress.Parse(serverIp); + IPEndPoint remoteEP = new IPEndPoint(serverAddress, port); + + clientSocket.Connect(remoteEP); + + if (clientSocket.Connected) + { + + // 发送数据 + //byte[] msg = Encoding.ASCII.GetBytes("This is a test"); + //clientSocket.Send(msg); + + // 关闭socket + //clientSocket.Shutdown(SocketShutdown.Both); + //clientSocket.Close(); + } + return clientSocket; + } } } diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs index ac2407a..801b638 100644 --- a/DM_Weight/ViewModels/HomeWindowViewModel.cs +++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs @@ -285,37 +285,33 @@ namespace DM_Weight.ViewModels // _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath); // } //} - - if (!ModbusHelper.BoxOperate) + if (SelectedMenu != null && SelectedMenu.PremissionName == "退出") { - if (SelectedMenu != null && SelectedMenu.PremissionName == "退出") + //bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState(); + //bool allTrue = Array.TrueForAll(boolArrs, b => b); + //false是关着,true是开着 + if (!ModbusHelper.BoxOperate) { - //bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState(); - //bool allTrue = Array.TrueForAll(boolArrs, b => b); - //false是关着,true是开着 - //if (!ModbusHelper.BoxOperate) - //{ - logger.Info($"用户【{Operator?.Nickname}】退出登录"); - Operator = null; - Reviewer = null; - _regionManager.RequestNavigate("MainRegion", "LoginWindow"); - //} - //else - //{ - // //还有药箱开着不能退出 - // _portUtil.SpeakAsync("请关闭药箱后再退出"); - // SelectedMenu = _premissionDmList[0]; - //} + logger.Info($"用户【{Operator?.Nickname}】退出登录"); + Operator = null; + Reviewer = null; + _regionManager.RequestNavigate("MainRegion", "LoginWindow"); } - else { - //SelectedMenu.Children = SelectedMenu.Children; - //SelectedChildMenu = SelectedMenu.Children[0]; - if (!_portUtil.Operate) - { - _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath); - } + //还有药箱开着不能退出 + _portUtil.SpeakAsync("请关闭药箱后再退出"); + SelectedMenu = _premissionDmList[0]; + } + } + + else + { + //SelectedMenu.Children = SelectedMenu.Children; + //SelectedChildMenu = SelectedMenu.Children[0]; + if (!_portUtil.Operate) + { + _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath); } } }