啊鑫
2025-07-22 b03b881275a164c635521c319f3f645c77675b29
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
using System.Text.Json.Serialization;
 
namespace GSModbus.Config
{
    /// <summary>
    /// Modbus通信完整配置
    /// </summary>
    public class ModbusConfiguration
    {
        /// <summary>
        /// 配置文件版本
        /// </summary>
        [JsonPropertyName("ConfigVersion")]
        public string ConfigVersion { get; set; } = "1.0";
 
        /// <summary>
        /// 项目名称
        /// </summary>
        [JsonPropertyName("ProjectName")]
        public string ProjectName { get; set; } = string.Empty;
 
        /// <summary>
        /// 配置描述
        /// </summary>
        [JsonPropertyName("Description")]
        public string Description { get; set; } = string.Empty;
 
        /// <summary>
        /// 连接配置
        /// </summary>
        [JsonPropertyName("Connection")]
        public ConnectionConfig Connection { get; set; } = new();
 
        /// <summary>
        /// 通信配置
        /// </summary>
        [JsonPropertyName("Communication")]
        public CommunicationConfig Communication { get; set; } = new();
 
        /// <summary>
        /// 输出地址配置(MES发送给PLC)
        /// </summary>
        [JsonPropertyName("OutputAddresses")]
        public OutputAddressConfig OutputAddresses { get; set; } = new();
 
        /// <summary>
        /// 输入地址配置(从PLC读取)
        /// </summary>
        [JsonPropertyName("InputAddresses")]
        public InputAddressConfig InputAddresses { get; set; } = new();
 
        /// <summary>
        /// 用户界面配置
        /// </summary>
        [JsonPropertyName("UI")]
        public UIConfig UI { get; set; } = new();
 
        /// <summary>
        /// 数据库配置
        /// </summary>
        [JsonPropertyName("Database")]
        public DatabaseConfig Database { get; set; } = new();
    }
 
    /// <summary>
    /// 连接配置
    /// </summary>
    public class ConnectionConfig
    {
        /// <summary>
        /// PLC IP地址
        /// </summary>
        [JsonPropertyName("IpAddress")]
        public string IpAddress { get; set; } = "192.168.1.100";
 
        /// <summary>
        /// PLC端口号
        /// </summary>
        [JsonPropertyName("Port")]
        public int Port { get; set; } = 502;
 
        /// <summary>
        /// 连接超时时间(毫秒)
        /// </summary>
        [JsonPropertyName("ConnectionTimeoutMs")]
        public int ConnectionTimeoutMs { get; set; } = 5000;
 
        /// <summary>
        /// 操作超时时间(毫秒)
        /// </summary>
        [JsonPropertyName("OperationTimeoutMs")]
        public int OperationTimeoutMs { get; set; } = 3000;
    }
 
    /// <summary>
    /// 通信配置
    /// </summary>
    public class CommunicationConfig
    {
        /// <summary>
        /// 心跳间隔(毫秒)
        /// </summary>
        [JsonPropertyName("HeartbeatIntervalMs")]
        public int HeartbeatIntervalMs { get; set; } = 1000;
 
        /// <summary>
        /// 数据轮询间隔(毫秒)
        /// </summary>
        [JsonPropertyName("DataPollingIntervalMs")]
        public int DataPollingIntervalMs { get; set; } = 500;
 
        /// <summary>
        /// 是否启用自动重连
        /// </summary>
        [JsonPropertyName("EnableAutoReconnect")]
        public bool EnableAutoReconnect { get; set; } = true;
 
        /// <summary>
        /// 重连延迟(毫秒)
        /// </summary>
        [JsonPropertyName("ReconnectDelayMs")]
        public int ReconnectDelayMs { get; set; } = 3000;
 
        /// <summary>
        /// 最大重试次数
        /// </summary>
        [JsonPropertyName("MaxRetryCount")]
        public int MaxRetryCount { get; set; } = 3;
    }
 
    /// <summary>
    /// 输出地址配置(MES发送给PLC)
    /// </summary>
    public class OutputAddressConfig
    {
        /// <summary>
        /// 配置描述
        /// </summary>
        [JsonPropertyName("Description")]
        public string Description { get; set; } = string.Empty;
 
        /// <summary>
        /// 心跳地址配置
        /// </summary>
        [JsonPropertyName("HeartbeatAddress")]
        public AddressField HeartbeatAddress { get; set; } = new();
 
        /// <summary>
        /// 数据确认地址配置
        /// </summary>
        [JsonPropertyName("DataConfirmationAddress")]
        public AddressField DataConfirmationAddress { get; set; } = new();
    }
 
    /// <summary>
    /// 输入地址配置(从PLC读取)
    /// </summary>
    public class InputAddressConfig
    {
        /// <summary>
        /// 配置描述
        /// </summary>
        [JsonPropertyName("Description")]
        public string Description { get; set; } = string.Empty;
 
        /// <summary>
        /// 控制信号配置
        /// </summary>
        [JsonPropertyName("ControlSignals")]
        public Dictionary<string, DataField> ControlSignals { get; set; } = new();
 
        /// <summary>
        /// 产品数据配置
        /// </summary>
        [JsonPropertyName("ProductData")]
        public Dictionary<string, DataField> ProductData { get; set; } = new();
 
        /// <summary>
        /// 测量数据配置
        /// </summary>
        [JsonPropertyName("MeasurementData")]
        public Dictionary<string, DataField> MeasurementData { get; set; } = new();
    }
 
    /// <summary>
    /// 简单地址字段配置
    /// </summary>
    public class AddressField
    {
        /// <summary>
        /// 寄存器地址
        /// </summary>
        [JsonPropertyName("Address")]
        public int Address { get; set; }
 
        /// <summary>
        /// 数据类型
        /// </summary>
        [JsonPropertyName("DataType")]
        public string DataType { get; set; } = "Byte";
 
        /// <summary>
        /// 字段描述
        /// </summary>
        [JsonPropertyName("Description")]
        public string Description { get; set; } = string.Empty;
    }
 
    /// <summary>
    /// 数据字段配置
    /// </summary>
    public class DataField : AddressField
    {
        /// <summary>
        /// 数据长度(寄存器数量)
        /// </summary>
        [JsonPropertyName("Length")]
        public int Length { get; set; } = 1;
 
        /// <summary>
        /// 显示名称
        /// </summary>
        [JsonPropertyName("DisplayName")]
        public string DisplayName { get; set; } = string.Empty;
 
        /// <summary>
        /// 编码方式(用于字符串和时间戳)
        /// </summary>
        [JsonPropertyName("Encoding")]
        public string Encoding { get; set; } = "BigEndian";
 
        /// <summary>
        /// 缩放因子(用于整数转换为实际值)
        /// </summary>
        [JsonPropertyName("Scale")]
        public double Scale { get; set; } = 1.0;
 
        /// <summary>
        /// 单位
        /// </summary>
        [JsonPropertyName("Unit")]
        public string Unit { get; set; } = string.Empty;
 
        /// <summary>
        /// 小数位数
        /// </summary>
        [JsonPropertyName("DecimalPlaces")]
        public int DecimalPlaces { get; set; } = 0;
 
        /// <summary>
        /// 时间戳格式(用于时间戳数据类型)
        /// </summary>
        [JsonPropertyName("Format")]
        public string Format { get; set; } = string.Empty;
 
        /// <summary>
        /// 值映射(用于枚举值显示)
        /// </summary>
        [JsonPropertyName("ValueMap")]
        public Dictionary<string, string>? ValueMap { get; set; }
    }
 
    /// <summary>
    /// 用户界面配置
    /// </summary>
    public class UIConfig
    {
        /// <summary>
        /// 窗口标题
        /// </summary>
        [JsonPropertyName("WindowTitle")]
        public string WindowTitle { get; set; } = "GSModbus - 通用通信系统";
 
        /// <summary>
        /// 是否自动开始数据轮询
        /// </summary>
        [JsonPropertyName("AutoStartPolling")]
        public bool AutoStartPolling { get; set; } = false;
 
        /// <summary>
        /// 日志级别
        /// </summary>
        [JsonPropertyName("LogLevel")]
        public string LogLevel { get; set; } = "Info";
 
        /// <summary>
        /// 最大日志行数
        /// </summary>
        [JsonPropertyName("MaxLogLines")]
        public int MaxLogLines { get; set; } = 1000;
    }
 
    /// <summary>
    /// 支持的数据类型枚举
    /// </summary>
    public enum ModbusDataType
    {
        Byte,       // 单字节
        Integer,    // 整数
        String,     // 字符串
        Timestamp,  // 时间戳
        Float,      // 浮点数
        Boolean     // 布尔值
    }
 
    /// <summary>
    /// 编码方式枚举
    /// </summary>
    public enum EncodingType
    {
        BigEndian,    // 大端
        LittleEndian  // 小端
    }
 
    /// <summary>
    /// 数据库配置
    /// </summary>
    public class DatabaseConfig
    {
        /// <summary>
        /// 是否启用数据库
        /// </summary>
        [JsonPropertyName("Enabled")]
        public bool Enabled { get; set; } = false;
 
        /// <summary>
        /// 数据库类型(SqlServer, MySql, Oracle, Sqlite等)
        /// </summary>
        [JsonPropertyName("Type")]
        public string Type { get; set; } = "SqlServer";
 
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        [JsonPropertyName("ConnectionString")]
        public string ConnectionString { get; set; } = string.Empty;
 
        /// <summary>
        /// 是否自动创建表
        /// </summary>
        [JsonPropertyName("AutoCreateTables")]
        public bool AutoCreateTables { get; set; } = true;
 
        /// <summary>
        /// 批量插入大小
        /// </summary>
        [JsonPropertyName("BatchSize")]
        public int BatchSize { get; set; } = 100;
 
        /// <summary>
        /// 数据保留天数(0表示永久保留)
        /// </summary>
        [JsonPropertyName("DataRetentionDays")]
        public int DataRetentionDays { get; set; } = 30;
 
        /// <summary>
        /// 表配置
        /// </summary>
        [JsonPropertyName("Tables")]
        public DatabaseTableConfig Tables { get; set; } = new();
    }
 
    /// <summary>
    /// 数据库表配置
    /// </summary>
    public class DatabaseTableConfig
    {
        /// <summary>
        /// 主数据表名
        /// </summary>
        [JsonPropertyName("ModbusDataTable")]
        public string ModbusDataTable { get; set; } = "ModbusData";
 
        /// <summary>
        /// 通信日志表名
        /// </summary>
        [JsonPropertyName("CommunicationLogTable")]
        public string CommunicationLogTable { get; set; } = "CommunicationLog";
 
        /// <summary>
        /// 错误日志表名
        /// </summary>
        [JsonPropertyName("ErrorLogTable")]
        public string ErrorLogTable { get; set; } = "ErrorLog";
 
        /// <summary>
        /// 统计数据表名
        /// </summary>
        [JsonPropertyName("StatisticsTable")]
        public string StatisticsTable { get; set; } = "Statistics";
    }
}