增加流程运行特性:支持异步节点

This commit is contained in:
fengjiayi
2024-10-07 22:52:10 +08:00
parent 878b1c5893
commit 9529b9e19d
13 changed files with 190 additions and 96 deletions

View File

@@ -1,7 +1,4 @@
using Net462DllTest.Signal;
using Net462DllTest.Trigger;
using Net462DllTest.ViewModel;
using Net462DllTest.Trigger;
using Serein.Library.Api;
using Serein.Library.Attributes;
using Serein.Library.Enums;
@@ -9,9 +6,6 @@ using Serein.Library.Ex;
using Serein.Library.Framework.NodeFlow;
using Serein.Library.NodeFlow.Tool;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Net462DllTest.LogicControl
@@ -79,5 +73,7 @@ namespace Net462DllTest.LogicControl
Console.WriteLine("发送命令失败:调取车位" + spaceNum);
}
}
}
}

View File

@@ -41,7 +41,7 @@ namespace Net462DllTest.LogicControl
}
#region 退
[NodeAction(NodeType.Init)] // Init 初始化事件,流程启动时执行
[NodeAction(NodeType.Init)]
public void Init(IDynamicContext context)
{
context.Env.IOC.Register<IRouter, Router>();
@@ -108,6 +108,15 @@ namespace Net462DllTest.LogicControl
#region
[NodeAction(NodeType.Action, "等待")]
public async Task Delay(int ms = 5000)
{
await Console.Out.WriteLineAsync("开始等待");
await Task.Delay(ms);
await Console.Out.WriteLineAsync("不再等待");
}
[NodeAction(NodeType.Action, "PLC初始化")]
public SiemensPlcDevice PlcInit(SiemensVersion version = SiemensVersion.None,
string ip = "192.168.10.100",
@@ -153,7 +162,7 @@ namespace Net462DllTest.LogicControl
}
[NodeAction(NodeType.Action, "PLC写入变量")]
public SiemensPlcDevice WriteVar2(object value, PlcVarName varName)
public SiemensPlcDevice WriteVar(object value, PlcVarName varName)
{
var varInfo = varName.ToVarInfo();
if (MyPlc.State == PlcState.Runing)
@@ -176,7 +185,6 @@ namespace Net462DllTest.LogicControl
return MyPlc;
}
[NodeAction(NodeType.Action, "批量读取")]
public void BatchReadVar()
{

33
Net462DllTest/Main.cs Normal file
View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Net462DllTest.Properties
{
/*
理想的项目架构:
FlowEnv - LoginControl
LoginControl
↙ ↘
(View-Interaction) (Node-Interaction)
↓ ↕
View ←→ ViewModel ←→ Trigger ← SingleEnum
Model
· DataChanged → Trigger
视图驱动触发器,触发器驱动数据。
数据驱动触发器,触发器驱动视图。
所以,这个结构≈事件驱动。
动态的配置事件触发的原因、过程与结果。
*/
}

View File

@@ -9,21 +9,6 @@ using System.Threading.Tasks;
namespace Net462DllTest.Model
{
[AttributeUsage(AttributeTargets.Property)]
public class PlcValueAttribute : Attribute
{
/// <summary>
/// 变量类型
/// </summary>
public PlcVarName PlcVarEnum { get; }
public PlcValueAttribute(PlcVarName plcVarEnum)
{
this.PlcVarEnum = plcVarEnum;
}
}
/// <summary>
/// PLC变量
/// </summary>

View File

@@ -61,6 +61,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Model\PlcVarModel.cs" />
<Compile Include="Main.cs" />
<Compile Include="Trigger\SiemensPlcDevice.cs" />
<Compile Include="Trigger\PrakingDevice.cs" />
<Compile Include="Enums\PlcState.cs" />

View File

@@ -12,7 +12,6 @@ namespace Net462DllTest.Trigger
[AutoRegister]
public class PrakingDevice : ChannelFlowTrigger<ParkingCommand>
{
}
}

View File

@@ -53,6 +53,8 @@ namespace Net462DllTest.Utils
il.Emit(OpCodes.Callvirt, property.GetSetMethod()); // 调用属性的Setter方法
il.Emit(OpCodes.Ret); // 返回
return (Action<TModel, object>)method.CreateDelegate(typeof(Action<TModel, object>));
}

View File

@@ -7,6 +7,9 @@ using System.Windows.Input;
namespace Net462DllTest.Utils
{
/// <summary>
/// 用于窗体View与ViewModel进行交互
/// </summary>
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;