using System.ComponentModel;
using Newtonsoft.Json;
namespace StandardScene.Signal.Model
{
///
/// PLC 机构:一把 S7 连接 + 一块 DB。点位和地标在 。
///
[SignalTable("stations", "stations.json", "PLC机构", Order = 1)]
[Category("PLC数据管理")]
[DisplayName("PLC配置列表(机构名称不能重复)")]
public class PlcStationModel
{
/// 逻辑名,握手点机构名、Worker 线程名都用它。不能空、不能重复。
[DisplayName("机构名称")]
public string JgName { get; set; } = "";
/// 西门子 PLC IP。
[DisplayName("机构IP")]
public string Ip { get; set; } = "127.0.0.1";
/// S7 端口。填 0 则用进程字段 PlcPort(默认 102)。
[DisplayName("端口")]
public int Port { get; set; } = 102;
/// 西门子系列。跟随进程则用信号交互进程的 PlcVersion。
[DisplayName("PLC类型")]
public SignalPlcType PlcType { get; set; } = SignalPlcType.跟随进程;
/// DB 块号。工位 BOOL 与心跳都拼到这块 DB。
[DisplayName("DB块号")]
public int DbNumber { get; set; } = 100;
/// 心跳字节偏移。未填 HeartDb 时拼 DB{n}.DBX{HeartByte}.{HeartBit}。
[DisplayName("心跳字节")]
public int HeartByte { get; set; } = 32;
/// 心跳位,0~7。
[DisplayName("心跳位")]
public int HeartBit { get; set; }
/// 上线 / 单牵引下线 / 双牵引下线 / 等待通行,决定 AutoLeave 分支。
[DisplayName("上下机构")]
public SignalLineType LineType { get; set; } = SignalLineType.未知;
/// 旧配置读字节地址。有工位表后不再使用;无工位表时合成 default 工位。
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string ReadDb { get; set; }
/// 旧配置写字节地址。
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string WriteDb { get; set; }
/// 旧配置心跳位整段地址,优先于心跳字节/位。
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string HeartDb { get; set; }
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public int JgInPointId { get; set; }
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string JgInContains { get; set; }
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public int JgPointId { get; set; }
[Browsable(false)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string JgContains { get; set; }
}
}