web-dev-qa-db-ja.com

単純なCANopenレイヤーをプログラムする方法

モーターコントローラーが通信に CANopen を使用するロボットプロジェクトがあります。マスターマイクロコントローラーを使用してこれらのモーターコントローラーと通信する必要があります。問題は、このマイクロコントローラーでCANopenレイヤーを開発する必要があることですが、私は低レベル(CAN)で送受信する方法しか知りません。

CANopen(PDO、SDO、ハートビート、オブジェクト辞書など)についてはよくわかりません。 CiAの仕様を読んでみましたが、とても複雑でした。誰かが私を正しい方向に向けたり、簡単なCANopenレイヤーをプログラムするための良いチュートリアルを教えてくれたら幸いです。

18
user150908

これは一般的な関心のあるトピックのように思われるので、元の仕様全体を理解することはやや苦痛な経験になる可能性があることに同意します。したがって、「すべてを実装する」のではなく、「ドライブを実行する」ための提案があります。

  • CANopenドライブがCiA402標準オブジェクトを介して操作できるかどうかを確認します。パフォーマンス上の理由から、PDOを構成および使用しないことはまったく問題ありません。また、ハートビートは実際には必要ありません。通常、ドライブのステートマシンの切り替え(オブジェクト6040h、制御ワード)、操作モードの設定(オブジェクト6060h)、および「プロファイル位置速度」などの追加パラメーターの設定です。

  • 次に、優先SDO転送のみを実装します。 ( http://en.wikipedia.org/wiki/CANopen を参照してください。)SDOダウンロードは、ドライブ内のオブジェクトの書き込み/変更用です。 SDOアップロードは、オブジェクトを読み取るためのものです。

  • SDOの読み取りと書き込みが可能でCANバスモニターを備えたPCソフトウェアを使用することをお勧めします。 (私たちの Kickdrive Zero フリーウェアはそれを行うことができますが、実際には、CANopen用の他のPCツールはすべて機能するはずです。)必要なデータ型とオブジェクトの読み取りと書き込みの例をいくつか実行します。これがCANレベルのフレームにどのように変換されるかを見てください。基本的な整数データ型の場合、それは常に要求用に1フレーム、応答用に1フレームです。

  • 次に、SDOのダウンロード/アップロード要求を送信し、回答を処理できる単純なプロトコルスタックをマイクロコントローラー上に構築します。

免責事項-上記は「CANopenの実装」、「CANopenのサポート」、または「CANopen準拠」にさえ近いものではありません。それは「ドライブをできるだけ早く、サードパーティのコードなしで動かす」ことです。これは時々正しいことです。

9

組み込みARMとWindowsPCデバイスの両方にCANopenレイヤーをゼロから実装しました。以前の回答とは異なり、不可能ではありません。CANopenの基本的な機能のみが必要で、すぐに学習できる場合プロトコルの概念により、物事をかなり迅速に立ち上げて実行することができます。

あなたはCiA仕様を読まなければならないでしょう、それを避ける方法はありません、しかし最初はそれは幾分圧倒的であることがわかるかもしれません。 Pfeiffer、Ayre、Keydelによる「 CANおよびCANopenを使用した組み込みネットワーク "」を読むことから始めることをお勧めします。基本的な概念をうまく説明しているので、仕様をよりよく理解するのに役立ちます。

4
Alex

CanFestivalスタックを使用してみてください-無料で、LinuxなどのOSからティックタイマーだけのベアマシンに簡単に移植できます。

4〜6か月は少し長いようです。マスターまたはスレーブのみが必要な場合があり、3〜4週間でC++でマスターのみの実装を行いました。

3
Larry_C

残念ながら、simpleCANopenレイヤーはありません。 CANopenをサポートするには、すべてを実装する必要があります。

サードパーティベンダーからCANopenライブラリを購入することをお勧めします。通常、それらは安くはありませんが、これを自分で実装する必要がある時間を考慮すると、その時間の給与よりも安いです。

私たちは PORT GmbHのANSI-C CANopen Library ライブラリを使用してきました。これは手頃な価格で、バグがほとんどありません。私たちが試した他のライブラリに。

1
Stefan

ここから、ManagerアドオンでMicroCANopenスタックを使用しています: http://www.canopenstore.com/pip/microcanopen.html

他のスタックと比較して比較的安価ですが、ネットワーク内のすべてのノードで使用しているため、他のCANOpen準拠デバイスでどのように動作するかについての証言を提供することはできません。

1
Jason Machacek

これが商業的なものである場合、CANopenの実装は検討しません。これにより、(サブセットの場合でも)4〜6か月のどこかにかかります(実際に機能させたい場合)。 1時間あたりの給与と、市場投入までの時間の要件がわかりません。あなたは自分で数学をする必要があります。

0
robert.berger

私が使用した別の商用ソリューションは IXXATのCANopenソフトウェア です。それらは多くの異なるプラットフォーム用のポートを提供します。

すでに前に言ったように:あなたはそれを無料で手に入れることも安くもない。しかし、数ヶ月の開発期間と比較して、数千米ドルは何ですか?

0
chrmue