新增信号交互进程插件
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user