2. CANopen オブジェクト ディクショナリの役割と重要性

記事 2: CANopen オブジェクト ディクショナリ: データ管理と通信の詳細

最近、CANO​​pen 関連の知識を学習し始めましたが、AI アシスタント ツールの助けを借りて、学習は半分の労力で 2 倍の結果を得ることができます。ようこそ: http://airright.fun/。
canopen を学ぶ過程で、私はいくつかの資料を大切にし、参考のために共有しました。リンク: https://pan.baidu.com/s/1SRg5YrQjvpzXEIi_fOmxQg?pwd=20v4
抽出コード: 20v4

CANopen プロトコルでは、オブジェクト ディクショナリが中心的な概念であり、データ管理と通信において重要な役割を果たします。オブジェクト ディクショナリは、CANopen ノードのコア ストレージ領域であり、ノードの構成パラメータとステータス情報を管理するために使用されます。この記事では、CANopen オブジェクト ディクショナリの役割と重要性について詳しく説明し、オブジェクト インデックス、サブインデックス、オブジェクト ディクショナリのデータ構造を理解し、PDO、SDO、NMT などの一般的なオブジェクト タイプを紹介し、オブジェクトの使用方法について説明します。データ通信や機器設定を実現するための辞書です。同時に、理解を深めていただくために、デモ用のサンプル ソース コードをいくつか提供します。

1. CANopen オブジェクト ディクショナリの役割と重要性

オブジェクトディクショナリはCANopenネットワークの中核であり、ノードの設定パラメータやステータス情報を管理するために使用されるデータストレージ領域です。CANopen ネットワークでは、各ノードが独自のオブジェクト ディクショナリを持ち、他のノードはオブジェクト ディクショナリにアクセスすることでデータを交換し、そのノードと設定を行うことができます。

オブジェクト ディクショナリの役割と重要性は次のとおりです。

a. データ管理:デバイス識別情報、通信パラメータ、動作モード、エラーステータスなどを含む、ノードのすべての構成パラメータとステータス情報はオブジェクトディクショナリに保存されます。オブジェクト ディクショナリを通じて、ノードは独自のデータを簡単に管理できます。

b. データ通信:オブジェクト ディクショナリ内のデータは、CANopen ネットワークを通じて他のノードと交換できます。ノードは、データを PDO (プロセス データ オブジェクト) としてカプセル化することも、SDO (サービス データ オブジェクト) を使用してリクエストと応答を行って、リアルタイムのデータ送信と構成を実現することもできます。

c. デバイス構成:オブジェクト ディクショナリに保存されている構成パラメータは、SDO を介して読み書きでき、ノードのオンライン構成を実現します。これにより、デバイスのパラメータ調整がより柔軟かつ便利になります。

2. オブジェクトインデックス、サブインデックス、オブジェクト辞書のデータ構造を理解する

CANopen オブジェクト ディクショナリでは、各データ項目は一意のオブジェクト インデックス (Index) とオプションのサブインデックス (Sub-index) で構成されます。オブジェクト インデックスは異なるデータ項目を識別するために使用され、サブインデックスは同じオブジェクト インデックス内の異なるデータを区別するために使用されます。たとえば、オブジェクト辞書項目は OD (Object Dictionary) 1000h で、サブインデックスは 01h で、特定のデータ項目を示します。

オブジェクト ディクショナリのデータ構造は、キーと値のペアのコレクションと比較できます。キーはオブジェクト インデックスとサブインデックスで構成される一意の識別子であり、値は対応するデータです。オブジェクト ディクショナリ内のデータは、オブジェクト インデックスとサブインデックスを通じてアクセスおよび変更できます。

3. 一般的なオブジェクト タイプ: PDO、SDO、NMT

CANopen は、さまざまなデータ通信および管理タスクに使用される、一般的に使用されるオブジェクト タイプをいくつか定義します。

a. PDO (プロセス データ オブジェクト): PDO は、あるノードから別のノードにデータを送信するリアルタイム データ送信に使用されます。PDO は、同期伝送や非同期伝送など、さまざまな伝送タイプに合わせて構成できます。オブジェクトディクショナリでは、PDO のインデックス範囲は通常 1400h から 17FFh の間です。

b. SDO (サービス データ オブジェクト): SDO は、ノード パラメーターの構成と管理に使用されるオブジェクト タイプです。SDO を通じて、ノードは他のノードのオブジェクト ディクショナリ データを要求し、そのデータに対して読み取りおよび書き込み操作を実行できます。SDO はデータ交換にリクエストとレスポンスを使用します。オブジェクトディクショナリでは、SDO のインデックス範囲は通常 1200h ~ 12FFh です。

c. NMT (ネットワーク管理): NMT は、起動、停止、再起動などのノードのステータスを制御するために使用されます。NMT を通じて、CANopen ネットワーク全体を集中管理できます。オブジェクト ディクショナリでは、NMT にはインデックス 0 とサブインデックス 0 があります。

4. データ通信とデバイス構成にオブジェクト辞書を使用する

CANopen ネットワークでは、オブジェクト ディクショナリを使用してデータ通信とデバイス設定を実現するには、PDO の使用と SDO の使用という 2 つの主要な側面が関係します。

a. PDO を使用してデータ通信を実現する: PDO は CANopen ネットワークで一般的なデータ通信方法であり、特にリアルタイム データ送信に適しています。ノードは、ネットワーク内でオンデマンドでデータを送信できるように、PDO の送信タイプとマッピング関係を構成できます。以下は、PDO データを構成して送信する方法を示す簡単なサンプル コードです。

// 配置PDO映射关系
// 将对象字典中的数据映射到PDO数据
// 这里假设PDO的索引为0x180h,子索引为1
configure_PDO_mapping(0x180, 1, "数据对象1");

// 发送PDO数据
uint8_t data[] = {
    
    0x01, 0x02, 0x03, 0x04};
send_PDO_data(0x180, data, sizeof(data));

b. SDO を使用してデバイス設定を実装する: SDO は、CANopen ネットワークでノード パラメータを設定する重要な方法です。ノードは、SDO リクエストと応答を使用して、他のノードからオブジェクト ディクショナリ データを読み書きできます。SDO を使用してデータを読み書きする方法を示す簡単なサンプル コードを次に示します。

// 读取其他节点的对象字典数据
uint32_t data;
if (SDO_read_data(0x201, 0x02, &data)) {
    
    
    printf("读取节点0x201的对象0x02数据成功:0x%x\n", data);
} else {
    
    
    printf("读取节点0x201的对象0x02数据失败\n");
}

// 写入其他节点的对象字典数据
uint8_t data_to_write = 0x55;
if (SDO_write_data(0x202, 0x01, &data_to_write, sizeof(data_to_write))) {
    
    
    printf("写入节点0x202的对象0x01数据成功\n");
} else {
    
    
    printf("写入节点0x202的对象0x01数据失败\n");
}

読んでいただきありがとうございます。CANOpen 関連の問題について議論することを歓迎します。また、学習プロセス中の質問に答えるために AI アシスタント AIRight を使用することも歓迎します。リンク http://airright.fun/ にアクセスしてください。

おすすめ

転載: blog.csdn.net/Jake_cai/article/details/132201286