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