using MaterialTraceability.Common;
using MaterialTraceability.Entity.DTO;
using MaterialTraceability.Plc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MaterialTraceability.Business
{
///
/// PLC业务类
///
public class PlcBusiness
{
private static IPlc plcInstance = null;
private static AppConfigDto appConfig = AppConfigDto.Instance;
#region 定义间隔判断时间
private static DateTime lastReadTime_A_Begin;
private static DateTime lastReadTime_A_End;
private static DateTime lastReadTime_B_Begin;
private static DateTime lastReadTime_B_End;
private static DateTime lastReadTime_Force;
private static DateTime lastReadTime_ForceSecond; //模切暂用
private static DateTime AB_lastReadTime_SJForceSinal; //凹版收卷结束信号
private static DateTime AB_lastReadTime_SJEndSinal; //凹版收卷结束信号
#endregion
///
/// 信号刷新事件
///
///
public delegate void SignalReadRefresh(int status, int position);
public event SignalReadRefresh SignalRefreshEvent;
private static System.Timers.Timer timer = new System.Timers.Timer(appConfig.plcSingalReadTime);
public void EndSignalInit(int status, int position)
{
SignalRefreshEvent?.Invoke(status, position);
}
///
/// 初始化PLC
///
///
///
public IPlc InitPlc(string PLCType)
{
try
{
string str = System.Environment.CurrentDirectory;
str = str + "\\MaterialTraceability.Plc.dll";
Assembly assembly = Assembly.LoadFile(str); // 加载程序集(EXE 或 DLL)
string AssemName = "MaterialTraceability.Plc.Impl." + PLCType;
var obj = assembly.CreateInstance(AssemName, true);
plcInstance = obj as IPlc;
if (plcInstance == null)
{
LogHelper.Info("PLC初始化失败!!!");
return null;
}
else
{
LogHelper.Info("PLC初始化成功");
#region 读取时间初始化
var initTime = DateTime.Now.AddMinutes(-1);
lastReadTime_A_Begin = initTime;
lastReadTime_A_End = initTime;
lastReadTime_B_Begin = initTime;
lastReadTime_B_End = initTime;
lastReadTime_Force = initTime;
lastReadTime_ForceSecond = initTime;
AB_lastReadTime_SJForceSinal = initTime;
AB_lastReadTime_SJEndSinal = initTime;
#endregion
return plcInstance;
}
}
catch (Exception ex)
{
LogHelper.Error("PLC初始化异常", ex);
return null;
}
}
public bool Connect()
{
if (!plcInstance.IsConnected)
{
bool connectResult = plcInstance.Connect(appConfig.plcAddress, appConfig.plcPort);
return connectResult;
}
return plcInstance.IsConnected;
}
///
/// 获取PLC连接状态
///
///
public bool IsConnected()
{
return plcInstance.IsConnected;
}
public bool ReConnect()
{
try
{
if (plcInstance.IsConnected)
{
if (plcInstance.DisConnect())
{
LogHelper.PlcLog("PLC断开成功");
}
}
//断开后关闭定时器
if (timer.Enabled)
{
timer.Stop();
timer.Close();
timer.Dispose();
timer = new System.Timers.Timer(appConfig.plcSingalReadTime);
}
LogHelper.PlcLog("定时器关闭,等待2S后进行重连");
Thread.Sleep(1000 * 2);
if (Connect())
{
LogHelper.PlcLog("PLC连接成功,开启定时器");
LoopRead("");
}
}
catch(Exception ex)
{
LogHelper.Error("PLC重连异常",ex);
}
var result = plcInstance.IsConnected;
return result;
}
///
/// 开启线程循环读取PLC地址
///
///
public void LoopRead(string address)
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(readPlc);
timer.AutoReset = true;
timer.Enabled = true;
timer.Start();
}
///
/// 读取PLC信号 object source, System.Timers.ElapsedEventArgs e
///
///
///
private void readPlc(object source, System.Timers.ElapsedEventArgs e)
{
try
{
//获取工序编号 TB-涂布、LY冷压预分切、MQ-模切、JR-卷绕
string processCode = appConfig.processId;
#region 凹版
//凹版工序
if (processCode.Equals("AB"))
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.心跳, 1);
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.放卷开始) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.放卷开始, 0);
SignalRefreshEvent?.Invoke(6, 0);
}
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.收卷开始) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.收卷开始, 0);
SignalRefreshEvent?.Invoke(7, 1);
}
//放卷 涨紧信号
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.放卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.放卷涨紧, 0);
SignalRefreshEvent?.Invoke(1, 0);
}
//放卷结束信号
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.放卷结束) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.放卷结束, 0);
SignalRefreshEvent?.Invoke(2, 0);
}
//收卷涨紧信号-1A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.收卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.收卷涨紧, 0);
SignalRefreshEvent?.Invoke(3, 1);
}
//收卷结束信号-1A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.收卷结束) == 1)
{
if (isReadFlag(ref AB_lastReadTime_SJEndSinal))
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.收卷结束, 0);
SignalRefreshEvent?.Invoke(4, 1);
}
}
//异常下料-1A
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.放卷异常下料) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.放卷异常下料, 0);
SignalRefreshEvent?.Invoke(5, 0);
}
//异常下料-1B
if (plcInstance.readInt32ByAddress(appConfig.AbAddress.收卷异常下料) == 1)
{
if (isReadFlag(ref AB_lastReadTime_SJForceSinal))
{
plcInstance.writeInt32ByAddress(appConfig.AbAddress.收卷异常下料, 0);
SignalRefreshEvent?.Invoke(5, 1);
}
}
}
#endregion
#region 涂布
if (processCode.Equals("TB"))
{
lock (string.Empty)
{
//写入心跳
plcInstance.writeInt32ByAddress("D9828", 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.心跳, 1);
LogHelper.PlcLog("RFID系统写入心跳D9628");
Thread.Sleep(200);
// A放卷涨紧 A轴position设为3
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.A放卷涨紧) == 1)
{
LogHelper.PlcLog("B放卷涨紧");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.涨紧信号清除, 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.A放卷涨紧, 0);
SignalRefreshEvent?.Invoke(1, 3);
}
// B放卷涨紧 B轴position设为4
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.B放卷涨紧) == 1)
{
LogHelper.PlcLog("B放卷涨紧");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.B放卷涨紧, 0);
SignalRefreshEvent?.Invoke(1, 4);
}
// A放卷开始 A轴position设为3
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.放卷开始) == 1)
{
LogHelper.PlcLog("A放卷开始");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.放卷开始, 0);
SignalRefreshEvent?.Invoke(6, 3);
}
// B放卷开始 B轴position设为4
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.放卷开始) == 2)
{
LogHelper.PlcLog("B放卷开始");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.放卷开始, 0);
SignalRefreshEvent?.Invoke(6, 4);
}
// A放卷结束 A轴position设为3
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.A放卷结束) == 1)
{
LogHelper.PlcLog("A放卷结束");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.A放卷结束, 0);
SignalRefreshEvent?.Invoke(2, 3);
}
// B放卷结束 B轴position设为4` ` ````
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.B放卷结束) == 1)
{
LogHelper.PlcLog("B放卷结束");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.B放卷结束, 0);
SignalRefreshEvent?.Invoke(2, 4);
}
//A轴放卷强制下料
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.放卷强制下料) == 1)
{
LogHelper.PlcLog("A轴放卷强制下料");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.放卷强制下料, 0);
SignalRefreshEvent?.Invoke(5, 3);
}
//B轴放卷强制下料
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.放卷强制下料) == 2)
{
LogHelper.PlcLog("B轴放卷强制下料");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.放卷强制下料, 0);
SignalRefreshEvent?.Invoke(5, 4);
}
// A轴收卷涨紧 A轴position设为1
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.A收卷轴涨紧) == 1)
{
LogHelper.PlcLog("A轴收卷涨紧");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.涨紧信号清除, 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.A收卷轴涨紧, 0);
if (isReadFlag(ref lastReadTime_A_Begin))
{
SignalRefreshEvent?.Invoke(3, 1);
}
}
// B轴收卷涨紧 B轴position设为2
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.B收卷轴涨紧) == 1)
{
LogHelper.PlcLog("B轴收卷涨紧");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.涨紧信号清除, 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.B收卷轴涨紧, 0);
if (isReadFlag(ref lastReadTime_B_Begin))
{
SignalRefreshEvent?.Invoke(3, 2);
}
}
#region 收卷开始信号 Add By wenjy 2022-11-29
// A轴收卷开始信号
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.收卷轴开始) == 1)
{
LogHelper.PlcLog("A轴收卷开始信号 D9720==1 -> 0");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.收卷轴开始, 0);
if (isReadFlag(ref lastReadTime_A_End))
{
SignalRefreshEvent?.Invoke(7, 1);
}
}
// B轴收卷开始信号
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.收卷轴开始) == 2)
{
LogHelper.PlcLog("B轴收卷开始信号 D9720==2 -> 0");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.收卷轴开始, 0);
if (isReadFlag(ref lastReadTime_B_End))
{
SignalRefreshEvent?.Invoke(7, 2);
}
}
#endregion
// A轴收卷完工信号
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.A收卷轴完工) == 1)
{
LogHelper.PlcLog("A轴收卷完工信号");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.控制下料, 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.A收卷轴完工, 0);
if (isReadFlag(ref lastReadTime_A_End))
{
SignalRefreshEvent?.Invoke(4, 1);
}
}
// B轴收卷完工信号
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.B收卷轴完工) == 1)
{
LogHelper.PlcLog("B轴收卷完工信号");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.控制下料, 1);
plcInstance.writeInt32ByAddress(appConfig.TbAddress.B收卷轴完工, 0);
if (isReadFlag(ref lastReadTime_B_End))
{
SignalRefreshEvent?.Invoke(4, 2);
}
}
//A轴强制下料
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.强制下料) == 1)
{
LogHelper.PlcLog("A轴强制下料");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.强制下料, 0);
if (isReadFlag(ref lastReadTime_Force))
{
SignalRefreshEvent?.Invoke(5, 1);
}
}
//B轴强制下料
if (plcInstance.readInt32ByAddress(appConfig.TbAddress.强制下料) == 2)
{
LogHelper.PlcLog("B轴强制下料");
plcInstance.writeInt32ByAddress(appConfig.TbAddress.强制下料, 0);
if (isReadFlag(ref lastReadTime_Force))
{
SignalRefreshEvent?.Invoke(5, 2);
}
}
}
}
#endregion
#region 冷压
//冷压工序、赢合厂家
if (processCode.Equals("LY_A"))
{
//放卷 涨紧信号
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.放卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.放卷涨紧, 0);
SignalRefreshEvent?.Invoke(1, 0);
}
//放卷结束信号
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.放卷结束) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.放卷结束, 0);
SignalRefreshEvent?.Invoke(2, 0);
}
//收卷涨紧信号-1A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1A涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1A涨紧, 0);
SignalRefreshEvent?.Invoke(3, 1);
}
//收卷涨紧信号-1B气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1B涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1B涨紧, 0);
SignalRefreshEvent?.Invoke(3, 2);
}
//收卷涨紧信号-2A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2A涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2A涨紧, 0);
SignalRefreshEvent?.Invoke(3, 3);
}
//收卷涨紧信号-2B气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2B涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2B涨紧, 0);
SignalRefreshEvent?.Invoke(3, 4);
}
//收卷结束信号-1A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1A结束) == 1)
{
lock (string.Empty)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1A结束, 0);
SignalRefreshEvent?.Invoke(4, 1);
}
}
//收卷结束信号-1B气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1B结束) == 1)
{
lock (string.Empty)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1B结束, 0);
SignalRefreshEvent?.Invoke(4, 2);
}
}
//收卷结束信号-2A气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2A结束) == 1)
{
lock (string.Empty)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2A结束, 0);
SignalRefreshEvent?.Invoke(4, 3);
}
}
//收卷结束信号-2B气胀轴
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2B结束) == 1)
{
lock (string.Empty)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2B结束, 0);
SignalRefreshEvent?.Invoke(4, 4);
}
}
//异常下料-1A
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1A异常下料) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1A异常下料, 0);
SignalRefreshEvent?.Invoke(5, 1);
}
//异常下料-1B
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷1B异常下料) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷1B异常下料, 0);
SignalRefreshEvent?.Invoke(5, 2);
}
//异常下料-2A
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2A异常下料) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2A异常下料, 0);
SignalRefreshEvent?.Invoke(5, 3);
}
//异常下料-2B
if (plcInstance.readInt32ByAddress(appConfig.LyAddress.收卷2B异常下料) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.LyAddress.收卷2B异常下料, 0);
SignalRefreshEvent?.Invoke(5, 4);
}
}
#endregion
#region 模切
if (processCode.Equals("MQ_A"))
{
//开机启动信号 Add By WenJy 2022-10-12
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.开机启动) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.开机启动, 0);
SignalRefreshEvent?.Invoke(8, 0);
}
//左放卷 涨紧信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.左放卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.左放卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(1, 6);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(1, 5);
}
}
//右放卷 涨紧信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.右放卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.右放卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(1, 5);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(1, 6);
}
}
//左放卷 开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.左放卷开始))
{
if (isReadFlag(ref lastReadTime_A_Begin))
{
LogHelper.PlcLog("读到左放卷开始信号");
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(6, 6);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(6, 5);
}
}
}
//右放卷 开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.右放卷开始))
{
if (isReadFlag(ref lastReadTime_A_End))
{
LogHelper.PlcLog("读到右放卷开始信号");
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(6, 5);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(6, 6);
}
}
}
//左放卷 结束信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.左放卷结束) == 1)
{
writePlc(appConfig.mqAddress.左放卷结束, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(2, 6);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(2, 5);
}
}
//右放卷 结束信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.右放卷结束) == 1)
{
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(2, 5);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(2, 6);
}
writePlc(appConfig.mqAddress.右放卷结束, 0);
}
//上收卷左侧涨紧 信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.上左收卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.上左收卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(3, 3);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(3, 1);
}
}
//上收卷右侧涨紧 信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.上右收卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.上右收卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(3, 1);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(3, 3);
}
}
//下收卷左侧涨紧 信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.下左收卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.下左收卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(3, 4);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(3, 2);
}
}
//下收卷右侧涨紧 信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.下右收卷涨紧) == 1)
{
plcInstance.writeInt32ByAddress(appConfig.mqAddress.下右收卷涨紧, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(3, 2);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(3, 4);
}
}
//上收卷左侧开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.上左收卷开始))
{
if (isReadFlag(ref lastReadTime_B_Begin))
{
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(7, 3);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(7, 1);
}
}
}
//上收卷右侧开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.上右收卷开始))
{
if (isReadFlag(ref lastReadTime_B_End))
{
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(7, 1);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(7, 3);
}
}
}
//下收卷左侧开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.下左收卷开始))
{
if (isReadFlag(ref lastReadTime_Force))
{
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(7, 4);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(7, 2);
}
}
}
//下收卷右侧开始信号
if (plcInstance.readBoolByAddress(appConfig.mqAddress.下右收卷开始))
{
if (isReadFlag(ref lastReadTime_ForceSecond))
{
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(7, 2);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(7, 4);
}
}
}
//上左收卷结束信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.上左收卷结束) == 1)
{
writePlc(appConfig.mqAddress.上左收卷结束, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(4, 3);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(4, 1);
}
}
//上右收卷结束信号
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.上右收卷结束) == 1)
{
writePlc(appConfig.mqAddress.上右收卷结束, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(4, 1);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(4, 3);
}
}
//下左收卷结束
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.下左收卷结束) == 1)
{
writePlc(appConfig.mqAddress.下左收卷结束, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(4, 4);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(4, 2);
}
}
//下右收卷结束
if (plcInstance.readInt32ByAddress(appConfig.mqAddress.下右收卷结束) == 1)
{
writePlc(appConfig.mqAddress.下右收卷结束, 0);
if (appConfig.machineId == 3)
{
SignalRefreshEvent?.Invoke(4, 2);
}
if (appConfig.machineId == 4)
{
SignalRefreshEvent?.Invoke(4, 4);
}
}
}
#endregion
}
catch (Exception ex)
{
LogHelper.Error("读取PLC信号异常",ex);
}
}
///
/// 根据时间差判断信号是否处理
///
///
///
public static bool isReadFlag(ref DateTime lastReadTime)
{
DateTime nowReadTime = DateTime.Now;
TimeSpan info = nowReadTime - lastReadTime;
int elapsedTime = Convert.ToInt32(info.TotalSeconds);
LogHelper.PlcLog("开始时间:" + lastReadTime.ToString("G") + ";结束时间:" + nowReadTime.ToString("G") + ";时间差:" + elapsedTime);
if (elapsedTime < 30)
{
LogHelper.PlcLog("距离上次读取时间小于30S,不触发逻辑处理");
return false;
}
else
{
//上次读取时间
lastReadTime = nowReadTime;
return true;
}
}
///
/// PLC地址写入
///
///
///
public void writePlc(string address,int value)
{
plcInstance.writeInt32ByAddress(address, value);
}
///
/// 写入String类型数据
///
///
///
public static void writeStrPlc(string address, string value)
{
plcInstance.writeStringByAddress(address, value);
}
///
/// 写入double类型
///
///
///
public void writeDoublePlc(string address, int value)
{
plcInstance.writeDoubleByAddress(address, value);
}
///
/// 读取String类型数据
///
///
///
public static string readStrPlc(string address,ushort length)
{
return plcInstance.readStringByAddress(address, length);
}
///
/// PLC地址读取
///
///
///
public static int readPlc(string address)
{
var info = plcInstance.readInt32ByAddress(address);
return info;
}
///
/// PLC地址读取-bool
///
///
///
public static bool readBoolPlc(string address)
{
var info = plcInstance.readBoolByAddress(address);
return info;
}
}
}