跳到主要内容

诊断

西门子工程师在 TIA 里先看设备诊断缓冲、模块诊断和通道状态。本接口同一套用法:

  1. GET /api/status 看是否在交换、有没有致命报警。
  2. GET /api/diag 看链路、周期、应用关系、事件簿。
  3. GET /api/alarms 看本机汇聚报警。
  4. 需要上控制器时走 POST /api/diag(标准通道诊断)或 POST /api/alarm(过程报警)。

不要先去对过程数据字节。诊断不可用时如实 ok=false,不虚构计数器。

配合 运行态报警 使用。


GET /api/diag

从站未启动或数据面未就绪时:

{
"ok": false,
"sharedMemoryMapped": false,
"message": "驱动诊断不可用: 共享内存未映射 (从站未启动或驱动未就绪), 请检查服务日志获取详情",
"errorCode": 0,
"degraded": true,
"degradedReason": "…",
"driverServiceStatus": "…",
"log": [],
"timestamp": "…"
}

degraded=true 表示数据面未启动,服务仍在运行并后台退避重试。正常态 degraded=false

可用时 ok=true,主要字段如下。

连接与周期

字段说明
ok诊断是否可用
sharedMemoryMapped从站已启动且数据面就绪
stateStopped / Bound / Configured / Running / Safe / Faulted
linkUp网卡链路是否 Up
connected周期数据是否正常(看门狗未超时)
activeIocrCount已激活 IOCR 数
iocrActiveIOCR 激活位图(bit N = IOCR[N] 已激活)
iocrHealthyIOCR 健康位图(bit N = IOCR[N] 周期健康)
heartbeat心跳计数
cycleCounter周期循环计数
lastError最近错误码(0 = 无)
inputAreaLength / outputAreaLength过程映像区长度(字节)

帧计数

字段说明
rxFrames / txFrames收 / 发总帧数
rxRtFrames / txRtFrames收 / 发周期帧数
droppedFrames被丢弃的帧数(缓冲满 / 非本设备)
invalidFrames非法帧数(长度 / 校验 / FrameId)
watchdogTrips看门狗超时次数
lastRxTsc / lastTxTsc最近收 / 发帧时间戳
loopbackFrames本机回环帧(已丢弃,不进状态机)

协议栈周期

字段说明
stackCycles周期计数(未启动为 0)
stackFramesRx / stackFramesTx控制器→设备 / 设备→控制器 帧计数
stackMissedTicks错过节拍数(不追赶)
stackMaxJitterUs最大抖动(µs)

stackMissedTicks / stackMaxJitterUs 是「周期循环是否跟上节拍」的第一指标。

应用关系

字段说明
arEpoch协商值代次。每次建立 / 中止递增;0 = 从未建立
arFrameIdCpm协商 CPM FrameId(控制器→设备);0 = 未协商
arFrameIdPpm协商 PPM FrameId(设备→控制器);0 = 未协商
arControllerMac控制器 MAC(XX:XX:XX:XX:XX:XX);空 = 未协商
arDataHoldFactor协商 data_hold_factor;0 = 未协商 / 已清零
arDataReady1 = 已 application_ready 或收到数据;中止清 0

控制器报警摘要

负载本体不缓存,只保留最近一次定位信息。

字段说明
stackAlarmRxCount收到控制器报警总数
stackAlarmTxAckOk本设备过程报警被控制器确认数
stackAlarmTxAckFail过程报警确认失败数
stackAlarmAckPending当前在途过程报警(0 / 1)
stackAlarmMaintState当前维护请求状态
stackAlarmLastArep最近控制器报警 AREP
stackAlarmLastSlot / stackAlarmLastSubslot槽 / 子槽
stackAlarmLastType / stackAlarmLastSeq类型 / 序列号
stackAlarmLastUsi / stackAlarmLastLen负载 USI / 长度

事件簿 logbook

AR 事件环形,最多 20 条,新到旧。从未建立 AR → 空数组。

字段说明
event1 连接 / 2 释放 / 3 中止 / 4 控制命令
arepAR 序号
arUuidHi / arUuidLoAR UUID 前 8 字节
qpcUs时间戳(微秒)

驱动事件环 log

最多 32 条非零槽。读失败 → 空数组,不崩端点。

字段说明
eventCode事件码(十六进制文本,如 "0x0006"
arg0 / arg1参数(十六进制文本)
tsc时间戳

降级观测

字段说明
degraded是否降级
degradedReason原因(非降级为空)
driverServiceStatus最近观测到的驱动服务状态文本
degradedSinceUtc / lastAttemptUtc进入降级 / 最近重试(UTC)
nextRetrySeconds距下次重试秒数(非降级 = 0)
GET /api/diag HTTP/1.1
Host: 127.0.0.1

POST /api/diag

向控制器上送 / 更新 / 清除标准通道诊断(模块诊断)。插拔类诊断由栈在模块插拔时自动发,不要用本端点替代。过程报警走 POST /api/alarm

{
"action": "add",
"slot": 1,
"subslot": 1,
"ch": 32768,
"chBits": 0,
"severity": 0,
"chErrorType": 2832,
"extChErrorType": 0,
"extChAddValue": 0
}
字段必填说明
actionadd / update / remove
slot / subslot06553465535 规范保留)
ch00x80000x8000(32768)= 整子模块
chErrorType通道错误类型(例 0x0B10 = 2832)
chBits仅 add0 / 1 / 2 / 4 / 8 / 16 / 32 / 640 = 未指定
severity仅 add0 故障 / 1 需要维护 / 2 要求维护 / 3 合格化
extChErrorType / extChAddValue扩展通道错误;缺省 0

成功:

{ "ok": true, "action": "add", "slot": 1, "subslot": 1, "timestamp": "…" }

失败(HTTP 400,errorCode = 栈返回码):

errorCode含义
空指针类从站未启动
诊断拒绝类目标项不存在(remove / update 未 add 过)或参数非法

越界 / 非法枚举在到达栈之前以 HTTP 400 拒绝。