2.4 AccessPoints
在DaVinci Developer中,配置Runnable的Access Points是为了指定该Runnable与其他SWC/CDD之间进行通信的方式和端口。通过配置Access Points,可以定义和管理SWC/CDD之间的数据交换和消息传递。
Triggers与Access Points是通过Triggers的触发条件来关联的。Triggers定义了Runnable何时被执行,而Access Points则是Runnable与其他部分(例如Sensor、Actuator等)进行数据交换的接口。
具体而言,当Runnable配置Trigger为On Data Reception(接口接收到数据)、Access Points为Read Data(non-queued)(读取该接口接收到的最新数据),则Runnable触发时,就会去访问该访问点对应的端口原型进行数据接收。可以简单地理解Runnable受Trigger触发后,去访问Access Points对对应端口原型进行相应操作。
Runnable中可配置的Access Points的类型、描述、前置条件见下表2.3:
Access Points | Description | Precondition |
Receive Data(queued) | 按队列形式读取S/R端口接口原型中指定的数据原型,适用于需要处理来自多个发送方的数据的情况 | SWC实例化S/R端口接口类型,作为接收方Receiver,且该S/R类型在定义时,其数据元素原型勾选了Use queued communication |
Read Data(non-queued) | 读取S/R端口接口原型中指定的最新数据,之前的数据将被覆盖,适用于只需要获取最新数据的情况 | SWC实例化S/R端口接口类型,作为接收方Receiver |
Send Data(queued) | 需通过S/R端口接口原型发送的数据将被放入队列中批量发送,无法立即发送,适用于大量数据需要发送的情况 | SWC实例化S/R端口接口类型,作为接收方Sender,且该S/R类型在定义时,其数据元素原型勾选了Use queued communication |
Write Data(non-queued) | 需通过S/R端口接口原型发生的数据将被立即发送出去,适合实时性要求较高的场景 | SWC实例化S/R端口接口类型,作为接收方Sender |
Invoke Operations | 通过C/S端口接口原型调用指定的操作 | SWC实例化C/S端口接口类型,作为客户端Client |
Send Mode Switches | 通过模式转换端口接口原型发送需转换的模式 | SWC实例化模式转换端口接口 类型,作为发送方Sender |
Read Received Mode | 读取模式转换端口接口原型接收的待转换的模式 | SWC实例化模式转换端口接口 类型,作为接收方Receiver |
Read Sent Mode | 作为发送方发送完需转换的模式后,再读取已发送的模式 | SWC实例化模式转换端口接口 类型,作为发送方Sender |
Internal Triggering Point | 作为内部触发点以触发SWC其他Runnable 可直接在New中新建,有Standard和Queued两种 Implementation | 默认任何Runnable均可配置 |
Raise External Trigger | 其他SWC通过Trigger接口发送信号以充当外部触发事件 | SWC实例化触发接口类型,作为发送方Sender,外部接收方Receiver以此接收外部触发 |
上表中部分Access Points还可进一步设置属性,具体情况见下图2.4所示:

特别说明:
在创建Trigger:On Operation Call Return时,若Access Points未定义Invoke Operations的访问点,系统会自动创建,且硬性规定异步操作响应,异步读取返回模式为Polling轮询。若将Polling改为None,系统会自动将None改为Polling。
Ack Only:发送方只会收到接收方发送的确认信息(ACK),而不会接收到实际的数据包。例如在访问点Send Mode Switches中,则表示接收只需发送确认信号,而不进行实际的模式切换。通常Ack Only用于测试和调试,以验证通信链路的可靠性和确认机制的正确性。
Standard:是Internal Triggering Point的一个触发方式,在这种触发方式下,当一个触发点被激活时,它只会触发一个相关的组件。这意味着,每次触发点被激活时,只有一个组件会被选中并处理。适用于只需要触发单个组件的情况。
Queued:是Internal Triggering Point的另一个触发方式,在这种触发方式下,当一个软件组件发生事件时,该事件将被排队并等待其他相关的组件处理。这意味着,当一个触发点被激活时,它可以激活多个相关的组件,并按照排队的顺序进行处理。
Explicit by argument(Read):通过参数来显式地指定要读取的数据。代码中,需要明确指定要读取的数据对象,并将其作为参数传递给Read函数。适用于需要明确指定读取哪些数据的情况。
Implicit(IRead):一种隐式的读取方式。在代码中不需要显式地指定要读取的数据对象,而是通过设置相关的属性或配置项来自动读取特定的数据。适用于需要自动读取数据的情况。
Explicit Write:通过显式的方式将数据直接写入到特定的数据项中。在DaVinci Developer中,可以明确指定要写入的数据项和要写入的数据的值。(个人理解,这种写是非自动的,需要人为介入)
Implicit Write:通过隐式的方式将数据写入到数据项中。在DaVinci Developer中,可以使用规则和条件来定义数据项的写入逻辑,并在符合特定条件时自动将数据写入到数据项中。(个人理解,这种写是自动的,不需要人为介入)
Polling:轮询是访问点Invoke Operation异步调用时的一种操作方式,指定期间内反复查询操作的状态,以确定操作是否已经完成。若完成,获取其结果;反之,则可继续等待并再次查询。
Waiting:等待是访问点Invoke Operation异步调用时的另一种操作方式,在查询操作状态时暂停程序执行,并等待操作完成。通过等待,可以让程序暂时停止执行,直到操作完成或Timeout时间超时为止。