结论:普通计算是“建任务 → 启动任务 → 逐塔同步调用 DLL 计算 → 解析回写 → 标记完成”的串行流水线。

其中 DLL 调用在计算线程内同步等待返回,按杆塔逐个执行。

普通计算逻辑

流程图

flowchart TD A[进入防雷计算页面] --> B[点击普通计算] B --> C[填写参数并勾选包含杆塔] C --> D{表单校验是否通过} D -- 否 --> C1[提示错误并停留在表单] D -- 是 --> E[构建TaskData mTypeCode=1] E --> F[创建TaskDetail与ExTask] F --> G[把任务回传主界面任务列表] G --> H[用户点击开始] H --> I[MyStart按类型分发到普通计算] I --> J[写TaskOption.txt配置] J --> K[逐ExTask逐杆塔拼接参数] K --> L{是否规程法且全相装避雷器} L -- 是 --> M[该塔结果记为 请换ATP方法] L -- 否 --> N[同步调用DLL AllCall_CS] N --> O[读取ResultTips并映射字段] M --> P[回写杆塔结果与分级参数] O --> P P --> Q{是否还有下一杆塔} Q -- 是 --> K Q -- 否 --> R[置Finished1与Complete为1] R --> S[结果可查看与导出]

图外步骤说明

步骤 处理内容 关键数据/状态
1. 进入与发起 在“防雷计算”中进入“普通计算”对话框。 入口窗体:FormFangLeiJiSuan → Form_PuTongJiSuan
2. 表单校验 校验线路、任务名、方法选择、包含杆塔。 不通过则仅提示,不建任务
3. 任务组装 创建任务主数据并生成 ExTask,复制被勾选杆塔。 mTypeCode_Task=1,Finished1=0
4. 任务回传 把任务加入主界面任务列表并显示“开始/结果”按钮。 Add1TaskData + Add1TaskControl
5. 启动执行 点击开始后,后台线程调用 MyStart 并分发到普通计算。 MyStart_Finished1_PuTongJiSuan
6. 计算配置落盘 把方法索引、波形、闪络判据等写入 TaskOption.txt。 供 DLL 计算读取
7. 逐塔计算 逐杆塔拼参数;特殊分支下直接返回“请换ATP方法”,否则调用 DLL。 DLL: Invoke_CircuitLightningProtection_Base.dll
8. 结果解析回写 读取 ResultTips 映射字段,回写耐雷水平、跳闸率、风险等级等。 成功则普通计算结果=OK
9. 完成收口 全部杆塔处理后标记任务完成。 Finished1_PuTongJiSuan=1,Complete=1
10. 结果消费 可在结果窗口查看明细并导出 CSV/TXT。 展示/导出来自 TGanTaData 回写字段

注意:DLL 调用为同步阻塞式,但运行在后台计算线程,不直接阻塞主界面 UI 线程。