新增信号交互进程插件
This commit is contained in:
@@ -4,16 +4,37 @@ namespace StandardScene.Signal.Model
|
||||
{
|
||||
/// <summary>
|
||||
/// 握手点配置。对应老地图点上的 <c>SignalStop</c>(SignalType + SignalParams)。
|
||||
/// 站点 fields 若已填写同名键,优先用站点字段。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 站点 fields 若已填写同名键,扫车优先用站点字段,本表该站点不再生效。
|
||||
/// SignalParams 按分号切分,各类型格式见 <see cref="StandardScene.Signal.Logic.SignalStopSpec"/>。
|
||||
/// 列表主键展示为「站点号 + 类型」,同一站点建议只配一条。
|
||||
/// </remarks>
|
||||
[Category("握手点数据管理")]
|
||||
[DisplayName("握手点配置列表")]
|
||||
public class HandshakePointModel
|
||||
{
|
||||
/// <summary>地图站点号,与车 PositionId(siteID / GetLastSite)对应。</summary>
|
||||
[DisplayName("站点")]
|
||||
public int Sit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 握手类型:<c>JGControl</c> 机构进出、
|
||||
/// <c>PointControl</c> 销钉升降、
|
||||
/// <c>TimedCharging</c> 定时充电、
|
||||
/// <c>RateFlowControl</c> 区域限流。
|
||||
/// 其它字符串会每 10s 打一次「未找到业务模块」日志。
|
||||
/// </summary>
|
||||
[DisplayName("信号类型")]
|
||||
public string SignalType { get; set; } = "JGControl";
|
||||
|
||||
/// <summary>
|
||||
/// 类型参数。示例:
|
||||
/// JGControl <c>上线机构1;RequestIn</c> / <c>上线机构1;Arrived</c> / 第三段限流 <c>缓存区-A-2-60,61</c>;
|
||||
/// PointControl <c>UP1;下线机构1</c>;
|
||||
/// TimedCharging <c>300;95;20</c>;
|
||||
/// RateFlowControl <c>缓存区;A;2;60,61,62</c>。
|
||||
/// </summary>
|
||||
[DisplayName("信号参数")]
|
||||
public string SignalParams { get; set; } = "";
|
||||
}
|
||||
|
||||
@@ -3,40 +3,72 @@ using System.ComponentModel;
|
||||
namespace StandardScene.Signal.Model
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC 机构配置。对应反编译 <c>PLCModel</c> 的可存档字段;读写运行态不进本类。
|
||||
/// PLC 机构静态配置,对应反编译 <c>PLCModel</c> 可存档字段。
|
||||
/// 读写运行态(当前字节、机构内车号)在 <see cref="StandardScene.Signal.Plc.PlcStationRuntime"/>,不进本类、不进 JSON。
|
||||
/// 机构名称不能重复,列表编辑器用 JgName 做主键。
|
||||
/// </summary>
|
||||
[Category("PLC数据管理")]
|
||||
[DisplayName("PLC配置列表(机构名称不能重复)")]
|
||||
public class PlcStationModel
|
||||
{
|
||||
/// <summary>逻辑名,握手点 SignalParams 第一段、Worker 线程名都用它。不能空、不能重复。</summary>
|
||||
[DisplayName("机构名称")]
|
||||
public string JgName { get; set; } = "";
|
||||
|
||||
/// <summary>西门子 PLC IP。</summary>
|
||||
[DisplayName("机构IP")]
|
||||
public string Ip { get; set; } = "127.0.0.1";
|
||||
|
||||
/// <summary>S7 端口。填 0 则用进程字段 PlcPort(默认 102)。</summary>
|
||||
[DisplayName("端口")]
|
||||
public int Port { get; set; } = 102;
|
||||
|
||||
/// <summary>
|
||||
/// 读字节地址(PLC→调度:允许进入/离开)。
|
||||
/// 支持 <c>DB1.DBB0</c> 或 Hsl 风格 <c>DB1.0</c>。空则跳过读取。
|
||||
/// </summary>
|
||||
[DisplayName("读地址")]
|
||||
public string ReadDb { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 写字节地址(调度→PLC:进入中/到位/离开中/已离开)。
|
||||
/// Worker 会先回读再按需写入。空则跳过写和回读。
|
||||
/// </summary>
|
||||
[DisplayName("写地址")]
|
||||
public string WriteDb { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 心跳位地址,如 <c>DB1.DBX2.0</c>。
|
||||
/// Worker 每拍读当前值再写反码,让 PLC 判断调度进程存活。空则不做心跳。
|
||||
/// </summary>
|
||||
[DisplayName("写心跳地址")]
|
||||
public string HeartDb { get; set; } = "";
|
||||
|
||||
/// <summary>机构进入地标(预留,与老 PLCModel 字段对齐;上线跟车主要用 JgInContains)。</summary>
|
||||
[DisplayName("机构进入地标")]
|
||||
public int JgInPointId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 进入过程包含的站点列表(逗号/分号/空格分隔)。
|
||||
/// 上线:写字节=进入中 且车已不在此列表 → 视为到位。
|
||||
/// </summary>
|
||||
[DisplayName("机构进入包含地标")]
|
||||
public string JgInContains { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 机构工作地标。下线 RequestIn 用它查「机构内是否已有车」;
|
||||
/// 下线/等待通行离站时,车必须停在此点才响应允许离开。
|
||||
/// </summary>
|
||||
[DisplayName("机构地标")]
|
||||
public int JgPointId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 机构占用包含的站点列表。车已不在此列表且写字节还不是已离开 → 写已离开。
|
||||
/// </summary>
|
||||
[DisplayName("机构包含地标")]
|
||||
public string JgContains { get; set; } = "";
|
||||
|
||||
/// <summary>上线 / 单牵引下线 / 双牵引下线 / 等待通行,决定 AutoLeave 分支。</summary>
|
||||
[DisplayName("上下机构")]
|
||||
public SignalLineType LineType { get; set; } = SignalLineType.未知;
|
||||
}
|
||||
|
||||
@@ -2,18 +2,40 @@ using System.ComponentModel;
|
||||
|
||||
namespace StandardScene.Signal.Model
|
||||
{
|
||||
/// <summary>单个机构运行态快照,供 MissionStatus / 监视面板展示。</summary>
|
||||
/// <summary>
|
||||
/// 单个机构运行态快照,供 MissionStatus / 监视面板展示。
|
||||
/// 由 <see cref="StandardScene.Signal.Plc.PlcStationRuntime.ToSnapshot"/> 拷贝,UI 不要直接绑 Runtime。
|
||||
/// </summary>
|
||||
public class PlcStationSnapshot
|
||||
{
|
||||
/// <summary>机构逻辑名。</summary>
|
||||
[DisplayName("机构")] public string JgName { get; set; } = "";
|
||||
|
||||
/// <summary>最近一拍 PLC 读写是否成功。</summary>
|
||||
[DisplayName("连接")] public bool IsConnected { get; set; }
|
||||
|
||||
/// <summary>PLC→调度读字节的枚举名(允许进入 / 允许离开 / 无状态)。</summary>
|
||||
[DisplayName("读信号")] public string ReadSignal { get; set; } = "";
|
||||
|
||||
/// <summary>调度目标写字节的枚举名。</summary>
|
||||
[DisplayName("写信号")] public string WriteSignal { get; set; } = "";
|
||||
|
||||
/// <summary>从写地址回读到的枚举名,用于确认 PLC 是否已吃进目标值。</summary>
|
||||
[DisplayName("回读写值")] public string ReadWriteSignal { get; set; } = "";
|
||||
|
||||
/// <summary>已报到在机构内的 AGV 号,0 表示没有。</summary>
|
||||
[DisplayName("机构内车")] public int InAgvNo { get; set; }
|
||||
|
||||
/// <summary>已获准进入、正在往机构开的 AGV 号,0 表示没有。</summary>
|
||||
[DisplayName("请求进入车")] public int RequestInAgvNo { get; set; }
|
||||
|
||||
/// <summary>目标写字节是否已与回读一致。</summary>
|
||||
[DisplayName("写入成功")] public bool WriteSuccess { get; set; }
|
||||
|
||||
/// <summary>Worker 内存心跳翻转,表示线程在跑。</summary>
|
||||
[DisplayName("心跳")] public bool Heart { get; set; }
|
||||
|
||||
/// <summary>最近一次断线或周期异常原因。</summary>
|
||||
[DisplayName("最近错误")] public string LastError { get; set; } = "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,23 @@ using System.ComponentModel;
|
||||
|
||||
namespace StandardScene.Signal.Model
|
||||
{
|
||||
/// <summary>放行点配置。对应反编译 <c>StartSignModel</c>。</summary>
|
||||
/// <summary>
|
||||
/// 放行点配置。对应反编译 <c>StartSignModel</c>。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 车停在 <see cref="Sit"/> 且 <see cref="IsUse"/> 为 true 时,进程停充并启动,不读 PLC。
|
||||
/// 同一站点不要同时配握手点:扫车先握手再放行,可能把还在等允许进入的车开走。
|
||||
/// 站点号不能重复,列表编辑器用 Sit 做主键。
|
||||
/// </remarks>
|
||||
[Category("放行点数据管理")]
|
||||
[DisplayName("放行点配置列表")]
|
||||
public class ReleasePointModel
|
||||
{
|
||||
/// <summary>要自动放行的地图站点号。</summary>
|
||||
[DisplayName("放行站点")]
|
||||
public int Sit { get; set; }
|
||||
|
||||
/// <summary>false 时该条保留在 JSON 里但不生效,方便现场临时关掉某个点。</summary>
|
||||
[DisplayName("启用")]
|
||||
public bool IsUse { get; set; } = true;
|
||||
}
|
||||
|
||||
@@ -1,30 +1,62 @@
|
||||
namespace StandardScene.Signal.Model
|
||||
{
|
||||
/// <summary>PLC → 调度:读字节含义(与反编译 ENUM_READ_SIGNAL 对齐)。</summary>
|
||||
/// <summary>
|
||||
/// PLC → 调度:读字节含义。对齐反编译 <c>ENUM_READ_SIGNAL</c>。
|
||||
/// 机构用这一个字节告诉 AGV 现在能不能进、能不能出。
|
||||
/// </summary>
|
||||
public enum SignalReadValue : byte
|
||||
{
|
||||
/// <summary>0:空闲 / 未允许。RequestIn 必须看到写字节也是无状态才放行。</summary>
|
||||
无状态 = 0,
|
||||
|
||||
/// <summary>1:允许进入机构。扫车 RequestIn 的放行条件之一。</summary>
|
||||
允许进入 = 1,
|
||||
|
||||
/// <summary>2:允许离开机构。下线升销钉、等待通行机构、PointControl 等会等这个值。</summary>
|
||||
允许离开 = 2
|
||||
}
|
||||
|
||||
/// <summary>调度 → PLC:写字节含义(与反编译 ENUM_WRITE_SIGNAL 对齐)。</summary>
|
||||
/// <summary>
|
||||
/// 调度 → PLC:写字节含义。对齐反编译 <c>ENUM_WRITE_SIGNAL</c>。
|
||||
/// AGV 用这一个字节向机构汇报当前处于进站流程的哪一步。
|
||||
/// </summary>
|
||||
public enum SignalWriteValue : byte
|
||||
{
|
||||
/// <summary>0:空闲。离站清空后回到此值,下一辆才能 RequestIn。</summary>
|
||||
无状态 = 0,
|
||||
|
||||
/// <summary>1:已获准进入、正在往机构开。RequestIn 成功时写入。</summary>
|
||||
进入中 = 1,
|
||||
|
||||
/// <summary>2:已到达机构内地标。Arrived 或上线 AutoLeave 检测到离开进入包含区时写入。</summary>
|
||||
到位 = 2,
|
||||
|
||||
/// <summary>3:正在离开机构。上线看到车在跑、下线/等待通行启动后写入。</summary>
|
||||
离开中 = 3,
|
||||
|
||||
/// <summary>4:已离开包含地标。PLC 确认后调度清零写字节和车号。</summary>
|
||||
已离开 = 4
|
||||
}
|
||||
|
||||
/// <summary>机构类型(与反编译 ENUM_JGTYPE 对齐)。</summary>
|
||||
/// <summary>
|
||||
/// 机构类型。对齐反编译 <c>ENUM_JGTYPE</c>。
|
||||
/// 决定 <see cref="StandardScene.Signal.Plc.PlcStationLogic.AutoLeave"/> 走哪套离站,以及 RequestIn 要不要查机构内是否有车。
|
||||
/// </summary>
|
||||
public enum SignalLineType : byte
|
||||
{
|
||||
/// <summary>0:未配置,AutoLeave 不处理。</summary>
|
||||
未知 = 0,
|
||||
|
||||
/// <summary>1:上线。进站靠扫车 RequestIn/Arrived,离站跟车位自动推进到位/离开中/已离开。</summary>
|
||||
上线机构 = 1,
|
||||
|
||||
/// <summary>2:单牵引下线。RequestIn 时若 JgPointId 上已有车则不放行;离站要升销钉1。</summary>
|
||||
单牵引下线机构 = 2,
|
||||
|
||||
/// <summary>3:双牵引下线。同单牵引,离站还需销钉2到位。</summary>
|
||||
双牵引下线机构 = 3,
|
||||
|
||||
/// <summary>4:等待通行。无销钉,允许离开后停充启动即可。</summary>
|
||||
等待通行机构 = 4
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user