change-改变PLC交互

master
liuwf 5 months ago
parent e01f7e73a3
commit 7d57ce7841

@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography.Xml;
using System.ServiceModel.Channels;
using System.Threading;
using System.Threading.Tasks;
using TouchSocket.Core;
@ -50,6 +51,8 @@ namespace SlnMesnac.Business
public delegate void RefreshMessage(string message, bool isWarning = false);
public static event RefreshMessage? RefreshMessageEvent;
#endregion
@ -124,14 +127,14 @@ namespace SlnMesnac.Business
hikFlag = await JudgeIsSuccessAsync();
if (hikFlag)
{
//校验成功下发放行
Pass();
//校验成功放行
RefreshMessageEvent?.Invoke("Logo识别成功下发放行");
logger.LogInformation($"箱体码:{materialCodeStr}Logo识别成功下发放行");
}
else
{
//校验成功下发放行
//校验失败禁止放行
WarningAndStop($"Logo识别失败禁止放行");
}
}
@ -139,8 +142,7 @@ namespace SlnMesnac.Business
{
// 不需要校验
hikFlag = true;
Pass();
RefreshMessageEvent?.Invoke("Logo无需识别下发放行");
logger.LogInformation($"箱体码:{materialCodeStr}Logo无需识别下发放行");
}
@ -267,28 +269,93 @@ namespace SlnMesnac.Business
//M100停止点位
public void Pass()
{
if(plc!=null && plc.IsConnected)
try
{
if (plc != null && plc.IsConnected)
{
plc.writeInt16ByAddress("M100", 8);
Task.Run(() =>
{
// 设置计时器
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (true)
{
if (plc.readInt16ByAddress("M100") == 0)
{
logger.LogInformation("PLC复位成功,启动线体");
RefreshMessageEvent?.Invoke("PLC复位成功,启动线体", true);
}
// 检查是否超过两秒
if (stopwatch.ElapsedMilliseconds > 3000)
{
logger.LogError("PLC复位超时");
RefreshMessageEvent?.Invoke("PLC复位超时", true);
}
Thread.Sleep(100);
}
});
}
else
{
logger.LogError("PLC未连接请检查连接");
RefreshMessageEvent?.Invoke("PLC未连接请检查连接", true);
}
// 声光电报警复位
gunHelper.SendData("OK");
}
catch (Exception ex)
{
plc.writeInt16ByAddress("M100",0);
logger.LogError($"下发PLC复位方法Pass()异常:{ex.Message}");
}
// 声光电报警复位
gunHelper.SendData("OK");
}
public void Stop()
{
if (plc != null && plc.IsConnected)
try
{
if (plc != null && plc.IsConnected)
{
plc.writeInt16ByAddress("M100", 9);
Task.Run(() =>
{
// 设置计时器
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (true)
{
if (plc.readInt16ByAddress("M100") == 1)
{
logger.LogInformation("PLC复位成功,启动线体");
RefreshMessageEvent?.Invoke("PLC复位成功,启动线体", true);
}
// 检查是否超过两秒
if (stopwatch.ElapsedMilliseconds > 3000)
{
logger.LogError("PLC复位超时");
RefreshMessageEvent?.Invoke("PLC复位超时", true);
}
Thread.Sleep(100);
}
});
}
// 声光电报警
gunHelper.SendData("NG");
}
catch (Exception ex)
{
plc.writeInt16ByAddress("M100", 1);
logger.LogError($"下发PLC报警方法Stop()异常:{ex.Message}");
}
// 声光电报警复位
gunHelper.SendData("NG");
}
#endregion
#endregion
#region 记录日志刷新界面及下发PLC报警
public void WarningAndStop(string message)
#region 记录日志刷新界面及下发PLC报警
public void WarningAndStop(string message)
{
logger.LogError(message);
RefreshMessageEvent?.Invoke(message, true);

@ -1,12 +1,18 @@
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HslCommunication.Enthernet;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Win32;
using SlnMesnac.Business;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Plc;
using SlnMesnac.Repository.service;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Views;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -26,6 +32,18 @@ namespace SlnMesnac.WPF.ViewModel
private ILogoIdentifyService logoIdentifyService;
private GunHelper gunHelper = GunHelper.Instance;
public RelayCommand ResetCommand { get; set;}
private LogoBusiness logoBusiness = null;
private readonly ILogger<LogoBusiness> _logger2;
private IBaseMaterialService? baseMaterialService;
private ILogoIdentifyService? ocrVerfiyService;
private ILogoConfigService? logoConfigService;
private TcpServer? tcpServer;
private PlcPool plcPool = null;
public IndexViewModel()
{
logoIdentifyService = App.ServiceProvider.GetService<ILogoIdentifyService>();
@ -33,7 +51,14 @@ namespace SlnMesnac.WPF.ViewModel
LogoBusiness.RefreshBoxInfoEvent += RefreshBoxInfo;
ResetCommand = new RelayCommand(Reset);
RefreshDataGrid();
plcPool = App.ServiceProvider.GetService<PlcPool>();
tcpServer = App.ServiceProvider.GetService<TcpServer>();
ocrVerfiyService = App.ServiceProvider.GetService<ILogoIdentifyService>();
baseMaterialService = App.ServiceProvider.GetService<IBaseMaterialService>();
logoConfigService = App.ServiceProvider.GetService<ILogoConfigService>();
_logger2 = App.ServiceProvider.GetService<ILogger<LogoBusiness>>();
logoBusiness = LogoBusiness.GetInstance(_logger2, logoConfigService, baseMaterialService, ocrVerfiyService, plcPool, tcpServer);
}
/// <summary>
@ -43,10 +68,7 @@ namespace SlnMesnac.WPF.ViewModel
/// <exception cref="NotImplementedException"></exception>
private void Reset()
{
// TODO 复位PLC放行
// 复位报警灯
gunHelper.SendData("OK");
logoBusiness.Pass();
}
/// <summary>

Loading…
Cancel
Save