Files
StandardSence/StandardScene.Signal/Model/PlcStationModel.cs
T

76 lines
3.2 KiB
C#

using System.ComponentModel;
namespace StandardScene.Signal.Model
{
/// <summary>
/// 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.未知;
}
}