简介:《工程水文分析计算集成应用软件[v2.28]使用说明书》是贵州省水利水电勘测设计研究院于2011年发布的官方技术手册,面向水利水电勘测设计人员、水文分析计算相关从业者及院校师生,用于系统掌握PHAC v2.28软件的操作流程与工程应用方法。资源压缩包整体4.43MB,内含1个PDF文件,轻量便于查阅;已有791人学习浏览,是实际水利工程与教学场景中常见的参考资料。手册结构完整,按模块讲解了频率曲线分析、河道加权平均比降、水库库容曲线、径流及降水系列统计、暴雨洪水、洪水过程线放大、水位流量关系、水库泥沙淤积、河道水面线推算、农作物灌溉定额等15项计算功能,包括从原始资料整理、频率分析到设计洪水、水库调节和灌溉计算的全流程,同时涵盖软硬件环境、安装启动、数据库通用操作及各计算单元参数设置。读者可按章节指引完成相应计算流程,快速上手软件,适用于中小型水利水电工程设计计算及相关课程实训。
1. 一个 2011 年的水文计算软件,为什么今天还值得拆
翻开这份 60 多页的《工程水文分析计算集成应用软件 PHAC v2.28 使用说明书》,很容易被它熟悉的 Windows 对话框截图和 Delphi 风格的界面带回到十几年前。但如果因此把它当作过时文档跳过,就错过了国内工程水文软件发展史里相当有代表性的一页。这个由贵州省水利水电勘测设计研究院开发的集成系统,把频率曲线适线、库容计算、调洪演算、水面线推算等 15 类高频计算任务统一到了一个 MDI 界面里,用数据库管理工程数据,用 AutoCAD 脚本输出图纸——这套「计算 + 数据库 + 制图」三位一体的设计思路,即使在今天做水文专业工具链的二次开发,也仍然值得借鉴。对刚接触水文分析计算的人来说,这份说明书是一个把 P-Ⅲ型分布、同频率放大、棱台库容公式落到实操的完整样例;对做了多年水利信息化的人来说,它则提供了一个研究老系统数据接口、计算参数取舍和 CAD 协作方式的绝佳样本。
2. 系统的骨架:工程管理、数据库控件与数据文件接口
2.1 以「工程」为核心的数据库组织方式
PHAC 最值得注意的设计,是所有输入资料和主要成果都以「工程」为粒度存入数据库。每次启动程序后必须执行一次「打开工程数据库」或「新建工程」操作,之后无论切换多少次计算单元,都维持在同一工程上下文里。这意味着频率曲线的统计参数、水库库容曲线、水位流量关系(Z~Q 线)等计算成果可以被其他单元自动引用,不需要二次录入。
以洪水调节计算为例,它需要同时引用库容曲线和泄流曲线,在大多数通用表格工具里,这需要手动跨表查找,而在 PHAC 中,只要这些数据在同名工程下已经算过,调洪单元就直接从数据库读取。用现代软件工程的话说,这是一种很朴素的「共享数据层」设计——没有服务端,没有网络同步,靠本地数据库文件加约定好的表结构完成模块间通信。对于单机版专业计算软件来说,这个方案的可靠性远高于一堆散落的 Excel 工作簿。
2.2 TDBNavigator 与 TDNGrid:Delphi 时代的数据库交互范本
说明书里专门用了一节描述数据库通用操作,核心是 TDBNavigator 功能按钮部件和 TDNGrid 网格部件。前者提供 10 个按钮:First、Prior、Next、Last、Insert、Delete、Edit、Post、Cancel、Refresh。这套交互逻辑在今天看来有些古老,但它解决了一个至今仍困扰数据录入场景的问题:什么时候数据真正写入了存储层。
在 PHAC 的网格里,新录入或修改一条数据后,如果立即关闭窗口而没移动记录指针,最后修改的那条记录不会保存。这是因为数据处于 Edit 状态但未触发 Post。使用这类系统时有两条经验:
- 批量录入后再逐条移动指针,让每条记录都完成 Post;
- 关闭窗口前养成点击 Refresh 的习惯,确保界面显示与数据库一致。
表格:PHAC 数据库操作与常见场景对照
| 操作 | 按钮 | 适用场景 | 注意事项 |
|---|---|---|---|
| 新增记录 | Insert | 在系列资料表中追加年份 | 新记录位置在当前行之后 |
| 删除记录 | Delete | 删除误输的年份数据 | 删除不可恢复,先确认 |
| 修改数据 | Edit | 修正某年系列值 | 修改后需移动指针触发 Post |
| 保存 | Post | 录入或编辑完成后 | 关闭窗口前务必保证已 Post |
| 刷新 | Refresh | 数据异常或重新载入 | 会放弃未 Post 的修改 |
| 定位首尾 | First / Last | 长系列数据快速跳转 | 配合 Next / Prior 逐条检查 |
这里有一个容易踩的坑:当要求输入数值类型(Int 或 Float)字段时,不能处于中文输入法状态,否则输入的数字不会进入编辑缓冲区,最终表现为「数据写不进去」。这类问题不影响算法本身,却在实际使用中最消耗时间。
2.3 「从文件读入」接口:与外部工具链打通的唯一通道
PHAC v2.28 为两类数据文件提供了外部导入能力:径流及降水系列统计分析支持从SwxLsr.txt读入历年逐月逐旬资料;河道比降计算和水库库容曲线计算分别支持从BiJiangSR.txt、KuRongQXsr.txt读入。文件需要放在Wssjs.exe所在目录下。
SwxLsr.txt的格式是:
起始年、年数、起始月、月旬数、起始旬、旬数,历年逐月(旬)系列资料一次典型的水文系列导入文件可能是这样的:
1961,50,1,12,1,36, 45.2,38.7,52.1,88.9,132.4,168.2,174.5,156.8,110.3,76.5,58.9,41.2, ...逻辑说明:首段定义系列的时间骨架,起始年为 1961,共 50 年;起始月为 1,每年 12 个月,若按旬统计则每月 3 旬、一年 36 旬。首段之后按日历年顺序排列逐年逐月(或逐旬)数据,软件据此重建完整的系列表。
参数要点:旬数据的字段顺序必须严格对应时间骨架,中间不能缺段;如果某些月份只有月值而没有旬值,按说明书约定以「上旬」代表月值,即把月值写入当月第一个旬字段。这种折中方案会损失月内分配信息,但对以年控制、枯水段分析为主的计算,精度上是可以接受的。
3. P-Ⅲ型频率曲线适线:从矩法初值到 0.618 优选
3.1 三种经验频率计算方法的边界条件
P-Ⅲ型频率曲线分析是 PHAC 的核心单元,也是径流统计、暴雨洪水、代表年选择等模块共用的一套适线引擎。适线的前提是先计算经验频率,说明书给出了三种方法:
- 分别处理法:实测系列按
Pm = m/(n+1),特大值按P = a/(N+1)计算,是缺省方法; - 统一处理法:特大值仍按
P = a/(N+1),实测系列按Pm = Pmo + (1-Pmo)*(m-l)/(n-l+1)计算; - 直接输入法:特大值频率直接给定,实测系列沿用统一处理法的公式。
三种方法的差异核心在于如何对待特大洪水。分别处理法把特大值和实测系列当成两个独立样本,各自计算经验频率,容易在高尾部出现频率重叠或跳跃;统一处理法先确定末位特大值的频率 Pmo,再在其后的区间内均匀分布实测点据,保证了频率轴的连贯性。
实际业务中,当有历史调查洪水时,优先使用统一处理法。直接输入法适用于文献资料直接给出了重现期、但没有原始排位的场景,比如「某站 1870 年洪水重现期约为 500 年」这类信息。
3.2 统计参数的计算链路:矩法、0.618 与人工适线
软件用矩法计算均值 Xo 和 Cv 初值,然后用 0.618 法(黄金分割搜索)在参数空间里优选 Cv,最后允许用户通过适线窗口手工调整。整条链路可以概括为:
- 矩法求初值:
Xo = mean(X),Cv = std(X)/mean(X); - 0.618 法在一维区间内搜索使经验点据与理论曲线拟合最优的 Cv;
- 保持 Xo、Cv 不变,调整 Cs/Cv(不能为 0),最多同时绘制 6 条理论频率曲线;
- 1# 线是矩法结果,2# 线是 0.618 优选结果,3~6# 线是用户手调结果;
- 退出适线窗口时,当前显示的曲线编号就是最终采用方案。
0.618 法的迭代逻辑用 Python 可以这样演示:
def golden_section_search(f, a, b, tol=1e-6): phi = (5 ** 0.5 - 1) / 2 # 黄金分割比 0.618034 c = b - phi * (b - a) d = a + phi * (b - a) while abs(b - a) > tol: if f(c) <= f(d): b, d = d, c c = b - phi * (b - a) else: a, c = c, d d = a + phi * (b - a) return (a + b) / 2逻辑说明:函数 f 是给定 Cv 时理论频率曲线与经验点据的离差平方和,a、b 是 Cv 的搜索区间。黄金分割搜索每次迭代抛弃区间内较差的一侧,用 0.618 的比例不断压缩搜索范围,相比均匀扫描效率更高,且不要求目标函数可导。
参数要点:搜索区间一般取[0, 1.5],对 Cv 较大的南方暴雨系列可取到[0, 2.0];Cs/Cv 在 PHAC 中不允许为 0,实际工程中常用Cs = 2.5Cv ~ 3.5Cv作为初估范围,尤其在暴雨频率计算中。
每条理论线都可以执行「拷贝上一条线参数」操作,方便在此基础上小幅调整 Cs/Cv 后对比拟合效果。查值功能按采用的曲线参数,以用户输入的频率查算 Kp 和 Xp——这对应水文计算书中常用的模比系数 Kp 表,可快速输出设计频率对应的设计值。
3.3 基本参数表与系列资料表的录入逻辑
基本参数表共 11 个参数,关键字段包括:
- 计算系列单位:
m^3/s表示流量,mm表示降水量或径流深,m表示水位,万(亿)m^3表示径流量; - 实测系列项数:必须与年系列资料输入表的行数一致,否则计算无法进行;
- 统计参数 Cs/Cv:不能为 0,否则采用参数无效。
年系列资料输入表中,序号自动生成,年份可自动递增,只有系列值必须手工录入。这里有一个值得注意的兼容性设计:当直接输入特大值频率时,最多支持 12 个特大值,对应的频率字段也在基本参数表里。这意味着 PHAC 在设计时已经覆盖了国内水文站网常见的「实测 + 历史调查」数据组合,而不是只按连续系列处理。
一个容易出错的细节:如果采用直接输入法但长度超过 12 个特大值,软件可能无法正确读入全部数据。实际项目遇到这种情况时,通常的做法是合并相邻历史洪水为同一场次,或者在成果报告中注明「仅采用前 12 位特大值」——虽然不完美,但在工程精度范围内可接受。
4. 六个高频单元的公式、参数与操作要点
4.1 河道加权平均比降计算
这一单元根据河道纵断面资料(通常从 1:5 万或 1:1 万地形图量取)计算各断面间的河长及加权平均比降。计算公式为:
J = {(Z0+Z1)l1 + (Z1+Z2)l2 + ... + (Zn-1+Zn)ln - 2*Z0*L} / L²其中 Z 为各量取断面高程,单位为 m;l 为间距,单位为 km;L 为总河长。输入界面只有「高程 Z」和「间距 ΔL」两个字段,高程从小到大输入,第一个高程 Z0 对应的间距为 0。河长和比降字段随输入实时计算并写入对应行。
v2.28 新增了「从文件读入」功能,对应文件BiJiangSR.txt。改进点是:当后续高程未输入时,以前一个 ΔZ 为标准自动推算并写出本条的高程。这个改进对断面较密、量取工作量大的项目非常实用,减少了重复键入。
4.2 水库库容曲线计算与棱台公式
库容计算采用相邻断面面积平均的棱台公式:
ΔVi = [A1 + sqrt(A1*A2) + A2] * ΔZ / 3 Vm = sum(ΔVi) (i=1~m)这里的 A 是面积(万 m²),ΔZ 是高程差(m)。当面积变化较剧烈时,用棱台公式比梯形公式精度更好,因为它在 A1 和 A2 之间假定了线性变化,考虑了面积沿高程的非线性过渡。
操作上有两个很有用的细节:
- 「面积、库容取整」按钮:计算结果不收整时可一键取整,使成果表更规范;
- 「面积反算」功能:若表中已有面积则不做计算,只有库容值从零起算时反算结果才精确,否则仅供参考。
输出方面,PHAC 提供两代 CAD 对接方案。旧方案直接自动化启动 AutoCAD R14 绘图,新方案在 v2.28 中改为生成Drawing1.scr脚本文件,用户自行在 AutoCAD 命令行输入script调用。脚本方式绕过了 COM 自动化接口的兼容性问题,对 AutoCAD 2000 以上版本也能正常工作。这里有个实际建议:用脚本方式输出后,进入 AutoCAD 用SCRIPTPATH检查脚本搜索路径,避免因为找不到文件而静默失败。
4.3 径流及降水系列统计分析
这个单元的体量最大,它不只是算均值,而是完整覆盖了以下工作流:
- 按总表参数统计历年逐月、丰水段、枯水段、最小月共四个年系列值;
- 对年值及分时段系列做 P-Ⅲ型适线;
- 基于适线成果做代表年选择;
- 降水径流频率法转换;
- 径流深、径流量、流量、百分率之间的单位换算;
- 累计和滑动平均线分析。
单位换算提供了快捷通道,例如已知径流深(mm)、流域面积(km²)和时段长,可换算为平均流量(m³/s)。这类换算在水文分析中极其频繁,做成内置功能可以显著减少手工计算错误。
代表年选择提供两种方法。同频率法按「长包短」原则:先按最小月放大,再按枯水段放大,最后按年值放大。如果最小月放大系数大于枯水段系数,则采用枯水段系数。同倍比法则统一采用年值放大系数,不区分时段。两者的适用场景不同:同频率法用于灌溉和供水设计,需要同时保证年、枯水期、最枯月三个时段的设计保证率;同倍比法用于洪水或径流总量控制为主的分析。
降水径流系列转换的计算假定是Yi = (Pi/Pp) * Yp,即按月降水比例分摊年径流深。输入参数包括流域面积(若为 0 则转换为径流深)和丰、枯水期基流径流深半年值。软件将基流值分配到各月、旬后再叠加降雨产流部分,得到径流年内分配。说明书明确提醒:这种方法假定年径流与年降水完全对应,成果仅供无资料地区参考。
4.4 洪水调节计算与多单元联动
洪水调节单元是 PHAC 单元间数据引用的典型代表。调洪演算需要库容曲线(来自库容曲线单元)和泄流曲线(来自水位流量关系单元),在 PHAC 中这两者由数据库自动引用,不需要在调洪界面重新输入。
泄流设施涵盖堰流、闸孔出流、发电出流、淹没出流等,并支持控制下泄操作方式。对于中小型水库的调洪演算,这是非常贴合实际的设置——很多水库在汛期不是自由泄流,而是按指令控制闸门开度或下泄流量。
调洪成果自动生成 AutoCAD 图,同样支持新版本的.scr脚本输出方式。
4.5 成果输出的图形格式取舍
PHAC 的图形成果支持.bmp、.wmf、.dwg(或.scr)三种格式。从工程应用角度:
.bmp用于屏幕显示和文档插图,体积较大但兼容性最好;.wmf是矢量图元格式,可被 AutoCAD 等图形编辑器调入修改,适合报告插图;.scr是纯文本的 AutoCAD 脚本,可生成精确的工程图。
表格:PHAC 成果输出格式对比
| 格式 | 输出方式 | 可编辑性 | 典型用途 |
|---|---|---|---|
| .bmp | 图形存盘 | 低 | 文档插图、快速查看 |
| .wmf | 图形存盘 | 中(可调入 CAD) | 报告附图 |
| .dwg / .scr | 自动绘图 / 脚本 | 高 | 施工图、设计图 |
注意一个已知问题:直接用 PHAC 自动启动 AutoCAD R14 绘图时,要等待图形绘制完成后才能单击 AutoCAD 窗口区域,否则可能出现「远程调用失败」。如果使用.scr脚本方式则没有这个限制,这也是 v2.28 将其作为更新方向的原因。
5. 在 Windows 新平台复现 PHAC 工作流的几个经验
5.1 老软件在新系统上的安装与启动
PHAC v2.28 的开发环境是 Windows XP,说明书列出的最低配置是 80586 处理器和 8MB 内存。在 64 位 Windows 10/11 上运行的关键是把安装目录下的可执行文件Wssjs.exe设置为「Windows XP (Service Pack 3)」兼容模式,并以管理员身份运行。安装序列号为A1364C8337,缺省安装目录是c:\WinSsjs,尽量保持缺省路径,因为部分数据文件依赖程序所在目录定位。
如果安装类程序的反应是「缺少 DLL」,优先检查是否安装了 32 位 VC++ 运行库,而不是直接下载 DLL 文件覆盖到系统目录——后者容易引入版本冲突。
5.2 从说明书反推计算流程,验证成果数值
手册的价值不止于操作指引,它同时给出了可复核的计算公式。我通常用 Python 或 Excel 按说明书公式独立算一遍,再和 PHAC 输出对照。以库容曲线为例:
import math def reservoir_capacity(elevations, areas): # elevations: 高程列表, areas: 对应面积列表(万m2) capacity = [0.0] for i in range(1, len(elevations)): dz = elevations[i] - elevations[i-1] a1 = areas[i-1] a2 = areas[i] dv = (a1 + math.sqrt(a1 * a2) + a2) * dz / 3.0 capacity.append(capacity[-1] + dv) return capacity z = [100.0, 105.0, 110.0, 115.0] a = [0.0, 12.5, 28.3, 46.7] print(reservoir_capacity(z, a))逻辑说明:逐段按棱台公式计算相邻高程间的容积增量,累加得到各高程以下累计库容。第一段面积通常为 0(库底),保证起始库容为 0。
参数要点:面积单位是万 m²,高程差单位是 m,得到的库容单位是万 m³。如果输入数据里面积单位是 m²,记得先除以 10000 再参与计算,否则结果会差 4 个数量级。
5.3 多频率曲线叠加绘制与适线参数确认
v2.18 以后新增的多频率曲线叠加绘制功能,可以在同一张图上对比同一工程下不同分期洪水或不同时段暴雨的经验频率曲线。这个功能对成果合理性检查很有帮助——比如对比 24h 暴雨和 6h 暴雨的频率曲线,如果两者在高尾部出现交叉,通常提示资料系列较短或有个别特大值处理不一致,需要回到原始数据重新检查。
最后提醒一个 PHAC 特有的参数陷阱:在「径流及降水系列统计分析」和「贵州省暴雨洪水计算」中调用频率曲线适线窗口时,统计参数存放在数据库的临时区域,每次进入适线窗口时显示的参数可能不是最终采用值。正确的操作顺序是:先选择好需要的时段系列,再做适线,退出前确认当前曲线编号对应的参数正是你最终想要的那一组。否则,成果表可能引用的是上一次操作遗留的参数——这种错误在正式报告中极难被发现,但复核时一对比原始适线图就能看出来。
本文还有配套的精品资源,点击获取