namespace AxiOmron.PcbCheck.Options;
///
/// 表示 PCB 目检上位机的根配置对象。
///
public sealed class AppConfig
{
///
/// 获取或设置 PLC 通信配置。
///
public PlcOptions Plc { get; set; } = new();
///
/// 获取或设置扫码枪配置。
///
public ScannerOptions Scanner { get; set; } = new();
///
/// 获取或设置统一文件校验配置。
///
public FileCheckOptions FileCheck { get; set; } = new();
///
/// 获取或设置 SFTP 校验配置。
///
public SftpOptions Sftp { get; set; } = new();
///
/// 获取或设置安灯接口配置。
///
public AndonOptions Andon { get; set; } = new();
///
/// 获取或设置流程控制配置。
///
public WorkflowOptions Workflow { get; set; } = new();
///
/// 获取或设置处理记录持久化配置。
///
public RecordPersistenceOptions RecordPersistence { get; set; } = new();
///
/// 获取或设置安全控制配置。
///
public SecurityOptions Security { get; set; } = new();
}
///
/// 表示文件校验通道类型。
///
public enum FileCheckProvider
{
///
/// 使用 SFTP 目录作为文件校验来源。
///
Sftp,
///
/// 使用本地磁盘目录作为文件校验来源。
///
Local
}
///
/// 表示统一文件校验配置。
///
public sealed class FileCheckOptions
{
///
/// 获取或设置当前启用的文件校验通道。
///
public FileCheckProvider Provider { get; set; } = FileCheckProvider.Sftp;
///
/// 获取或设置文件名匹配模板。
///
public string FileNamePattern { get; set; } = "${barcode}.txt";
///
/// 获取或设置首次未命中后的重试间隔,单位为秒。
///
public int RetryIntervalSeconds { get; set; } = 2;
///
/// 获取或设置首次未命中后的最大重试次数。
///
public int MaxRetryCount { get; set; } = 3;
///
/// 获取或设置本地磁盘文件校验配置。
///
public LocalFileCheckOptions Local { get; set; } = new();
}
///
/// 表示本地磁盘文件校验配置。
///
public sealed class LocalFileCheckOptions
{
///
/// 获取或设置本地文件校验根目录。
///
public string RootPath { get; set; } = "D:\\PcbCheck\\Files";
}
///
/// 表示 PLC 通信参数与点位映射配置。
///
public sealed class PlcOptions
{
///
/// 获取或设置 PLC 主机地址。
///
public string Host { get; set; } = "127.0.0.1";
///
/// 获取或设置 PLC 端口。
///
public int Port { get; set; } = 9600;
///
/// 获取或设置 FINS 目标单元地址。
///
public byte UnitAddress { get; set; }
///
/// 获取或设置上位机节点编号。
///
public byte SourceNodeAddress { get; set; } = 25;
///
/// 获取或设置 PLC 寄存器字节序,默认使用 BADC 以匹配现场 D 区 Int16 高低字节顺序。
///
public string? EndianFormat { get; set; } = "BADC";
///
/// 获取或设置轮询周期,单位为毫秒。
///
public int PollIntervalMs { get; set; } = 200;
///
/// 获取或设置连接超时,单位为毫秒。
///
public int ConnectTimeoutMs { get; set; } = 3000;
///
/// 获取或设置放行脉冲持续时间,单位为毫秒。
///
public int ReleasePulseMs { get; set; } = 500;
///
/// 获取或设置放行应答超时,单位为毫秒。
///
public int ReleaseAckTimeoutMs { get; set; } = 2000;
///
/// 获取或设置 PLC 输入点位配置。
///
public PlcInputAddressOptions Inputs { get; set; } = new();
///
/// 获取或设置 PLC 输出点位配置。
///
public PlcOutputAddressOptions Outputs { get; set; } = new();
///
/// 获取或设置 PLC 结果寄存器配置。
///
public PlcRegisterAddressOptions Registers { get; set; } = new();
}
///
/// 表示双 TCP 扫码枪参数配置。
///
public sealed class ScannerOptions
{
///
/// 获取或设置扫码枪1配置。
///
public TcpScannerEndpointOptions Scanner1 { get; set; } = new()
{
Name = "扫码枪1",
Host = "127.0.0.1",
Port = 9001
};
///
/// 获取或设置扫码枪2配置。
///
public TcpScannerEndpointOptions Scanner2 { get; set; } = new()
{
Name = "扫码枪2",
Host = "127.0.0.1",
Port = 9002
};
///
/// 获取或设置 TCP 连接超时,单位为毫秒。
///
public int ConnectTimeoutMs { get; set; } = 3000;
///
/// 获取或设置扫码枪触发命令,支持转义字符。
///
public string TriggerCommand { get; set; } = "T";
///
/// 获取或设置返回报文结束符,支持转义字符;为空时读取到首批非空数据即返回。
///
public string ResponseTerminator { get; set; } = "\\r";
///
/// 获取或设置是否并发触发两把扫码枪。
///
public bool TriggerInParallel { get; set; } = true;
///
/// 获取或设置单次扫码超时,单位为毫秒。
///
public int ReadTimeoutMs { get; set; } = 3000;
}
///
/// 表示单把 TCP 扫码枪连接参数。
///
public sealed class TcpScannerEndpointOptions
{
///
/// 获取或设置扫码枪名称。
///
public string Name { get; set; } = string.Empty;
///
/// 获取或设置扫码枪 IP 或主机名。
///
public string Host { get; set; } = "127.0.0.1";
///
/// 获取或设置扫码枪 TCP 端口。
///
public int Port { get; set; } = 9001;
}
///
/// 表示 SFTP 文件查找配置。
///
public sealed class SftpOptions
{
///
/// 获取或设置 SFTP 主机地址。
///
public string Host { get; set; } = "127.0.0.1";
///
/// 获取或设置 SFTP 端口。
///
public int Port { get; set; } = 22;
///
/// 获取或设置登录用户名。
///
public string Username { get; set; } = "user";
///
/// 获取或设置登录密码。
///
public string Password { get; set; } = string.Empty;
///
/// 获取或设置私钥文件路径。
///
public string PrivateKeyPath { get; set; } = string.Empty;
///
/// 获取或设置私钥口令。
///
public string PrivateKeyPassphrase { get; set; } = string.Empty;
///
/// 获取或设置根目录。
///
public string RootPath { get; set; } = "/pcb";
///
/// 获取或设置文件名匹配模板。
///
public string FileNamePattern { get; set; } = "${barcode}.txt";
///
/// 获取或设置首次未命中后的重试间隔,单位为秒。
///
public int RetryIntervalSeconds { get; set; } = 2;
///
/// 获取或设置首次未命中后的最大重试次数。
///
public int MaxRetryCount { get; set; } = 3;
///
/// 获取或设置连接超时,单位为毫秒。
///
public int ConnectTimeoutMs { get; set; } = 3000;
}
///
/// 表示安灯 HTTP 接口配置。
///
public sealed class AndonOptions
{
///
/// 获取或设置是否启用安灯接口。
///
public bool Enable { get; set; } = true;
///
/// 获取或设置安灯接口地址。
///
public string Url { get; set; } = "https://shp.prod.aliyun.mit.uaes.com/api/mit/MAE/Station/Status/alarm";
///
/// 获取或设置请求方法。
///
public string Method { get; set; } = "POST";
///
/// 获取或设置请求超时,单位为毫秒。
///
public int TimeoutMs { get; set; } = 3000;
///
/// 获取或设置安灯主题。
///
public string AndonTheme { get; set; } = "SS7_Auto_Andon";
///
/// 获取或设置设备唯一标识。
///
public string Eid { get; set; } = "PR1965269806334783488";
///
/// 获取或设置调用来源标记。
///
public string FromSign { get; set; } = "IOT";
///
/// 获取或设置服务标识。
///
public string ServiceId { get; set; } = "4dccd822-86b2-47dd-89bd-ca472ba0d14d";
///
/// 获取或设置扫码失败报警是否启用。
///
public bool EnableScanFailAlarm { get; set; } = true;
///
/// 获取或设置文件未找到报警是否启用。
///
public bool EnableFileNotFoundAlarm { get; set; } = false;
///
/// 获取或设置附加请求头。
///
public Dictionary Headers { get; set; } = new(StringComparer.OrdinalIgnoreCase);
}
///
/// 表示流程控制公共配置。
///
public sealed class WorkflowOptions
{
///
/// 获取或设置故障后是否必须人工复位。
///
public bool RequireManualResetAfterFault { get; set; } = true;
///
/// 获取或设置 UI 日志最大保留条数。
///
public int MaxUiLogEntries { get; set; } = 200;
///
/// 获取或设置最近处理记录最大保留条数。
///
public int MaxBoardRecords { get; set; } = 100;
}
///
/// 表示处理记录 CSV 持久化配置。
///
public sealed class RecordPersistenceOptions
{
///
/// 获取或设置记录目录相对路径或绝对路径。
///
public string DirectoryPath { get; set; } = "Data\\Records";
///
/// 获取或设置跨天检查周期,单位为秒。
///
public int DayChangeCheckIntervalSeconds { get; set; } = 30;
}
///
/// 表示简易管理员控制配置。
///
public sealed class SecurityOptions
{
///
/// 获取或设置管理员解锁密码。
///
public string AdminPassword { get; set; } = "AxiOmron@123";
///
/// 获取或设置管理员解锁会话超时时间,单位为分钟。
///
public int AdminSessionTimeoutMinutes { get; set; } = 15;
}
///
/// 表示 PLC 输入点位地址配置。
///
public sealed class PlcInputAddressOptions
{
///
/// 获取或设置 PCB 到位点位地址。
///
public int PcbArrived { get; set; } = 1001;
///
/// 获取或设置 PLC 复位点位地址。
///
public int PlcReset { get; set; } = 1002;
///
/// 获取或设置 PLC 放行应答点位地址。
///
public int PlcAckRelease { get; set; } = 1003;
}
///
/// 表示 PLC 输出地址配置。
///
public sealed class PlcOutputAddressOptions
{
///
/// 获取或设置 PC 忙碌位地址。
///
public int PcBusy { get; set; } = 1051;
///
/// 获取或设置放行位地址。
///
public int ReleasePermit { get; set; } = 1052;
}
///
/// 表示 PLC 寄存器地址配置。
///
public sealed class PlcRegisterAddressOptions
{
///
/// 获取或设置结果代码寄存器地址。
///
public int ResultCode { get; set; } = 1100;
}