mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-05-01 12:59:30 +08:00
为ioc容器增加了可能存在的循环依赖提示
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using IoTClient.Clients.PLC;
|
||||
using IoTClient.Common.Enums;
|
||||
using Net462DllTest.Enums;
|
||||
using Net462DllTest.Model;
|
||||
using Net462DllTest.Signal;
|
||||
using Net462DllTest.Trigger;
|
||||
using Net462DllTest.Web;
|
||||
@@ -34,10 +35,13 @@ namespace Net462DllTest.LogicControl
|
||||
public class PlcLogicControl
|
||||
{
|
||||
private readonly SiemensPlcDevice MyPlc;
|
||||
private readonly PlcVarModelDataProxy plcVarModelDataProxy;
|
||||
|
||||
public PlcLogicControl(SiemensPlcDevice MyPlc)
|
||||
public PlcLogicControl(SiemensPlcDevice MyPlc,
|
||||
PlcVarModelDataProxy plcVarModelDataProxy)
|
||||
{
|
||||
this.MyPlc = MyPlc;
|
||||
this.plcVarModelDataProxy = plcVarModelDataProxy;
|
||||
}
|
||||
|
||||
#region 初始化、初始化完成以及退出的事件
|
||||
@@ -153,35 +157,17 @@ namespace Net462DllTest.LogicControl
|
||||
}
|
||||
|
||||
[NodeAction(NodeType.Action, "PLC获取变量")]
|
||||
public object ReadVar(PlcVarName plcVarEnum)
|
||||
public object ReadVar(PlcVarName varName)
|
||||
{
|
||||
var varInfo = plcVarEnum.ToVarInfo();
|
||||
var result = MyPlc.Read(varInfo);
|
||||
Console.WriteLine($"获取变量成功:({varInfo})\t result = {result}");
|
||||
var result = MyPlc.Read(varName);
|
||||
Console.WriteLine($"获取变量成功:({varName})\t result = {result}");
|
||||
return result;
|
||||
}
|
||||
|
||||
[NodeAction(NodeType.Action, "PLC写入变量")]
|
||||
public SiemensPlcDevice WriteVar(object value, PlcVarName varName)
|
||||
{
|
||||
var varInfo = varName.ToVarInfo();
|
||||
if (MyPlc.State == PlcState.Runing)
|
||||
{
|
||||
if (varInfo.IsReadOnly)
|
||||
{
|
||||
Console.WriteLine($"PLC变量{varInfo}当前禁止写入");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
MyPlc.Write(varInfo, value);
|
||||
Console.WriteLine($"PLC变量{varInfo}写入数据:{value}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"PLC处于非预期状态{MyPlc.State}");
|
||||
}
|
||||
MyPlc.Write(varName, value); // 新数据
|
||||
return MyPlc;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Net462DllTest.Enums;
|
||||
using Net462DllTest.LogicControl;
|
||||
using Net462DllTest.Trigger;
|
||||
using Serein.Library.Attributes;
|
||||
using System;
|
||||
@@ -126,4 +127,109 @@ namespace Net462DllTest.Model
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 数据代理,防止View修改
|
||||
/// </summary>
|
||||
[AutoRegister]
|
||||
public class PlcVarModelDataProxy
|
||||
{
|
||||
private readonly PlcVarModel plcVarModel;
|
||||
public PlcVarModelDataProxy(PlcVarModel plcVarModel)
|
||||
{
|
||||
this.plcVarModel = plcVarModel;
|
||||
}
|
||||
/// <summary>
|
||||
/// 车位号
|
||||
/// </summary>
|
||||
public Int16 SpaceNum { get => plcVarModel.SpaceNum; }
|
||||
|
||||
/// <summary>
|
||||
/// 上位机指令
|
||||
/// </summary>
|
||||
public Int16 CmdForPLC { get => plcVarModel.CmdForPLC; }
|
||||
|
||||
/// <summary>
|
||||
/// PLC当前存取车位号
|
||||
/// </summary>
|
||||
public Int16 DoingSpaceNum { get => plcVarModel.DoingSpaceNum; }
|
||||
|
||||
/// <summary>
|
||||
/// 下位机状态
|
||||
/// </summary>
|
||||
public Int16 PLCState { get => plcVarModel.PLCState; }
|
||||
|
||||
/// <summary>
|
||||
/// 门1正常待机车位号,存车完成地面车位0
|
||||
/// </summary>
|
||||
public Int16 Door1CurSpaceNum { get => plcVarModel.Door1CurSpaceNum; }
|
||||
|
||||
/// <summary>
|
||||
/// 门2正常待机车位号,存车完成地面车位0
|
||||
/// </summary>
|
||||
public Int16 Door2CurSpaceNum { get => plcVarModel.Door2CurSpaceNum; }
|
||||
|
||||
/// <summary>
|
||||
/// 下位机运行模式
|
||||
/// </summary>
|
||||
public Int16 PLCRunMode { get => plcVarModel.PLCRunMode; }
|
||||
|
||||
/// <summary>
|
||||
/// 执行的门号
|
||||
/// </summary>
|
||||
public Int16 DoorVar { get => plcVarModel.DoorVar; }
|
||||
|
||||
/// <summary>
|
||||
/// 门1是否开到位
|
||||
/// </summary>
|
||||
public bool IsDoor1OpenDone { get => plcVarModel.IsDoor1OpenDone; }
|
||||
|
||||
/// <summary>
|
||||
/// 门1是否关到位
|
||||
/// </summary>
|
||||
public bool IsDoor1ClosedDone { get => plcVarModel.IsDoor1ClosedDone; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 门2是否开到位
|
||||
/// </summary>
|
||||
public bool IsDoor2OpenDone { get => plcVarModel.IsDoor2OpenDone; }
|
||||
|
||||
/// <summary>
|
||||
/// 门2是否关到位
|
||||
/// </summary>
|
||||
public bool IsDoor2ClosedDone { get => plcVarModel.IsDoor2ClosedDone; }
|
||||
|
||||
/// <summary>
|
||||
/// 通道1是否有车
|
||||
/// </summary>
|
||||
public bool HasCarInTone1 { get => plcVarModel.HasCarInTone1; }
|
||||
|
||||
/// <summary>
|
||||
/// 通道2是否有车
|
||||
/// </summary>
|
||||
public bool HasCarInTone2 { get => plcVarModel.HasCarInTone2; }
|
||||
|
||||
/// <summary>
|
||||
/// 下位机异常代码
|
||||
/// </summary>
|
||||
public Int16 ErrorCode { get => plcVarModel.ErrorCode; }
|
||||
|
||||
/// <summary>
|
||||
/// 2层以上的空板是否在待机
|
||||
/// </summary>
|
||||
public bool IsOver2FlowStanded { get => plcVarModel.IsOver2FlowStanded; }
|
||||
|
||||
/// <summary>
|
||||
/// 1号门指示灯
|
||||
/// </summary>
|
||||
public bool Gate1Light { get => plcVarModel.Gate1Light; }
|
||||
|
||||
/// <summary>
|
||||
/// 2号门指示灯
|
||||
/// </summary>
|
||||
public bool Gate2Light { get => plcVarModel.Gate2Light; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -89,33 +89,35 @@ namespace Net462DllTest.Trigger
|
||||
Client = null;
|
||||
}
|
||||
|
||||
public void Write(PlcVarInfo varInfo, object value)
|
||||
public void Write(PlcVarName varName, object value)
|
||||
{
|
||||
try
|
||||
var varInfo = varName.ToVarInfo();
|
||||
if (this.State == PlcState.Runing)
|
||||
{
|
||||
Client.WriteVar(varInfo, value); // 尝试写入PLC
|
||||
Model.Set(varInfo.Name, value); // 新数据
|
||||
if (varInfo.IsReadOnly)
|
||||
{
|
||||
throw new Exception($"PLC变量{varInfo}当前禁止写入");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Client.WriteVar(varInfo, value); // 尝试写入PLC
|
||||
Model.Set(varName, value);
|
||||
Console.WriteLine($"PLC变量{varInfo}写入数据:{value}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"写入出错:{this}{varInfo}。{ex.Message}");
|
||||
throw;
|
||||
throw new Exception($"PLC处于非预期状态{this.State}");
|
||||
}
|
||||
}
|
||||
|
||||
public object Read(PlcVarInfo varInfo)
|
||||
public object Read(PlcVarName varName)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = Client.ReadVar(varInfo);// 尝试读取数据
|
||||
Model.Set(varInfo.Name, result);// 缓存读取的数据
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"读取出错:{this}{varInfo}。{ex.Message}");
|
||||
throw;
|
||||
}
|
||||
var varInfo = varName.ToVarInfo();
|
||||
var result = Client.ReadVar(varInfo);// 尝试读取数据
|
||||
Model.Set(varName, result); // 缓存读取的数据
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@@ -123,7 +125,7 @@ namespace Net462DllTest.Trigger
|
||||
{
|
||||
foreach(var varInfo in VarInfos)
|
||||
{
|
||||
Read(varInfo); // 无条件批量读取
|
||||
Read(varInfo.Name); // 无条件批量读取
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +188,7 @@ namespace Net462DllTest.Trigger
|
||||
if (!IsTimedRefresh || Client is null) break;
|
||||
|
||||
oldData = Model.Get(signal); // 暂存旧数据
|
||||
newData = Read(varInfo); // 获取新数据
|
||||
newData = Read(signal); // 获取新数据
|
||||
if (varInfo.NotificationType == PlcVarInfo.OnNotificationType.OnRefresh)
|
||||
{
|
||||
isNotification = true; // 无条件触发通知
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Net462DllTest.LogicControl;
|
||||
using Net462DllTest.Model;
|
||||
|
||||
namespace Net462DllTest.ViewModel
|
||||
{
|
||||
@@ -19,12 +20,18 @@ namespace Net462DllTest.ViewModel
|
||||
{
|
||||
private readonly SiemensPlcDevice Device;
|
||||
private readonly ViewManagement viewManagement;
|
||||
public FromWorkBenchViewModel(SiemensPlcDevice Device,ViewManagement viewManagement)
|
||||
private readonly PlcVarModelDataProxy plcVarModelDataProxy;
|
||||
public FromWorkBenchViewModel(SiemensPlcDevice Device,
|
||||
ViewManagement viewManagement,
|
||||
PlcVarModelDataProxy plcVarModelDataProxy)
|
||||
{
|
||||
this.Device = Device;
|
||||
this.viewManagement = viewManagement;
|
||||
InitCommand();
|
||||
|
||||
this.plcVarModelDataProxy = plcVarModelDataProxy;
|
||||
|
||||
|
||||
|
||||
InitCommand();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user