在演示中运行时使用形式化 B 模型
1 规范问题分析
在相关规范中存在一些需要注意的问题,主要分为小问题和根本性问题:
- 小问题 :“只要报告最大安全前端的 TTD 是空闲的,列车位置就不会扩展到属于这个空闲 TTD 的 VSS 上”,这个描述不够精确。准确的条件应该是:只有当报告最大安全前端位于下一个空闲 TTD 上,而不是列车的估计前端时,才满足该条件。
- 根本性问题 :“列车位置是从最后一次位置报告的估计前端以及 TTD 信息推导出来的”。这里存在疑问,列车位置是仅通过处理列车位置报告来更新(当然,这种情况下会考虑 TTD 信息),还是在没有列车位置报告的情况下,单个 TTD 变化事件也会更新列车位置呢?经过尝试,最终决定仅使用列车位置报告作为更新列车位置的唯一触发条件。因为另一种选择需要调整多个转换,才能重放 HL3 规范的所有场景。
2 状态机转换与优先级
下面展示了 HL3 规范中状态机转换(#9A)的 B 语言翻译:
DEFINITIONS
Guard9A(vss) == vss:VSS & vss_state(vss) = ambiguous
& /*@label "(TTD is free)" */
ttd_state(vss_ttd(vss)) = free
...
OPERATIONS
VSS_Ambiguous_Free_9A(vss) =
SELECT
Guard9A(vss)
THEN
vss_state(vss) := free ||
// st
超级会员免费看
订阅专栏 解锁全文
13万+

被折叠的 条评论
为什么被折叠?



