2. MVB主设备帧发送时序配置与从设备响应捕获
主帧发送时序参数与从帧响应窗口
MVB 主设备在每个基本周期内按微时隙(micro-slot)依次发送主帧,从设备只能在被寻址后的规定响应窗口内回送从帧。要让主从通信稳定建立,主设备侧必须把三个时序量配准:主帧间隔(微时隙长度)、从帧响应超时、帧间保护间隔。三者与 1.5 Mbps 位速率下的位时间(约 666.7 ns)直接相关,配置不当会表现为从帧被截断、误判为无响应或相邻主帧碰撞。
本例采用一台 MVB 主设备(可配置时序寄存器)、一台过程数据从设备,以及一台带时间戳的 MVB 总线监听工具。主设备按 1 ms 基本周期发送主帧,监听工具以位时间为分辨率记录主帧起始沿与从帧起始沿,从而直接读出实际响应延迟。
时序参数配置与捕获流程
主设备侧需要写入的时序参数通常以位时间为单位。以 1.5 Mbps 为例,1 位约 666.7 ns,因此 42 μs 的响应超时约等于 63 位时间。配置时按以下顺序进行,避免参数互相覆盖:
- 设定微时隙长度 T_slot:本例取 1 ms 基本周期内划分 16 个微时隙,即 T_slot ≈ 62.5 μs。该值必须大于“主帧长度 + 从帧响应窗口 + 保护间隔”之和,否则相邻主帧会挤压从帧。
- 设定从帧响应超时:取 42 μs(约 63 位时间),略大于从设备最坏响应延迟,留出裕量但不至于吞掉下一个微时隙。
- 设定帧间保护间隔:取 4 μs(约 6 位时间),用于吸收总线传播延迟与收发器切换抖动。
- 启动监听工具:在发送主帧前开始记录,确保捕获到主帧起始沿与从帧起始沿的完整时间戳。
下面是一段用于计算并校验上述参数是否自洽的 Python 示例,输入为位速率、微时隙数、主帧位数与从帧位数,输出各时间量与是否满足约束:
BIT_RATE = 1.5e6 # 1.5 Mbps
BIT_TIME = 1 / BIT_RATE # ≈ 666.7 ns
SLOTS_PER_CYCLE = 16
CYCLE = 1e-3 # 1 ms 基本周期
T_SLOT = CYCLE / SLOTS_PER_CYCLE # 62.5 μs
T_RESP_TIMEOUT = 42e-6 # 从帧响应超时
T_GUARD = 4e-6 # 保护间隔
MASTER_BITS = 16 # 主帧位数(示例)
SLAVE_BITS = 16 # 从帧位数(示例)
t_master = MASTER_BITS * BIT_TIME
t_slave = SLAVE_BITS * BIT_TIME
need = t_master + T_RESP_TIMEOUT + T_GUARD
print(f"位时间 = {BIT_TIME*1e9:.1f} ns")
print(f"T_slot = {T_SLOT*1e6:.1f} μs")
print(f"主帧时长 = {t_master*1e6:.2f} μs, 从帧时长 = {t_slave*1e6:.2f} μs")
print(f"所需最小微时隙 = {need*1e6:.2f} μs")
print("时序自洽" if T_SLOT >= need else "T_slot 过小,需增大或缩短响应超时")
按上述示例参数,所需最小微时隙约为 10.7 μs + 42 μs + 4 μs ≈ 56.7 μs,小于 62.5 μs,因此配置自洽。若把响应超时误设为 60 μs,则所需最小微时隙超过 62.5 μs,相邻主帧将挤压从帧窗口,监听工具上会看到从帧被下一主帧起始沿截断。
捕获结果判读
监听工具导出的事件序列应包含“主帧起始”“从帧起始”“超时”三类标记。判读时按以下条件逐条核对:
| 观察项 | 正常表现 | 异常含义 |
|---|---|---|
| 主帧起始沿间隔 | ≈ T_slot(62.5 μs) | 间隔抖动大 → 主设备调度或时钟不稳 |
| 从帧起始沿相对主帧的延迟 | ≤ 42 μs | 超过 42 μs → 从设备未及时响应或地址不匹配 |
| 从帧结束到下一主帧起始 | ≥ 保护间隔 4 μs | 小于 4 μs → 存在碰撞风险,需增大保护间隔 |
| 超时事件计数 | 0(正常通信时) | 持续超时 → 检查从设备端口配置与主帧地址 |
若监听工具只能给出微秒级时间戳,建议连续采集至少 100 个基本周期,统计 t_delay 的最大值与抖动范围,而不是只看单帧,以避免偶发调度抖动造成误判。
修改 T_slot 或响应超时后必须重新采集,不能沿用旧数据判读;参数变更会直接改变从帧窗口位置,旧时间戳不再对应新配置。