新增信号交互进程插件

This commit is contained in:
ykkokluo
2026-08-17 15:20:27 +08:00
parent 12c7c1d518
commit cacc5fea5c
25 changed files with 937 additions and 369 deletions
+11 -2
View File
@@ -8,11 +8,17 @@ using StandardScene.Signal.Plc;
namespace StandardScene.Signal.Logic
{
/// <summary>
/// 对齐反编译 DefaultPlugin.RateFlowControl。
/// 独立类型用分号:区域;车组;限额;点1,点2。JGControl 第三段用短横:区域-车组-限额-点1,点2。
/// 区域车组限流。对齐反编译 <c>DefaultPlugin.RateFlowControl</c>
/// </summary>
/// <remarks>
/// 独立握手类型 <c>RateFlowControl</c> 用分号:<c>区域;车组;限额;点1,点2</c>。
/// 挂在 JGControl 第三段时用短横:<c>区域-车组-限额-点1,点2</c>(因为前两段机构名/动作已经占用分号)。
/// 统计「站点列表上、同车组、且不是本车」的数量,小于限额才放行。
/// 解析异常时放行(return true),避免配错把产线卡死。
/// </remarks>
public static class RateFlowHandler
{
/// <summary>独立限流点:通过则停充并启动。</summary>
public static void OnStopped(Car car, SignalStopSpec spec, IDictionary<string, int> logByArea)
{
if (AllowPass(car, spec.SignalParams, logByArea, sep: ';'))
@@ -22,9 +28,11 @@ namespace StandardScene.Signal.Logic
}
}
/// <summary>JGControl 第三段限流,短横分隔。不通过时调用方应直接 return,不启动。</summary>
public static bool AllowPass(Car car, string rateFlowString, IDictionary<string, int> logByArea) =>
AllowPass(car, rateFlowString, logByArea, sep: '-');
/// <param name="sep">独立类型用 ';'JGControl 挂载用 '-'。</param>
private static bool AllowPass(Car car, string raw, IDictionary<string, int> logByArea, char sep)
{
try
@@ -71,6 +79,7 @@ namespace StandardScene.Signal.Logic
}
}
/// <summary>同一限流区域仅在「决策车号变化」时再打一条带原始参数的日志。</summary>
private static void Note(IDictionary<string, int> logByArea, string area, Car car, string raw)
{
if (logByArea == null) return;