_socket.BeginConnect,开药箱指令14->0
This commit is contained in:
parent
f2614723e2
commit
c7d7a3b266
|
@ -67,6 +67,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentModbus" Version="5.3.0" />
|
||||
<PackageReference Include="log4net" Version="2.0.15" />
|
||||
<PackageReference Include="MaterialDesignThemes" Version="4.8.0" />
|
||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace DM_Weight.Port
|
|||
.Execute<Socket>(() => {
|
||||
_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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<EOF>");
|
||||
//clientSocket.Send(msg);
|
||||
|
||||
// 关闭socket
|
||||
//clientSocket.Shutdown(SocketShutdown.Both);
|
||||
//clientSocket.Close();
|
||||
}
|
||||
return clientSocket;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue