新增信号交互进程插件
This commit is contained in:
@@ -8,9 +8,28 @@ using StandardScene.Signal.Plc;
|
||||
|
||||
namespace StandardScene.Signal.Logic
|
||||
{
|
||||
/// <summary>对齐反编译 DefaultPlugin.JGControl / JGJudge / RequestIn / Arrived。</summary>
|
||||
/// <summary>
|
||||
/// 机构进出站握手。对齐反编译 <c>DefaultPlugin.JGControl</c> / <c>JGJudge</c> / <c>RequestIn</c> / <c>Arrived</c>。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// <c>SignalParams</c> 分号三段:<c>机构名;动作;限流</c>。
|
||||
/// 动作 <c>RequestIn</c>(请求进入,配在机构口外等待点)或 <c>Arrived</c>(到位,配在机构内地标)。
|
||||
/// 第三段可选,格式与独立限流不同:<c>区域-车组-限额-点1,点2</c>(短横分隔,见 <see cref="RateFlowHandler"/>)。
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// RequestIn 放行条件(需同时满足):PLC 读字节=允许进入、尚无请求进入车、写字节=无状态。
|
||||
/// 下线机构额外要求 <c>JgPointId</c> 上没有其它车。通过后写「进入中」、记下 RequestInAgvNo、停充并启动。
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// 车已在跑但本车不是请求进入车、且 PLC 不是允许进入时,立即停车(停稳拍与行驶拍都会判)。
|
||||
/// Arrived:若 InAgvNo 还不是本车,写「到位」、登记 InAgvNo、清空 RequestInAgvNo。
|
||||
/// 之后的「离开中 / 已离开」由 PLC Worker 的 <see cref="PlcStationLogic.AutoLeave"/> 推进。
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public static class JgControlHandler
|
||||
{
|
||||
/// <summary>停稳:可选限流 → RequestIn 或 Arrived。</summary>
|
||||
public static void OnStopped(Car car, SignalStopSpec spec, Func<string, PlcStationRuntime> find, IDictionary<string, int> rateFlowLog)
|
||||
{
|
||||
var jgName = spec.Part(0).Trim();
|
||||
@@ -34,6 +53,7 @@ namespace StandardScene.Signal.Logic
|
||||
Arrived(jgName, car, find);
|
||||
}
|
||||
|
||||
/// <summary>行驶中只做 RequestIn 安全闸:未允许进入且不是本车占用请求槽则停车。</summary>
|
||||
public static void OnMoving(Car car, SignalStopSpec spec, Func<string, PlcStationRuntime> find)
|
||||
{
|
||||
var jgName = spec.Part(0).Trim();
|
||||
@@ -44,6 +64,10 @@ namespace StandardScene.Signal.Logic
|
||||
RequestInJudge(jgName, car, find);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 请求进入。锁机构运行态,避免与 PLC Worker 同时改写字节 / 车号。
|
||||
/// 后半段与 <see cref="RequestInJudge"/> 相同,覆盖「刚放行后又被调度层启动」的竞态。
|
||||
/// </summary>
|
||||
private static void RequestIn(string jgName, Car car, Func<string, PlcStationRuntime> find)
|
||||
{
|
||||
var rt = find(jgName);
|
||||
@@ -89,6 +113,7 @@ namespace StandardScene.Signal.Logic
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>行驶中的 RequestIn 安全闸,条件与 RequestIn 后半段一致。</summary>
|
||||
private static void RequestInJudge(string jgName, Car car, Func<string, PlcStationRuntime> find)
|
||||
{
|
||||
var rt = find(jgName);
|
||||
@@ -110,6 +135,9 @@ namespace StandardScene.Signal.Logic
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 到位。InAgvNo 已是本车则认为已报到,避免每秒重复写「到位」把 WriteSuccess 清掉。
|
||||
/// </summary>
|
||||
private static void Arrived(string jgName, Car car, Func<string, PlcStationRuntime> find)
|
||||
{
|
||||
var rt = find(jgName);
|
||||
|
||||
Reference in New Issue
Block a user