wenxiangchao
3 天以前 b544d5cccd76735e034c8055918a50927b437474
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using CommunityToolkit.Mvvm.ComponentModel;
 
namespace Plugin.DeviceConfig.Entity
{
    /// <summary>
    /// 设备种类枚举
    /// </summary>
    public enum DeviceKind
    {
        PowerSupply,
        CanDevice,
        PlcDevice,
        Chamber,
        DAQ
    }
 
    /// <summary>
    /// V3.0 执行位置枚举:Local=进程独占直连;Broker=跨进程共享,由 DeviceBroker 宿主代理
    /// </summary>
    public enum ExecutionModeKind
    {
        Local,
        Broker
    }
 
    /// <summary>
    /// 传输方式枚举
    /// </summary>
    public enum TransportType
    {
        Tcp,
        Serial,
        Visa,
        SDK,
        Can
    }
 
    /// <summary>
    /// 设备定义实体
    /// </summary>
    public partial class DeviceDefinition : ObservableObject
    {
        /// <summary>
        /// 无参构造函数(用于数据绑定)
        /// </summary>
        public DeviceDefinition() { }
 
        /// <summary>
        /// 设备唯一标识(主键)
        /// </summary>
        [ObservableProperty]
        private string deviceId = string.Empty;
 
        /// <summary>
        /// 设备种类: PowerSupply / CanDevice / PlcDevice / Chamber / DAQ
        /// </summary>
        [ObservableProperty]
        private DeviceKind kind;
 
        /// <summary>
        /// 驱动类型名称
        /// </summary>
        [ObservableProperty]
        private string driverType = string.Empty;
 
        /// <summary>
        /// 传输方式: Tcp / Serial / Visa / SDK
        /// </summary>
        [ObservableProperty]
        private TransportType transport;
 
        /// <summary>
        /// 连接端点(IP:Port 或 COM口)
        /// </summary>
        [ObservableProperty]
        private string endpoint = string.Empty;
 
        /// <summary>
        /// 执行位置: Local / Broker(V3.0 §05,默认 Local)
        /// </summary>
        [ObservableProperty]
        private ExecutionModeKind executionMode = ExecutionModeKind.Local;
 
        /// <summary>
        /// 仲裁域标识(必填,候选值由配置枚举;同一 PhysicalSessionKey 只能归属一个仲裁域宿主)
        /// </summary>
        [ObservableProperty]
        private string authorityId = string.Empty;
 
        /// <summary>
        /// Broker 宿主标识(仅 Broker 模式;须与仲裁域一致)
        /// </summary>
        [ObservableProperty]
        private string brokerId = string.Empty;
 
        /// <summary>
        /// Broker 宿主进程号(仅 Broker 记录用,运行期以 Broker 实际 PID 为准;MVP 占位当前进程)
        /// </summary>
        [ObservableProperty]
        private string ownerProcessId = string.Empty;
 
        /// <summary>
        /// 物理会话键(仅 Broker;地址规范化后的固定字符串,如 can/CAN_BUS_1/main)
        /// </summary>
        [ObservableProperty]
        private string physicalSessionKey = string.Empty;
 
        /// <summary>
        /// 访问控制策略:只读派生,不可手工编辑(V3.0 §05)
        /// </summary>
        public string AccessPolicy => ExecutionMode switch
        {
            ExecutionModeKind.Broker => "共享仲裁 · Broker SessionGate 代理",
            _ => "独占直连 · 本进程持有物理会话"
        };
 
        /// <summary>
        /// 生效版本号
        /// </summary>
        [ObservableProperty]
        private string effectiveVersion = string.Empty;
 
        /// <summary>
        /// 创建时间
        /// </summary>
        [ObservableProperty]
        private DateTime createdAt = DateTime.Now;
 
        /// <summary>
        /// 更新时间
        /// </summary>
        [ObservableProperty]
        private DateTime updatedAt = DateTime.Now;
    }
}