問題タブ [canopen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
plc - CAN/CANopenを介してPCからPLCに接続する
まず、私はLinuxもCAN / CANopenもあまり経験がないので、ここで何か不明な点がある場合や重要な点が不足している場合は、教えてください。
CAN/CANopenを介してPCをPLCに接続する必要があるプロジェクトがあります。私はCAN-USBコンバーター(canusb.com)とFestoのPLCを持っています。
CANopenスタック(CanFestival)をコンパイルしましたが、ここからどこに行くのですか?非常に複雑に見えますが、まったくわかりません。
(私の最初の目標は、CANアダプタを介してPLCとの接続を確立し、何らかの方法でそれらが通信できることを確認することです。主な目標は、いくつかのレジスタを設定することにより、PLCのいくつかのバルブをオン/オフできるようにすることです。 )。
protocols - CAN通信に関する質問
私がレビューしているuCLinuxのCANドライバーを持っているので、私はこの道を歩み始めました。私は一般的にCANに慣れていないので、それについて少し調査していましたが、答えが見つからない質問に出くわしました。
CAN がシリアル インターフェイスであり、CANopenに「バス マスター」がない場合、CAN プロトコルはバス上の避けられないデータの衝突をどのように処理するのでしょうか? いつ送信できるかを管理する人がいない場合、十分なデバイスと時間が与えられた場合、衝突する送信が必要になります。
これはかなり基本的な質問なので、答えを見つけたのに理解できなかった可能性があります...誰かが答え/例を提供できれば素晴らしいでしょう。
canopen - CANopen オブジェクト ディクショナリは動的に取得できますか?
CANOpenの実装に関する適切なドキュメントがあるデバイス(電気モーターコントローラー)があります。ただし、欠落しているエントリや、ドキュメントが間違っていると思われるエントリがいくつかあります。
CANopen 準拠のデバイスがすべての情報を含むオブジェクト ディクショナリを吐き出す SDO またはその他の方法はありますか?
can-bus - CANopen システムでマスター ハートビートが見つからないため、ノードが反応しない
CANopenのハートビート プロトコルについて奇妙な発見があります。たぶん、他の誰かがこのようなものを見たことがあり、おそらくこのように動作するはずです... とにかく、これがそれについてです:
CANopen には 2 つのタイムアウト ベースのライフ ガード メカニズムがあります。1 つ目はノード ガードです。
もう 1 つはハートビートと呼ばれます。それは非常に単純です。ネットワーク上のすべての参加者が、そのノード ID とその状態を示す通常のメッセージを送信します。頻度はオブジェクト 0x1017sub0 によって定義され、ハートビート プロデューサー時間と呼ばれます。ゼロに設定すると、ハートビートは送信されません。
他の参加者は、ネットワーク上で検索するノードの数に加えて、2 つの連続するハートビート メッセージ間の最大時間を定義できます。この情報は、オブジェクト 0x1016sub1..n に、この特定のノードがリッスンする必要があるノードと同じ数の 32 ビット エントリとして格納されます。
エントリは、ノード ID (ビット 22 から 16) と、ハートビート消費者時間 (ビット 15..0) と呼ばれる、ハートビート間に経過する可能性がある前述の最大時間で構成されます。ここでも、エントリがゼロの場合は無視されています。
お気づきかもしれませんが、ネットワーク マスター (ノード ID 1) とスレーブ (ノード ID 2 ~ 127) の間に区別はありません。
これまでのところ、理論は次のとおりです。
ネットワーク内のスレーブ ノードの 1 つをマスターのハートビート コンシューマーとして構成しているため、オブジェクト 0x1016sub1 に 0x000107D0 のようなエントリがあります。マスターからのハートビート メッセージが少なくとも 2 秒後に期待されることを意味します。
これが 2 つの例で機能することを確認しました。しばらくマスター ハートビートを送信してから停止すると、ノードは運用前モードに戻るか、適切な緊急メッセージを送信します。
master-heartbeat-messages を送信しない場合、ノードを起動 (運用モードに移行) した後、ノードが運用前モードに戻るか、適切な緊急メッセージ、あるいはその両方。しかし、私が試した 2 つの例では、何も起こりませんでした。ハートビートをまったく送信しない場合、ノードはハートビートを予期せず、そのまま実行を続けます。
2 つの例は、互いに大きく異なります。おそらく同じCANopenスタックライブラリを使用しているかどうかはわかりません。
説明はありますか?