功能分析报告:Chromatography-workstation(IBrainChrom)

本报告基于仓库代码静态分析与可编译验证结果整理,目的是帮助后续二次开发时快速定位“功能入口 → 调用链 → 数据落点”。

1. 系统定位与总体能力

该程序为 Windows 桌面 WinForms 工作站,面向色谱仪/相关外设的:

  • 设备接入与监控(多台设备、多通道)
  • 数据采集(串口或 TCP 接入,含 Modbus 相关)
  • 谱图显示、积分与结果计算
  • 校准(通用校准/专项校准)、方法管理
  • 报表预览/打印/导出(DevExpress 报表 + NPOI Excel)
  • 历史数据查询(Access/SQLite 双后端)
  • GMP/权限/审计追踪(加密狗特性开关 + 登录 + 操作日志/审计文件)

工程信息:

2. 运行入口与全局初始化

唯一入口为 Program.Main

此外,程序依赖一个本地 DLL(名为 System.Linq.dll,并非 .NET 自带 System.Linq)用于公式/拟合等计算:见 Program.cs:L24-L44

3. UI 结构与功能入口(按功能域)

3.1 主窗体(实际入口)

主窗体为 FormMain。该窗体采用“单窗体 + 多个嵌入式 UserControl”方式聚合核心功能:

主窗体菜单入口集中在 FormMain.cs:L2793-L2904,典型入口包括:

3.2 多窗口工作站框架(并存但非默认入口)

仓库还存在典型“工作站多窗口”体系:

在二次开发时需要注意:有些功能既有 FormMain 体系,也有 LclGnlForm 体系(例如采集、谱图、校准、设备监视),要明确你修改的是哪条 UI 线。

3.3 功能域清单(可见功能)

以下为用户可感知功能域与主要实现文件(非穷举,但覆盖核心能力):

4. 核心数据结构(后续修改最常用的“对象图”)

程序的核心对象链路可概括为:

ChromDeviceListMgrChromDeviceMisMgrChannelChartPara / ChartParaOperaMtdSetup / Integration / componentList / timeProgramSignal / Chromatogram

4.1 设备列表与当前设备

  • 设备列表管理器:ChromDeviceListMgr

    • 当前设备 ID:CurrentGCID
    • 当前通道:CurrentChannelIdx
    • 当前设备对象:CurrentChromDevice
    • 当前通讯会话:CurrentTcpServerSocket(从 AsyncTcpServerMgr 取)
    • 启停通讯:NewTcpServerMgr(...) / StopTcpServerMgr()ChromDeviceListMgr.cs:L364-L394
  • 设备实体:ChromDevice

    • info:设备标识/名称等
    • misMgr:该设备的“仪器设置/通道设置/方法设置”集合
  • 仪器设置聚合:MisMgr

    • devManager:外设管理器(阀、控温、EPC 等)
    • ChannelChartParaS:通道显示/采集行为参数
    • ChartParaOperaS:通道方法/积分/时间程序/组分表等参数

4.2 通道显示/采集行为参数

通道级“采集/显示行为”在 ChannelChartPara 中:

  • 量程与显示:showLowLimit/showHighLimitfullScreenTime/stopTime
  • 自动动作:analysisWhenStop(停止时自动分析)、printWhenStop(停止时自动打印)
  • 信号处理:bClearZero(清零)、bBaselineDeduction(基线扣除)
  • 计算基准:cnlDetectMethodcnlBasisQuantity(峰高/峰面积等)

4.3 通道方法/积分/时间程序/组分表

通道级“方法参数集合”在 ChartParaOpera 中:

  • mtdMgr:方法管理器 MtdSetup
  • Integ:积分参数 Integration
  • componentList:组分列表(用于结果显示/报告等)
  • tProgram/evenPara:时间程序与事件参数
  • 文件命名规则:FileNameAquipName/FileNameChannelName/FileNameDateTime/FileUserSet/...
  • 零点时间:UseUserZeroTime/ZeroTime/ZeroTimeLeft/ZeroTimeRight

ChartParaOpera.LoadMtdFile/LoadCalFile(见 ChartParaOpera.cs:L75-L101)会将方法/校准加载后回写到主 UI 的 MstSet 面板。

5. 关键业务流程(从 UI 到数据落地)

5.1 设备接入、服务器与会话

通信侧以 AsyncTcpServerMgr 为中心,创建 3 个监听服务(主站 + 2 个 Modbus 端口),见 ChromDeviceListMgr.NewTcpServerMgr

  • 主站端口:25001
  • Modbus 端口:502503

当设备连入后,为每个连接创建一个 TcpServerSocket 会话对象:TcpServerSocket

5.2 数据帧接收与解析(TCP/串口桥接)

TcpServerSocket 支持串口桥接(当 IsComClient 为真时,会打开串口并将串口收到的数据走同一解析逻辑):

接收解包核心为 TcpServerSocket.OneDataReceive

  • 帧头:ASCII "GCKC"(字节 71,67,75,67),由 CheckDataBuffStartFlag 扫描定位:TcpServerSocket.cs:L451-L465
  • 帧长:byte[4]*256 + byte[5] + 7
  • 校验:IBrainConvert.BitByBitNo(...) 计算校验字节,比较末尾校验位:TcpServerSocket.cs:L510-L523
  • 通过后进入 AnalyseReceivedData(...) 分支处理(含设备 ID/握手、状态更新、点数据、命令响应等):TcpServerSocket.cs:L547-L578

二次开发时,若要改协议、改字段映射到 UI、增加新命令/新状态,优先从 AnalyseReceivedData 以及其调用的各类 Analyse... 方法切入。

5.3 采集停止后的自动动作(保存/清理/UI 状态)

采集完成后会触发谱图保存与信号清理,见 TcpServerSocket.cs:L400-L418

  • 满足条件时调用 Save(...) 写入谱图文件
  • Signal.ResetOriDots(...)Signal.ClearPeak() 清理内存数据
  • 回到 UI 线程更新工具条启停状态(Start enabled、Stop disabled)

5.4 谱图文件、导入与处理

谱图文件核心结构与读写集中在 Chromatogram

支持的文件类型(代码内判断):

  • .sda:工作站自有谱图文件
  • .cdf:AIA/NetCDF
  • .dat:N2000 相关

谱图处理 UI 入口为 ChromForm / ChromFormCtrl。积分/峰表/报告输出等会在这里汇聚。

5.5 校准与拟合

校准模型为 CaliGnl,并提供 .cal 文件读写(见 CaliGnl.cs:L580-L592)。

拟合/系数计算在 CmpdFunc.Calcu_coefs 中,会调用 Program.linearFit/linearFitPass(本地 DLL)得到曲线参数与相关系数。

5.6 报表与导出

6. 配置、数据落点与文件格式

6.1 全局配置文件(exe.xml)

全局配置由 ParamBase 以 DataSet 写入 XML:

系统参数封装在 SystemParam;常用字段包括:

  • 数据库类型:iDbConnectType(Access/SQLite 分流)
  • 数据目录:strMtdDataFileDir/strSdaDataFileDir/strCalDataFileDir
  • COM/Modbus:iComNumber/bComEnable/iComModbusTypeiDcsComNumber
  • 报表选项与文件命名选项
  • 语言:Language(影响 Class49.sysLanguage_0

注意:SystemParam 中存在 strPasswordAdmin/strPasswordGuest/... 字段(见 SystemParam.cs:L135-L143),属于明文配置风险点;修改认证策略时建议先梳理其使用点。

6.2 设备与通道配置(saq.cfg / default.cfg)

ChromDeviceListMgr 启动时会加载:

  • 工作配置:Application.StartupPath + "\\saq.cfg"
  • 默认配置:Application.StartupPath + "\\default.cfg"

加载失败则回退默认配置(见 ChromDeviceListMgr.cs:L417-L433),保存时写回 saq.cfgSaveWorkSunFile())。

6.3 历史/业务数据库(Access + SQLite)

数据库访问底层为 DBBase,并由 Class49 提供大量“门面”方法(按 iDbConnectType 分流)。

7. 授权、权限与审计

7.1 加密狗授权(SuperDog)

授权入口为 DogFeturlMgr

  • 使用 SuperDog API 查询 feature license 类型(perpetual/trial/expiration)
  • 提供 LicencedGMP/LicencedDetector/... 等能力开关

7.2 登录与权限管理

7.3 审计追踪

审计文件解析/追加写入集中在 StationAdtTrlForm

8. 二次开发修改指引(按“你可能要改什么”)

8.1 改采集协议/增加新状态字段

  • 首选入口:TcpServerSocket.OneDataReceive(帧头/长度/校验)
  • 解析分支:AnalyseReceivedData(...) 及其内部处理函数
  • UI 显示联动:大量更新会直接写到 ChromDeviceCtrl.selfCtrlInsDeviceCtrl.self 等静态引用(例如在 TcpServerSocket 内更新文本框/状态灯),需要统一梳理这些“静态 UI 绑定点”。

8.2 改“停止自动分析/自动打印/文件命名规则”

8.3 改结果计算/校准曲线/拟合算法

  • 组分/响应与拟合:从 CmpdFuncCaliGnl 切入
  • 若要替换拟合算法:注意 Program.linearFit/linearFitPass 来自本地 DLL,替换需要同步处理该依赖与调用点

8.4 改报表模板或输出字段

8.5 改历史查询/数据库结构

  • DB 分流逻辑:SystemParam.iDbConnectType + Class49 门面方法
  • 具体 SQL:多在 DBBase.*SqlLite/*Access 方法内

9. 已知风险点与建议

  • 运行时依赖较重:DevExpress、DotNetBar、NPOI、SQLite、SuperDog 等;建议建立“依赖清单+版本锁定+发布脚本”。
  • 版本一致性风险:bin\Debug\net48 中存在 DevExpress.*.v18.1 系列程序集,而工程引用为 DevExpress v22.2(见 csproj)。若发生运行期加载冲突,需要统一版本或配置 bindingRedirect。
  • UI 静态单例耦合:大量 *.self / *.selfCtrl 静态引用穿透调用,修改功能时建议先画出“调用者→被调用 UI 控件”的依赖图,避免隐式副作用。
  • 配置与密码:系统参数中存在密码字段,配置文件为明文 XML,涉及合规时需评估加密/哈希与权限边界。

如你告诉我“你计划优先改的功能模块”(例如:采集协议、报表字段、设备参数、自动校准流程、数据库表结构),我可以在此报告基础上再补一份更聚焦的“调用链追踪版”(到具体按钮事件/方法名级别),并标出改动点与回归验证清单。