十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

aiDgeController 软PLC虚拟机stvm集成测试报告

aiDgeController 软PLC虚拟机stvm集成测试报告 aiDgeController 软PLC虚拟机stvm集成测试报告测试环境:WSL Debian 13 GCC 14, X64_DBG ASAN (-fsanitizeaddress)netGate 1.1.1.3618, bin/debug 运行目录测试程序: test/plc/test_plc.c, plc_test_main.iec, plc_test_names.iecPLC 程序: ./plc/plc.iec, 10ms 周期, 4 个映射变量aidgeplc-debug-server (OpenPLC v4 协议兼容, ws://0.0.0.0:8443/api/debug)单元测试(43 通过 / 0 失败):变量映射与数据同步: SyncIn/RunOnce/SyncOut 全流程, REAL/INT 往返, 控制逻辑 (YL SD*2 40), 下限保护 (WD 30), 未写变量保持名称切分: c_d_e → 站点c.变量d_e, a_b 往返CPU 亲和力: 负数核心号拒绝, 绑定成功, 幂等性网关变量缺失: 空容器不崩溃PLC 实例: 创建防护 (程序不存在), ID/周期/状态, 销毁集成冒烟测试(25 秒运行 完整退出):配置加载 → 插件管理器 → 项目 (数据缓冲/触发器/站点/北向/转发器) → PLC 管理器 → 事件循环插件加载: serial S0, modbusRTU modbus0, localNorth localCacheN1STVM PLC 引擎就绪 (映射 4 变量), 10ms 周期运行约 2400 周期无数据竞争调试服务器独立进程 posix_spawn 拉起 PID 正常转发器 T1: site0 → localCacheN1 周期转发正常退出流程完整, ASAN 零报错WebSocket 验证(PASS):握手 10145 DE AD 00 00 → 7E MD541 DE AD 00 00 → 7E 06 00 C6 (入口 IP0, 代码 198B)测试中发现并修复的缺陷(7 项):dataSetValueEx 所有权语义矛盾 (悬空指针) — 统一为所有权接管project.c init_prj_data_cache__ 成功后误释放 value (heap-use-after-free)plcMission SIGEV_THREAD 重入风险 — busy 原子标志plcStop 未等待 in-flight 周期 — 轮询等待 busy 清零serial 释放时 join 未创建线程 — ASAN CHECK 崩溃tinySeqFile_push fwrite(new_idx) 栈越界release_project__ / clearAll 对 p_cache 双重释放 (gGlobal.p_data)cacheW.c SetOption 缺 PLUG_OPT_SET_ITFC 分支 / 转发器目标配置错误 / plugMgr desc 空指针遗留/注意事项:WSL 环境无 /dev/ttyS5, 串口未运行 (预期)drv/ 插件 .so 需手动部署build-asan 与 build-wsl 共写 bin/debug 的污染问题detect_leaks0 (长驻进程清理顺序未全面审计, 泄漏检测未启用)结论: 通过Also unit test fixes during test development: test_plc 链接符号强制拉取, 名称切分测试用例错误等 — those were part of test development, can mention briefly.Format: concise markdown report. Use file links where relevant. Keep it reasonably compact but complete — this is a report, so some length is justified. Use tables where helpful.软 PLCSTVM集成测试报告摘要项目 cNetgate-stable |版本 NETGATE 1.1.1.3618 |日期 2026-08-29测试环境 WSL Debian 13 GCC 14X64_DBG 构建全程启用 AddressSanitizer被测范围 STVM 软 PLC 引擎[stvmPlc.cpp](file:///e:/work/development/netgate/cNetgate-stable/iec61131_3c/stvmPlc.cpp)、PLC 实例管理[plc.c](file:///e:/work/development/netgate/cNetgate-stable/iec61131_3c/plc.c)、netGate 全链路集成、WebSocket 调试服务器一、单元测试43/43 通过测试程序 [test_plc.c](file:///e:/work/development/netgate/cNetgate-stable/test/plc/test_plc.c)用例程序plc_test_main.iec/plc_test_names.iec模块覆盖点结果数据同步SyncIn → RunOnce → SyncOut 全流程控制逻辑YLSD*240、下限保护WD30、未写变量保持原值通过类型支持REAL / INT 往返一致a_b 51 6通过变量映射站点号_变量名首下划线切分、变量名含下划线c_d_e → 站点c.变量d_e 14.5通过CPU 亲和力负数核心号拒绝、绑定成功、重复绑定幂等通过容错网关变量缺失/空容器不崩溃、程序文件不存在创建失败通过实例管理ID/周期/状态查询、修改周期、销毁不崩溃通过二、集成冒烟测试通过./netGate -c etc/config.json运行 25 秒 SIGTERM 完整退出启动链路全部 OK配置 → 插件管理器 → 项目数据缓冲/触发器/站点/北向/转发器→ PLC 管理器 → 事件循环PLC引擎就绪映射 4 变量10ms 周期连续运行约 2400 周期无数据竞争、无内存错误插件serial(S0)、modbusRTU(modbus0)、localNorth(localCacheN1) 全部加载登记成功转发器 T1site0 → localCacheN1 周期转发正常本地缓存写入正常调试服务器独立进程 posix_spawn 拉起/退出正常退出流程PLC 停止等待在飞行周期→ 插件 → 数据缓存 → 全部清理完成ASAN 零报错三、WebSocket 调试服务器验证PASS连接ws://127.0.0.1:8443/api/debugOpenPLC v4 兼容协议命令响应结果握手HTTP 101 Switching Protocols通过45 DE AD 00 00取 MD57E 32 字节哈希通过41 DE AD 00 00调试信息7E 06 00 C6...入口 IP0代码 198B与服务器日志一致通过四、测试过程中发现并修复的缺陷8 项#缺陷修复严重度1dataSetValueEx新旧变量所有权语义矛盾SyncOut 后悬空指针统一为所有权接管删除多余releaseValue高2[project.c](file:///e:/work/development/netgate/cNetgate-stable/src/project/project.c) 初始化成功后误释放 value → PLC SyncIn 堆 UAF删除错误释放高3SIGEV_THREAD 定时器周期回调可重入周期 执行耗时[plcMission](file:///e:/work/development/netgate/cNetgate-stable/iec61131_3c/plc.c#L371-L374) 原子忙标志跳过重入中4停止时销毁引擎与在飞行周期竞态[plcStop](file:///e:/work/development/netgate/cNetgate-stable/iec61131_3c/plc.c#L284-L289) 轮询等待 busy 清零≤1s中5串口未启动时pthread_join无效线程 ID → 退出崩溃增加“已创建”标志防护中6[tinySeqFile.c](file:///e:/work/development/netgate/cNetgate-stable/src/localCache/tinySeqFile.c#L253-L255)fwrite(ptr,...)写指针而非结构体 → 栈越界改为fwrite(new_idx,...)高7p_cache与gGlobal.p_data双重释放 → 退出 UAF/mutex 断言释放时同步清空全局指针高8localNorth 缺PLUG_OPT_SET_ITFC分支、转发器目标指向已删接口、插件描述 NULL 解引用分别补齐处理/修正 prj.json/空指针检查中五、结论软 PLC 集成测试通过。单元测试全覆盖核心逻辑25 秒高频率100Hz集成运行与完整退出流程在 ASAN 严密检测下零内存错误测试中暴露的 8 项缺陷含 4 项高危内存问题均已修复并回归验证。具备交付条件。
返回列表