✨ feat: 初始化 PCB 检测 WPF 应用程序
* 创建 AxiOmron.PcbCheck 项目主框架及解决方案 * 添加 Dashboard 和系统设置页面 * 实现 Modbus TCP PLC、扫码枪、SFTP 查询等核心服务 * 集成 Andon 报警、工作流托管服务与日志配置 * 补充项目文档和 UI 设计规范
This commit is contained in:
415
src/AxiOmron.PcbCheck/Options/AppConfig.cs
Normal file
415
src/AxiOmron.PcbCheck/Options/AppConfig.cs
Normal file
@@ -0,0 +1,415 @@
|
||||
namespace AxiOmron.PcbCheck.Options;
|
||||
|
||||
/// <summary>
|
||||
/// 表示 PCB 目检上位机的根配置对象。
|
||||
/// </summary>
|
||||
public sealed class AppConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 通信配置。
|
||||
/// </summary>
|
||||
public PlcOptions Plc { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置扫码枪配置。
|
||||
/// </summary>
|
||||
public ScannerOptions Scanner { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 SFTP 校验配置。
|
||||
/// </summary>
|
||||
public SftpOptions Sftp { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置安灯接口配置。
|
||||
/// </summary>
|
||||
public AndonOptions Andon { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置流程控制配置。
|
||||
/// </summary>
|
||||
public WorkflowOptions Workflow { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示 PLC 通信参数与点位映射配置。
|
||||
/// </summary>
|
||||
public sealed class PlcOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 主机地址。
|
||||
/// </summary>
|
||||
public string Host { get; set; } = "127.0.0.1";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 端口。
|
||||
/// </summary>
|
||||
public int Port { get; set; } = 502;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 Modbus 从站号。
|
||||
/// </summary>
|
||||
public byte UnitId { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置轮询周期,单位为毫秒。
|
||||
/// </summary>
|
||||
public int PollIntervalMs { get; set; } = 200;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置连接超时,单位为毫秒。
|
||||
/// </summary>
|
||||
public int ConnectTimeoutMs { get; set; } = 3000;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PC 在线心跳翻转周期,单位为毫秒。
|
||||
/// </summary>
|
||||
public int HeartbeatIntervalMs { get; set; } = 500;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置放行脉冲持续时间,单位为毫秒。
|
||||
/// </summary>
|
||||
public int ReleasePulseMs { get; set; } = 500;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置放行应答超时,单位为毫秒。
|
||||
/// </summary>
|
||||
public int ReleaseAckTimeoutMs { get; set; } = 2000;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 输入点位配置。
|
||||
/// </summary>
|
||||
public PlcInputAddressOptions Inputs { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 输出点位配置。
|
||||
/// </summary>
|
||||
public PlcOutputAddressOptions Outputs { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 结果寄存器配置。
|
||||
/// </summary>
|
||||
public PlcRegisterAddressOptions Registers { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示扫码枪串口参数配置。
|
||||
/// </summary>
|
||||
public sealed class ScannerOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置串口号。
|
||||
/// </summary>
|
||||
public string PortName { get; set; } = "COM1";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置波特率。
|
||||
/// </summary>
|
||||
public int BaudRate { get; set; } = 9600;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置数据位。
|
||||
/// </summary>
|
||||
public int DataBits { get; set; } = 8;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置校验位名称。
|
||||
/// </summary>
|
||||
public string Parity { get; set; } = "None";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置停止位名称。
|
||||
/// </summary>
|
||||
public string StopBits { get; set; } = "One";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置单次扫码超时,单位为毫秒。
|
||||
/// </summary>
|
||||
public int ReadTimeoutMs { get; set; } = 3000;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置触发命令,支持转义字符。
|
||||
/// </summary>
|
||||
public string TriggerCommand { get; set; } = "SCAN\\r";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置返回报文结束符,支持转义字符。
|
||||
/// </summary>
|
||||
public string ResponseTerminator { get; set; } = "\\r";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置最大扫码尝试次数。
|
||||
/// </summary>
|
||||
public int MaxScanAttempts { get; set; } = 3;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示 SFTP 文件查找配置。
|
||||
/// </summary>
|
||||
public sealed class SftpOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置 SFTP 主机地址。
|
||||
/// </summary>
|
||||
public string Host { get; set; } = "127.0.0.1";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 SFTP 端口。
|
||||
/// </summary>
|
||||
public int Port { get; set; } = 22;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置登录用户名。
|
||||
/// </summary>
|
||||
public string Username { get; set; } = "user";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置登录密码。
|
||||
/// </summary>
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置私钥文件路径。
|
||||
/// </summary>
|
||||
public string PrivateKeyPath { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置私钥口令。
|
||||
/// </summary>
|
||||
public string PrivateKeyPassphrase { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置根目录。
|
||||
/// </summary>
|
||||
public string RootPath { get; set; } = "/pcb";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置文件名匹配模板。
|
||||
/// </summary>
|
||||
public string FileNamePattern { get; set; } = "${barcode}.txt";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置首次未命中后的重试间隔,单位为秒。
|
||||
/// </summary>
|
||||
public int RetryIntervalSeconds { get; set; } = 2;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置首次未命中后的最大重试次数。
|
||||
/// </summary>
|
||||
public int MaxRetryCount { get; set; } = 3;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置连接超时,单位为毫秒。
|
||||
/// </summary>
|
||||
public int ConnectTimeoutMs { get; set; } = 3000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示安灯 HTTP 接口配置。
|
||||
/// </summary>
|
||||
public sealed class AndonOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置是否启用安灯接口。
|
||||
/// </summary>
|
||||
public bool Enable { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置安灯接口地址。
|
||||
/// </summary>
|
||||
public string Url { get; set; } = "http://127.0.0.1:5000/api/andon";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置请求方法。
|
||||
/// </summary>
|
||||
public string Method { get; set; } = "POST";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置请求超时,单位为毫秒。
|
||||
/// </summary>
|
||||
public int TimeoutMs { get; set; } = 3000;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置工位编码。
|
||||
/// </summary>
|
||||
public string StationCode { get; set; } = "OMRON-01";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置工位名称。
|
||||
/// </summary>
|
||||
public string StationName { get; set; } = "PCB 目检工位";
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置扫码失败报警是否启用。
|
||||
/// </summary>
|
||||
public bool EnableScanFailAlarm { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置文件未找到报警是否启用。
|
||||
/// </summary>
|
||||
public bool EnableFileNotFoundAlarm { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置附加请求头。
|
||||
/// </summary>
|
||||
public Dictionary<string, string> Headers { get; set; } = new(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示流程控制公共配置。
|
||||
/// </summary>
|
||||
public sealed class WorkflowOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置启动流程前是否要求 PLC 就绪。
|
||||
/// </summary>
|
||||
public bool RequirePlcReady { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置启动流程前是否要求自动模式。
|
||||
/// </summary>
|
||||
public bool RequireAutoMode { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置启动流程前是否要求工位使能。
|
||||
/// </summary>
|
||||
public bool RequireStationEnable { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置故障后是否必须人工复位。
|
||||
/// </summary>
|
||||
public bool RequireManualResetAfterFault { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 UI 日志最大保留条数。
|
||||
/// </summary>
|
||||
public int MaxUiLogEntries { get; set; } = 200;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置最近处理记录最大保留条数。
|
||||
/// </summary>
|
||||
public int MaxBoardRecords { get; set; } = 100;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示 PLC 输入点位地址配置。
|
||||
/// </summary>
|
||||
public sealed class PlcInputAddressOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 就绪点位地址。
|
||||
/// </summary>
|
||||
public int PlcReady { get; set; } = 10001;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PCB 到位点位地址。
|
||||
/// </summary>
|
||||
public int PcbArrived { get; set; } = 10002;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 复位点位地址。
|
||||
/// </summary>
|
||||
public int PlcReset { get; set; } = 10003;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PLC 放行应答点位地址。
|
||||
/// </summary>
|
||||
public int PlcAckRelease { get; set; } = 10004;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置自动模式点位地址。
|
||||
/// </summary>
|
||||
public int AutoMode { get; set; } = 10005;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置工位使能点位地址。
|
||||
/// </summary>
|
||||
public int StationEnable { get; set; } = 10006;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示 PLC 输出线圈地址配置。
|
||||
/// </summary>
|
||||
public sealed class PlcOutputAddressOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置 PC 在线心跳位地址。
|
||||
/// </summary>
|
||||
public int PcOnline { get; set; } = 51;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 PC 忙碌位地址。
|
||||
/// </summary>
|
||||
public int PcBusy { get; set; } = 52;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置扫码成功位地址。
|
||||
/// </summary>
|
||||
public int ScanOk { get; set; } = 53;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置扫码失败位地址。
|
||||
/// </summary>
|
||||
public int ScanNg { get; set; } = 54;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置文件存在位地址。
|
||||
/// </summary>
|
||||
public int FileFound { get; set; } = 55;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置文件未找到位地址。
|
||||
/// </summary>
|
||||
public int FileNotFound { get; set; } = 56;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置报警位地址。
|
||||
/// </summary>
|
||||
public int AlarmRaised { get; set; } = 57;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置放行位地址。
|
||||
/// </summary>
|
||||
public int ReleasePermit { get; set; } = 58;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置流程完成位地址。
|
||||
/// </summary>
|
||||
public int ProcessDone { get; set; } = 59;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置系统故障位地址。
|
||||
/// </summary>
|
||||
public int SystemFault { get; set; } = 60;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 表示 PLC 寄存器地址配置。
|
||||
/// </summary>
|
||||
public sealed class PlcRegisterAddressOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置结果代码寄存器地址。
|
||||
/// </summary>
|
||||
public int ResultCode { get; set; } = 40001;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置扫码次数寄存器地址。
|
||||
/// </summary>
|
||||
public int ScanTryCount { get; set; } = 40002;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 SFTP 查询次数寄存器地址。
|
||||
/// </summary>
|
||||
public int SftpTryCount { get; set; } = 40003;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置报警代码寄存器地址。
|
||||
/// </summary>
|
||||
public int AlarmCode { get; set; } = 40004;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置流程状态代码寄存器地址。
|
||||
/// </summary>
|
||||
public int FlowStateCode { get; set; } = 40005;
|
||||
}
|
||||
Reference in New Issue
Block a user