对象变量订阅

简介#

变量订阅允许您一次性请求一组结构体变量,并定期检索它们。与普通值检索命令(0xa0-0xae)相比,订阅命令按“域”(即结构体的类型)进行划分:

使用“Subscribe ... Variable”命令(0xd0-0xde)启动对结构体变量的订阅。该命令在请求时立即进行评估,以此进行验证。它会返回一个“Subscribe ... Variable”响应(0xe0-0xee)。对于车辆,一旦车辆离开仿真,订阅即被取消调度。

一旦订阅被接受,它将在每次调用 仿真步进(2) 命令后执行。

命令 0xdX: Subscribe ... Variable#

时间 时间 字符串 字节 字节[n]
开始时间 结束时间 对象 ID 变量数量 要返回的变量列表

注意事项:

  • 开始时间:仅在时间步长 >= 此值时执行订阅;单位为毫秒
  • 结束时间:在时间步长 <= 此值时执行订阅;如果仿真达到更高的时间步长,则移除订阅;单位为毫秒
  • 变量列表的大小必须等于“变量数量”字段。

响应 0xeX: ... Subscription Response#

字符串 字节 字节 字节 字节 <返回类型> ... 字节 字节 字节 <返回类型>
对象 ID 变量数量 变量 #1 ID 变量 #1 状态 变量 #1 的返回类型 <变量值#1> ... 变量 #n ID 变量 #n 状态 变量 #n 的返回类型 <变量值#n>

"Subscribe ... Variable" 的响应。

如果变量可以成功检索,状态为 0x00 (RTYPE_OK)。否则,状态为 0xff (RTYPE_ERR)。在后一种情况下,变量类型设置为字符串,变量值包含错误消息。

变量数量 是返回的订阅数量。

客户端库方法#

特殊情况#

  • VAR_LEADER 变量是特殊的,因为 getLeader (0x68) 命令需要一个额外的距离参数。要订阅 VAR_LEADER,Python 客户端 提供了 subscribeLeader 函数。
  • VAR_PARAMETER_WITH_KEY 通用变量是特殊的,因为 getParameterWithKey (0x3e) 命令需要一个额外的键参数。要订阅 VAR_PARAMETER_WITH_KEY,Python 客户端 提供了 subscribeParameterWithKey 函数。

带参数的订阅#

除了上述两种特殊情况外,还有一种通用机制来订阅需要额外参数的值。通常,您需要向函数提供一个额外的映射(map),其中键(key)是您要订阅的变量,值(value)是参数的值(在 C++ / Java 情况下,包装在相应的 TraCIResult 对象中)。

如果您需要订阅具有多个参数的值,目前仅在 Python 中可行。您需要提供一个值元组,其中第一项描述参数的类型(总是以 "t" 开头表示元组,然后是 "d"、"i"、"s" 分别表示浮点数、整数和字符串)。第二项是参数的数量,然后是实际的参数值。 一个例子是:param = {traci.constants.VAR_STOP_SPEED: ("tdd", 2, 0., 0.)}