問題タブ [socketcan]

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.

0 投票する
2 に答える
832 参照

sockets - C - socketCAN のブロードキャスト マネージャでサイクリック メッセージを送信する

socketcan のブロードキャスト マネージャーを使用して、CAN バスにいくつかのメッセージを書き込んでいます。

このコードは正しく機能し、5 つのメッセージを 100 ミリ秒間隔で 1 回送信するだけですが、これは私が望むものではありません。5 つのメッセージ (frame[0] から frame[4] まで) を 1 回送信し、最後のフレーム (frame[4]) のみを常に 100ms の間隔で送信し続けます。したがって、bcm は以下を送信する必要があります。

iva2.tv_usec を 100000 に設定すると、最後のフレームだけを送信したいのに、すべてのフレームを送信し続けます。どうすればこれを行うことができますか? TX_COUNTEVT フラグを追加すると、カウントがゼロに達すると bcm が TX_EXPIRED メッセージを生成することを読みました。この TX_EXPIRED メッセージを処理し、必要に応じて bcm 送信を手動で変更できますか? 念のため、この TX_EXPIRED メッセージをどこでどのように処理できますか? 私の目的を達成するための別の簡単な方法はありますか?

0 投票する
1 に答える
641 参照

can-bus - CAN バス上でアービトレーションを模倣することはできますか?

設定

1 つの CAN バスに 2 つのノードが接続されています。最初のノードは、いくつかのリアルタイム ハードウェアによって制御されるブラック ボックスです。2 番目のノードは、PEAK-USB CAN コントローラーが接続された Linux マシンです。

時折のフレーム損失に関連する問題を調査するために、CAN アービトレーション プロセスを模倣したいと考えています。そのために、CAN ビットレートを 125Kb/s に設定し、1ms の遅延でランダムな CAN フレームをフラッディングし、can-utils のcanbusloadでバス負荷を制御しています。また、実行中のCANエラーフレームと全体的な缶の統計を次のように監視します。candump can0,0~0,#ffffffffip -s -d link show can

問題

問題は、指定されたセットアップが、負荷が 99% のときに、衝突 (調停) が発生せず、またはその他の種類のエラー フレームが発生することなく、何時間も機能することです。遅延を減らしてバスの負荷を増やすと、 「ENOBUFS 105 No buffer space available」または「EAGAIN 11 Resource temporarywrite(2) available」のいずれかで失敗します- 実際のエラーは、qlenパラメータを変更するか、デフォルトに設定するかによって異なります。

私が理解しているように、私がかけた負荷は十分でないか、または多すぎます。2 つのノードを調停に参加させる正しい方法は何でしょうか? CAN_ERR_LOSTARB正常な結果は、定数 fromと0以外のcollsnscan/error.hの値に対応する受信 CAN エラー フレームになります。

ソースコード

HW ノード (CAN ボードを搭載した Arduino Due)

Linux ノード

0 投票する
1 に答える
1418 参照

linux-kernel - IXXAT SocketCAN ドライバーを使用した Raspberry Pi カーネルのビルド

RPI3B+ で IXXAT USB-to-CAN v2デバイスを使用したいと考えています。問題はドライバーとカーネルにあります。RPI で動作するデバイスを作成できません。記事により、このセットアップは機能するはずです。

この記事では、 SocketCAN ドライバーをインストールする必要があると述べています。その README ファイルには、次のように記載されています。

ラズベリーパイのセクションには次のように書かれています:

そして、それは私をカーネルの構築に結びつけます。

質問:

  • カーネルをビルドする際、どのステップで IXXAT SocketCAN ドライバーを含める必要がありますか?
  • SocketCAN ドライバーからファイルをコピーして貼り付ける必要がある場所はどこですか?
  • カーネル構成も変更する必要がありますか?

can-utilsもインストールしますが、適切な SocketCAN ドライバーがないと、対象の USB-to-CAN デバイスが動作しません。

コマンドdmesg:

コマンドlsusb:

0 投票する
1 に答える
247 参照

linux - Linuxでdotnetコアソケットを使用してSocketCanにアクセスできますか?

Linux プラットフォームで dotnet コアを使用しており、CAN デバイスとの通信をセットアップしたいと考えています。SocketCan は Linux プラットフォームで利用できますが、dotnet コアの UnixDomainSocketEndPoint および Socket クラスを使用して SocketCan に直接アクセスする方法はありますか?

Linux (Debian9) 環境でこのテスト プログラムを使用して Socket のインスタンスを作成しようとすると、次のようになります。

出力は次のとおりです。

列挙型 AdressFamily、SocketType、および ProtocolType のどの値が SocketCan ソケットに一致しますか?

0 投票する
0 に答える
509 参照

c - CAN_RAW ソケットから CAN メッセージ フィルタを削除するには?

SocketCAN の説明では、ソケットにいくつかのフィルターを追加することについて述べています。

ただし、同じソケットに複数のフィルターがある場合に特定のフィルターを削除する方法については何も述べていません。誰かが私のためにこれを推測/説明してもらえますか?

(このことはどこかに書き留められていますか、それとも SocketCAN に触れる前に、まず Linux ソケットで多くの一般的な経験を積む必要がありますか?)

0 投票する
1 に答える
773 参照

linux - RAW CAN ソケットと Broadcast Manager CAN ソケットの違いとその使用方法は?

CAN プロトコルは初めてで、Linux の SocketCAN を介して利用しようとしています。ただし、利用可能な 2 つの異なる CAN ソケット、RAW とブロードキャスト マネージャー (BCM) に混乱しています。

ドキュメントには、BCM ソケットは個々の CAN フレームを送信するためのものではないと記載されています。直感的には、BCM はシングル マスターとマルチ スレーブの構成に向いていると思いますが、これはやや間違っているようです。

BCM の目的は何ですか? というか、機能面での違いは何ですか?Raw Sockets ではなく Broadcast Manager の使用を選択するのは、どのような状況ですか?