安装与启动故障
IDE 启动报错
| 错误信息 | 可能原因 | 解决方案 |
|---|---|---|
| “无法加载扩展” | 扩展安装损坏 | 删除 ~/.kvpac/extensions/ 重新安装 |
| “端口已被占用” | 其他进程占用端口 | 使用 lsof -i :<port> 查找冲突进程 |
| “段错误 (Segmentation Fault)” | 系统资源不足 | 关闭其他应用程序释放内存 |
| “数据库初始化失败” | 权限不足 | 检查 workspace 目录写入权限 |
许可证错误
| 错误代码 | 含义 | 处理 |
|---|---|---|
| E001 | 许可证密钥无效 | 确认密钥格式正确,联系管理员 |
| E002 | 许可证已过期 | 申请续期 |
| E003 | 已达到最大激活数 | 在旧设备上取消激活 |
| E004 | 网络验证失败 | 检查网络连接和 DNS 设置 |
编译故障
常见编译错误
错误: 未定义的标识符 'var_name'
- 变量未声明或拼写错误
- 确认变量在 VAR 块中已声明
- 检查变量作用域(全局 vs 局部)
错误: 类型不匹配: INT != BOOL
- 赋值或表达式中类型不一致
- 使用类型转换函数:
BOOL_TO_INT(),INT_TO_REAL()
错误: 重复定义 'MyFunctionBlock'
- 功能块/函数名称冲突
- 使用命名空间或重命名
错误: 数组索引越界
- 数组访问超出声明范围
- 检查索引变量是否在 0..N-1 范围内
编译警告
警告不阻止编译,但建议排查:
| 警告 | 说明 |
|---|---|
| “变量 ‘x’ 已声明但未使用” | 存在未使用的变量,建议移除 |
| “隐式类型转换” | 不同精度类型自动转换可能丢失精度 |
| “不可达代码” | RETURN 或 EXIT 后的代码不会被执行 |
| “常量重新赋值” | 试图修改 CONSTANT 变量 |
编译通过但无输出
- 检查
target配置是否正确 - 确认目标平台 SDK 已安装
- 查看编译输出目录是否有生成
output.bin - 使用
kvpac-maker build --verbose获取详细日志
调试故障
连接问题排查表
| 症状 | 排查步骤 |
|---|---|
| 连接超时 | 1. ping <target_ip> 测试网络2. 确认 RTE 已启动 3. 检查端口 2020 是否开放 |
| 连接被拒绝 | 1. RTE 版本兼容性 2. 防火墙规则 3. 认证 Token 是否有效 |
| 连接不稳定 | 1. WiFi vs 有线网络 2. 网线/交换机故障 3. 电磁干扰 |
| 只能连接一次 | RTE 单连接模式,关闭前一个调试会话再试 |
断点问题
断点变成空心圆:表示断点未生效。可能原因:
- 代码行不可执行(注释、空行、声明行)
- 代码被优化器移除了
- 断点所在的 POU 未被加载到 RTE
断点被跳过:
- 确认断点所在代码路径确实被执行
- 条件判断可能短路求值
- 尝试在更大范围的代码行设置断点
变量监视无数据
- 变量未在作用域内:局部变量仅在 POU 执行期间可见
- 变量被优化掉:降低 optimization 级别重新编译
- 类型不匹配:在监视面板确认变量类型
- RTE 版本差异:更新 RTE 到与 IDE 匹配的版本
运行时故障
程序崩溃
flowchart TD
A[程序崩溃] --> B{崩溃类型}
B -->|硬错误| C[检查异常向量表]
B -->|看门狗复位| D[增加任务周期/优化代码]
B -->|内存错误| E[检查数组边界/减少动态分配]
B -->|原因不明| F[启用调试信息重新编译]
IO 故障
数字量输入不变化:
- 用万用表测量输入端子电压
- 检查信号类型(NPN vs PNP)
- 确认 IO 配置中的通道号
- 测试模式下强制 IO 点验证
模拟量读数异常:
- 确认信号范围(0-10V, 4-20mA)
- 检查接线极性
- 在配置中设置正确的量程
- 使用信号发生器测试通道
输出不动:
- 检查负载电源
- 确认输出类型(继电器/晶体管)
- 测量输出端子输出电压
- 程序中强制输出测试
性能问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 任务周期超时 | 代码执行时间过长 | 1. 拆分高耗时操作 2. 使用更快的算法 3. 将非关键任务移到 Slow Task |
| IO 响应延迟 | 通信负载过高 | 1. 减少 Modbus 轮询频率 2. 使用 IO 缓存批量读取 3. 优化 IO 映射配置 |
| 内存持续增长 | 内存泄漏 | 1. 检查动态分配 2. 确保每个 ALLOCATE 有对应的 DEALLOCATE 3. 检查功能块实例的初始化/复位逻辑 |
| RTE 间歇性卡顿 | 高频中断冲突 | 1. 检查中断优先级 2. 减少高优先级任务 3. 检查 CAN/Modbus 中断频率 |
通信故障
WebSocket 连接
# 测试 WebSocket 连接
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: localhost:2020" http://localhost:2020/
# 查看 TCP 连接状态
netstat -an | grep 2020
# 抓包分析
tcpdump -i any port 2020 -X
Modbus 调试步骤
1. 确认 Modbus 在 RTE 配置中已启用
2. 检查端口占用:lsof -i :502
3. 使用 Modbus 工具读取保持寄存器地址 0
4. 如果无响应,检查防火墙和路由
5. 查看 RTE 日志中的 Modbus 错误
故障报告模板
当需要向技术支持报告问题时,请提供以下信息:
- KVPAC IDE 版本:
- RTE 版本:
- 目标平台: [模拟器 / STM32-型号]
- 操作系统:
- 问题描述:
- 复现步骤:
1.
2.
3.
- 预期行为:
- 实际行为:
- 日志/截图:
提示:大多数问题可以通过重新编译(Clean Build)或重启 RTE 解决。在提交工单前,建议先尝试这两个基本操作。