exos_dataset_publish()

<< 点击显示目录 >>

主页  exOS使用助手 > exOS Automation Help > Development > Programming > exOS Communication API reference (exos_api.h) >

exos_dataset_publish()

发布数据集

调用语法

EXOS_ERROR_CODE exos_dataset_publish(exos_dataset_handle_t *dataset);

向其他订阅者发布(发送)数据集。  首先,数据集需要  通过 exos_dataset_connect() 函数 以 EXOS_DATASET_PUBLISH的 形式 连接到 数据集消息路由器

只有当数据模型/数据集处于 connection_state EXOS_STATE_CONNECTED 或 EXOS_STATE_OPERATIONAL状态时,该函数才会起作用 。  在其他状态下 调用 exos_dataset_publish(), 将导致 EXOS_ERROR_CODE_BAD_STATE。

当发布(发送)一个值时, 在exos_dataset_init() 中给出的 数据 指针 会 被复制到一条信息  中  (使用 大小)。如果函数返回 EXOS_ERROR_OK, 则表示数据集正在前往 数据集消息路由器的 途中 。当 数据集消息路由器 收到数据集并将其分发给其他参与者时, EXOS_DATASET_EVENT_PUBLISHED 事件  就会被触发。当远程 数据集消息路由器收到数据集后 (即通过共享内存或 TCP/IP 传输后),事件 EXOS_DATASET_EVENT_DELIVERED即 被触发。

exos_dataset_publish() 不需要等待信息被传送或发送。多个 exos_dataset_publish() 可以相继被调用,从而  在订阅者身上 产生相同数量 的EXOS_DATASET_EVENT_UPDATED 。这意味着每一个成功发布的数据集都会在另一端收到。

对于以 EXOS_DATASET_PUBLISH + EXOS_DATASET_SUBSCRIBE方式连接 的数据集,需要注意的是, EXOS_DATASET_EVENT_UPDATED不会 在进行发布的数据模型/数据集上触发。这样,数据集就可以在 EXOS_DATASET_EVENT_UPDATED 事件 中被检查、更改和发回  ,而不会造成无休止的循环。


Publish a dataset

Call syntax

EXOS_ERROR_CODE exos_dataset_publish(exos_dataset_handle_t *dataset);

Publish (send) a dataset to other subscribers. The dataset needs to be connected to the Dataset Message Router as EXOS_DATASET_PUBLISH via the exos_dataset_connect() function first.

This function only works if the datamodel / dataset is in connection_state EXOS_STATE_CONNECTED or EXOS_STATE_OPERATIONAL. Calling exos_dataset_publish() in other states will result in EXOS_ERROR_CODE_BAD_STATE.

When publishing (sending) a value, the data pointer given in exos_dataset_init() is copied into a message (using the size). If the function returns EXOS_ERROR_OK it means that the dataset is on its way to the Dataset Message Router. When the Dataset Message Router has received the dataset and distributes it to other participants, the event EXOS_DATASET_EVENT_PUBLISHED is triggered. When the dataset has been received on the remote Dataset Message Router (i.e. after transmission via shared memory or TCP/IP), the event EXOS_DATASET_EVENT_DELIVERED is triggered.

exos_dataset_publish() does not have to wait for a message to have been delivered or sent. Multiple exos_dataset_publish() can be called after each other, creating the same number of EXOS_DATASET_EVENT_UPDATED on a subscriber. This means, every dataset successfully published is also received on the other end.

For datasets connected as EXOS_DATASET_PUBLISH + EXOS_DATASET_SUBSCRIBE, it is important to note that the EXOS_DATASET_EVENT_UPDATED is not triggered on the datamodel/dataset that made the publish. This allows the dataset to be examined, changed and sent back within the EXOS_DATASET_EVENT_UPDATED event, without causing an endless loop.