OpenDNP3 master-gprs-tls-demo、outstation-tls-demo运行求助
异常场景下的程序正常运行操作指南
当前遇到的两类异常(主站运行master-gprs-tls-demo输出usage提示、子站运行outstation-tls-demo也打印master程序的usage提示),本质集中在程序错配、入参缺失、编译目标错位三类原因,按以下固定步骤操作即可恢复运行。
第一步:校验可执行文件的匹配关系
- 在对应运行终端执行
ls -l $(which master-gprs-tls-demo) $(which outstation-tls-demo),查看两个文件的大小、最后修改时间 - 单独不带参数执行
outstation-tls-demo,对比输出的usage内容:如果输出和master程序的提示完全一致,说明当前系统登记的outstation-tls-demo是错放的master程序,需要删除该路径下的错配文件,替换为正确编译的子站程序
第二步:对齐程序运行的必填入参
程序主动打印usage提示的核心触发条件是入参校验不通过,需严格按照帮助信息传入必填参数:
- 主站侧运行
master-gprs-tls-demo:先不带参数执行拿到完整帮助列表,按要求传入TLS证书路径、私钥路径、CA根证书路径、监听端口、GPRS透传模块对应的串口设备路径,典型命令格式参考:./master-gprs-tls-demo --cert ./certs/master.crt --key ./certs/master.key --ca ./certs/ca.crt --listen-port 20000 --gprs-serial /dev/ttyUSB0 - 子站侧运行
outstation-tls-demo:先不带参数执行拿到对应程序的专属帮助列表,按要求传入子站自身的证书、私钥、CA根证书、主站连接地址/端口、自身遥测点配置,典型命令格式参考:./outstation-tls-demo --cert ./certs/outstation.crt --key ./certs/outstation.key --ca ./certs/ca.crt --master-addr 主站IP --port 20000
如果运行outstation程序时无法拿到专属的子站帮助提示,直接跳过当前步骤进入编译排查环节
第三步:修复编译环节的目标错配
- 打开项目根目录的构建配置文件(Makefile/CMakeLists.txt),检查两个demo的编译源文件绑定逻辑:
- 确认
master-gprs-tls-demo的编译入口是主站逻辑的main函数 - 确认
outstation-tls-demo的编译入口是子站逻辑的main函数,没有误链接主站的源文件
- 确认
- 执行全量清理重编译操作:
make clean && rm -rf build && mkdir build && cd build && cmake .. && make -j4 - 编译完成后在build目录下逐个验证两个程序的usage输出,确认两个程序的帮助信息分别对应各自的逻辑,没有错配
第四步:排除运行时环境干扰
- 给编译生成的可执行文件添加执行权限:
chmod +x master-gprs-tls-demo outstation-tls-demo - 检查启动脚本、systemd服务文件中的执行路径,确认没有将outstation程序的启动命令指向master程序的路径
- 确认运行目录下的TLS证书、私钥文件权限正常,避免因为程序读取证书失败直接触发入参校验、提前打印usage提示
内容的提问来源于stack exchange,提问作者Soliman
相关产品推荐
相关产品推荐

