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";
|
}
|
}
|