Files
FATrace/FATrace.OEMApp/HelpManual/SOPManual.md
2026-01-19 12:40:45 +08:00

356 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FATrace.OEMApp 软件使用手册SOP
## 1. 文档说明
### 1.1 适用范围
- 本手册适用于 FATrace.OEMAppWinForms 客户端)。
- 该客户端用于:接收“内袋二维码/条码”触发事件,调用海康 NVR 按时间段下载录像文件,保存到本地/NAS并将视频文件与条码信息写入数据库提供历史查询与播放。
### 1.2 目标读者
- 产线操作人员:负责扫码触发、查看任务状态、核对视频保存结果。
- 追溯/质量人员:负责历史查询与视频回放。
- IT 运维:负责安装部署、网络与设备连通性、配置项维护、日志排查与数据清理策略。
### 1.3 术语与口径
- NVR海康网络录像机通过海康 SDK 登录并下载录像)。
- 内袋二维码/条码:来自产线/外部系统的条码字符串;系统会解析出原料编号、批号、重量、保质期、产地、日产量等字段(解析规则见第 8 章)。
- 下载任务:系统将一次“回溯录像下载请求”持久化为 `DownloadTask`,并由后台队列顺序执行。
- 历史记录:数据库表 `OEMRawUse`,用于追溯条码对应的视频文件路径、名称与创建时间等。
- NAS本系统将视频保存路径配置为网络盘/共享盘(例如 `Y:`),用于长期留存。
## 2. 系统概述
FATrace.OEMApp 的核心流程为:
1. 接收条码PLC 扫码或 TCP 客户端发送);
2. 解析条码得到业务字段;
3. 生成下载任务 `DownloadTask` 并入队;
4. 后台 `DownloadTaskWorker` 按顺序执行:
- 根据配置的 NVR 账号登录状态,从 NVR 按时间范围下载录像
- 将视频保存到 `NVRVideoSavePath` 指定目录(支持盘符/网络盘)
- 下载成功后写入 `OEMRawUse`(视频文件路径、视频名、条码信息等)
- 可选:生成 CSV`RawUseCsvPath`
5. 历史页可查询 `OEMRawUse` 并双击播放视频。
## 3. 运行环境与依赖
### 3.1 操作系统
- Windows 10/11。
### 3.2 网络与外设
- SQL Server 数据库(用于存储任务与追溯索引)。
- 海康 NVRIP/端口/账号/密码在配置中)。
- 视频保存目录(本地磁盘或 NAS 网络盘,如 `Y:`)。
-可选PLC/基恩士:用于从寄存器读取扫码结果。
-可选TCP 客户端(如 PDA/中间件):向 OEMApp 内置 TCP Server 发送扫码文本。
### 3.3 关键组件(实现层面)
- 数据库FreeSql + SQL Server Provider自动同步表结构已启用
- 海康 SDKCHCNetSDK程序启动后输出 SDK 日志到 `C:\SdkLog\`)。
- 视频播放LibVLCSharpVideoView
- TCP ServerTouchSocket多客户端
- PLC 通信HslCommunicationKeyenceMcNet
- 日志NLog错误日志 + 操作日志)。
- CSVCsvHelper导出单条 CSV
-可选JellyfinRestSharp 客户端与监控服务(当前主流程标记为停用)。
## 4. 安装与部署IT 运维)
### 4.1 部署方式
- 使用发布后的程序目录(含 exe、dll、`App.config``NLog.config`、VideoLAN.LibVLC 等依赖)。
- 建议将程序目录放置在非系统盘且具备写权限的位置(日志目录在程序目录下生成)。
### 4.2 单实例限制
- 程序启动会检测单实例:若已运行会提示“程序已运行,不能再次打开!”。
### 4.3 授权提示
- 程序启动会进行授权校验失败时提示“授权失败当前程序只能使用8小时”。
### 4.4 首次启动检查清单
- 数据库连通性:确认 `App.config``connecting` 正确,且 SQL Server 可访问。
- NVR 可达:确认 `NVRIP` / `NVRPort` 可 ping 通,端口可达。
- 视频保存盘符:确认 `NVRVideoSavePath` 盘符存在且可写(如为网络盘需先映射)。
- SDK 日志目录:`C:\SdkLog\` 可创建且可写(建议提前创建目录并赋权)。
## 5. 配置说明App.config
文件位置:`FATrace.OEMApp/App.config`
### 5.1 数据库连接
- `connecting`SQL Server 主库连接字符串OEMApp 实际使用该键)。
- `connecting1` / `RemoteConnecting`:保留项,是否使用取决于现场版本。
### 5.2 PLC 配置
- `PLCIP`PLC IP
- `PLCPort`PLC 端口
- `PLCScan`:扫描周期(毫秒),默认 600
- `PDAScanCode`PLC 内保存扫码字符串的寄存器地址(例如 `D1000`
### 5.3 TCP Server外部扫码接入
- `TcpServerIp`OEMApp 内置 TCP Server 监听 IP
- `TcpServerPort`OEMApp 内置 TCP Server 监听端口
### 5.4 下载任务与回溯时长
- `VideoTime`:下载时长(秒),默认 30。系统会下载 `[NvrStartTime, NvrEndTime]` 时间窗。
- `DownloadTaskMaxRetry`:失败重试次数上限(程序重启后会将未超过次数的 Failed 重置为 Pending
- `DownloadTaskTimeoutSeconds`:单任务下载超时时间(秒)。若未配置,系统会按“时间窗*3”并限制到 `[120,1800]` 计算。
### 5.5 NVR 配置
- `NVRIP`NVR IP
- `NVRPort`NVR 端口(通常 8000
- `NVRUserName`NVR 登录用户名
- `NVRPw`NVR 登录密码
- `NVRVideoSavePath`:视频保存根路径(支持本地盘符或网络盘符,如 `Y:`
### 5.6 数据清理策略
- `VideoFileSaveDay`:视频文件保留天数(用于清理 DownloadTask 关联的视频文件)
- `DbSaveDay`:数据库记录保留天数(用于清理 DownloadTask/OEMRawUse/VideoAction 等旧记录)
- `DataCleanupEnabled`:是否启用定时清理(默认 true
- `DataCleanupTimeOfDay`:每日执行时间(默认 02:00:00
### 5.7 CSV 导出
- `RawUseCsvPath`CSV 保存目录(如 `D:\TestData`
### 5.8 Jellyfin可选/当前停用)
- `JellyfinBaseUrl` / `JellyfinApiKey` / `JellyfinParentId` / `JellyfinPollIntervalMs` / `JellyfinPollMaxWaitMs`
## 6. 日志与目录说明
### 6.1 NLog 日志
文件:`FATrace.OEMApp/NLog.config`
- 错误日志:`程序目录\Log\yyyy-MM-dd\ErrorMessage.txt`
- 操作日志:`程序目录\OperationLogs\yyyy-MM-dd\OperationLog.txt`
- 默认保留 60 天(`maxArchiveDays=60`
### 6.2 海康 SDK 日志
- 程序启动时启用 SDK 日志输出到:`C:\SdkLog\`
- 建议 IT 运维定期清理该目录,避免长期占用磁盘。
## 7. 界面结构与功能入口
### 7.1 左侧导航栏
- 主界面显示扫码信息、任务队列状态、日志列表、CSV 保存状态等。
- 历史记录:查询 `OEMRawUse` 并播放对应视频。
- 设置:预留页(当前可用于放置 NVR 登录、下载进度等相关操作)。
### 7.2 顶部/底部状态栏
- Plc连接状态来自 `PLCDataService`(若未启用 PLC此状态可能不准确或保持默认
- 服务连接状态:数据库连通性检测(`SELECT 1`)。
- NAS连接状态检测 `NVRVideoSavePath` 目录是否存在。
- NVR连接状态检测 NVR 登录态与在线状态。
## 8. 条码格式与解析规则(重要)
系统条码解析由 `FATrace.Com.NVRCom.ParseCodeFull(code)` 实现。
### 8.1 支持的分隔符
- 支持英文逗号 `,`
- 支持中文逗号 ``
- 支持分号 `;` / ``
- 支持空格分隔
### 8.2 推荐条码字段结构(按顺序)
1. RawCode原料编号
2. Batch批号通常为 8 位日期 `yyyyMMdd`;系统会提取前 8 位数字)
3. Weight重量3/4 位数字,最后 1 位为小数位,例如 `802 => 80.2`
4. ShelfLifeMonths保质期
5. RegionCode产地编码`01=国内``02=日本`,其他=未知)
6. Count日产量序号
### 8.3 视频文件命名规则
- 视频文件路径:`NVRVideoSavePath\{Code}.mp4`(会清洗非法文件名字符)
- 视频名称:`{Code}.mp4`
## 9. 日常操作 SOP产线/追溯人员)
### 9.1 开机前检查(每日/每班)
1. 启动 OEMApp。
2. 查看底部状态栏:
- 服务连接状态:应为“正常”
- NAS连接状态应为“正常”表示视频保存目录存在
- NVR连接状态应为“正常”表示 NVR 已登录且在线)
3. 若异常,按第 12 章排查。
### 9.2 NVR 登录
- 主界面启动时会自动调用登录NVRLogin也可使用“设置页/登录按钮”手动登录btnNVRLogin
- 登录成功会弹窗“登录成功”。
- 登录失败会弹窗“登录失败:{错误信息}”。
### 9.3 扫码触发(两种方式)
#### 方式 ATCP Server 接入(推荐用于外部设备/中间件)
1. OEMApp 启动后会读取配置 `TcpServerIp` / `TcpServerPort` 并启动 `TouchSocketServer`
2. 外部客户端连接后发送条码字符串UTF-8 文本)。
3. OEMApp 接收后会:
- 解析条码并填充界面(内袋二维码、原料编号等)
- 调用 `DownloadTaskWorker.Enqueue` 创建下载任务并入队
- 向客户端回复“OK”
#### 方式 BPLC 扫码(若现场启用 PLCDataService
1. `PLCDataService` 会按 `PLCScan` 周期从 `PDAScanCode` 地址读取字符串。
2. 读取到新值后触发 `ScanCodeEventHandler`
3. OEMApp 会解析条码并入队下载任务。
### 9.4 下载任务执行与监控
- 下载队列服务:`DownloadTaskWorker.Instance.Start(HkCameraClient)`
- 执行模型:单线程顺序下载(同一时刻只有一个任务 Running
- 主界面显示:
- `DownloadFileName`:显示当前下载文件名
- `DownloadProgressBarMain`:显示下载进度(来自海康 SDK 回调)
- `gridRULog`展示任务列表时间、类型、条码、任务Id、状态、进度、备注
### 9.5 暂停下载
- 点击“停止下载/暂停”btnStopLoadVideo 或 btnRawStopLoadVideo会调用 `Sdk_NET_DVR_StopGetFile`
- 注意:暂停会导致当前任务失败或中断,后续可依赖重试策略重新下载。
### 9.6 任务完成后的结果
下载成功后系统会:
- 在视频保存目录生成视频文件(例如 `Y:\{Code}.mp4`)。
- 在数据库表 `OEMRawUse` 写入一条记录:
- InBagCode、RawName、RawCode、User
- VideoStartTime、VideoEndTime
- VideoFilePath、VideoName
- 在主界面/日志中提示下载完成。
### 9.7 CSV 文件生成(可选)
- 系统在 `SaveCsvForTaskAsync` 中会为任务生成 `RawUseCsvDto`,并调用 `CsvService.ExportSingle` 导出 CSV。
- CSV 输出目录:`RawUseCsvPath`
- 文件名:`{InBagCode}.csv`(若条码含非法字符会被替换)
- 主界面“CSV文件生成状态”会提示成功/失败路径。
### 9.8 历史查询与视频播放
1. 点击左侧“历史记录”。
2. 输入查询条件:
- 关键字:支持 InBagCode/RawCode/RawName 模糊匹配
- 日期范围:按 CreateTime 过滤(起始日 00:00:00 到结束日次日 00:00:00
3. 点击查询btnHistoryVideoSearch
4. 双击表格行播放对应视频(从 `OEMRawUse.VideoFilePath` 读取)。
5. 点击“停止播放”btnStopHistoryPlay停止当前播放。
## 10. 数据表口径(追溯/IT
- `DownloadTask`:下载任务表(队列持久化)
- StatusPending/Running/Completed/Failed
- TryCount尝试次数
- VideoFilePath目标保存路径
- Error失败原因
- `OEMRawUse`:追溯索引表(历史记录页数据源)
- `VideoAction` / `JellyfinMonitorTask`:历史遗留/扩展表(定时清理会涉及)
## 11. 定时清理策略IT 运维)
`TimeClearDataService` 每日按配置时间执行:
- 先按 `VideoFileSaveDay` 删除 `DownloadTask` 关联的视频文件;
- 再按 `DbSaveDay` 删除 `DownloadTask` / `JellyfinMonitorTask` / `OEMRawUse` / `VideoAction` 等旧记录;
- 删除数据库记录前会再次尽力删除关联文件,避免“库删了文件还在”。
运维建议:
- 若视频文件非常大,建议将 `VideoFileSaveDay``DbSaveDay` 分开设置。
- 若需要永久留存视频,请将 `VideoFileSaveDay` 设置为较大值,并确保 NAS 容量与备份策略。
## 12. 常见问题与排查FAQ/故障处理)
### 12.1 底部“服务连接状态:异常”
- 原因SQL Server 不可达、连接字符串错误、账号权限不足。
- 处理:
1. 检查 `App.config``connecting`
2. 检查数据库服务是否启动、网络是否可达。
3. 查看错误日志 `ErrorMessage.txt`
### 12.2 “NVR连接状态异常”或登录失败
- 原因NVRIP/NVRPort 不通、账号密码错误、NVR 离线、海康 SDK 环境/依赖缺失。
- 处理:
1. Ping `NVRIP` 并确认端口可达8000
2. 核对 `NVRUserName` / `NVRPw`
3. 查看 `C:\SdkLog\` 与 NLog 错误日志。
### 12.3 “NAS连接状态异常”
- 原因:`NVRVideoSavePath` 不存在、网络盘未映射、权限不足。
- 处理:
1. 在资源管理器确认该盘符/目录存在并可创建文件。
2. 若为网络共享,确认映射在“运行 OEMApp 的同一账号”下可用。
3. 建议使用固定盘符映射并设置开机自动重连。
### 12.4 扫码后无任务入队/无反应
- TCP 方式:
1. 确认 `TcpServerIp` / `TcpServerPort` 配置正确。
2. 确认防火墙放行端口。
3. 查看操作日志是否有“客户端连接/接收数据”。
- PLC 方式:
1. 检查 `PLCIP` / `PLCPort` / `PDAScanCode`
2. 检查 PLC 是否正确写入字符串。
### 12.5 下载任务一直 Pending
- 可能原因:任务的 `NvrEndTime` 还未到(系统会等待 `NvrEndTime < Now+5 秒` 才取出执行)。
- 处理:等待数秒后观察;或检查系统时间是否正确。
### 12.6 下载失败/超时
- 原因网络抖动、NVR 负载高、录像文件不可用、保存路径不可写。
- 处理:
1. 检查视频保存路径是否可写。
2. 检查 NVR 登录与在线。
3. 适当增大 `DownloadTaskTimeoutSeconds`
4. 查看 `DownloadTask.Error``ErrorMessage.txt`
### 12.7 历史记录能查到但播放失败
- 原因:视频文件被清理、路径变更、盘符未映射。
- 处理:
1.`VideoFilePath` 检查文件是否存在。
2. 检查 NAS 映射与权限。
3. 如文件已被清理,需调整 `VideoFileSaveDay` 或备份策略。
## 13. 安全与合规建议
- 不建议在现场明文传播数据库 sa 密码;建议使用最小权限账号。
- 建议对 NAS 目录做访问控制,防止误删/篡改。
- 建议定期备份数据库与关键视频目录。
## 14. 版本记录
- V1.0OEMApp 初版 SOP安装/配置/扫码触发下载/历史播放/CSV/定时清理/故障排查)