問題タブ [can-bus]

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 投票する
4 に答える
23225 参照

stm32 - STM32103 を CAN 用に構成し、ピンを PB8 および PB9 に再マッピングする方法

この段階では、STM32F103 V8T6 で CAN を使用して単純に送信しようとしています。チップは自社でカスタマイズしたボードに実装されています。回路図を見ると、CAN Tx および Rx ピンが PB9 (Tx) および PB8 (Rx) に再マッピングされていることがわかります。そうは言っても、LoopBack モードを正常に使用できました (STM "V3.5.0" の最新の例を使用) が、通常モードを機能させることができませんでした。私の初期設定に明らかな欠陥がある場合は、誰かが私に知らせてもらえますか?! 構成に関連するコードのみを含め、送信関数の呼び出しを省略しました。

ここに私の送信機能があります

このリソースは役に立ちましたが、最終的には不十分です。

STM32F103 マイクロコントローラの CAN メッセージ

ありがとう!

ダニエル

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

multithreading - 扱い方 --- データの高速送受信 --- デバイスドライバ Linux

Linux での CAN バス通信用のドライバーの実装を楽しみにしています。
デザインの提案が必要です。

Linuxにはユーザー空間とカーネル空間があります。ドライバーは、ユーザー空間のカーネル空間アプリケーションで実行されます。

1> パケットが非常に高速で受信された場合、ドライバーはこの状況をどのように管理できるでしょうか?

2> パケットを高速で送信する必要がある場合、どうすればよいですか?

3> ユーザー空間とカーネル空間の間でデータを移動する方法。これとは別に、システムコールまたは何らかの高速メカニズムを使用する必要がありますか?

4>カーネルレベルのスレッドで実行できますか? しかし、CAN バスからの TX と CAN バスからの RX に対してカーネル レベルで実行されている 2 つのスレッドがある場合、ミューテックスを使用してクリティカル セクション (つまり、内部レジスタ) を保存する必要がありますか?

5>アプリケーションからドライバーにアクセスするために共有ライブラリが使用されているとします。共有ライブラリは、システム コールを使用してドライバー機能にアクセスできますか?

正しいアプローチとは何かを完全に混乱させました。

提案してください。どんな返事でも結構です。

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

java - CAN ハードウェア受信バッファのマスク生成

CAN (Controller Area Network) を使用しており、ハードウェア バッファー スロットのマスクと ID を生成するアルゴリズムを考え出そうとしています。

例えば:

マイクロコントローラーで受け取りたい ID と、マイクロコントローラーで無視したい ID を含む 2 つの整数配列があります。

ID を表すビット数 (11 ビット) に応じて、最小マスク 0 から最大値に変更します。

そこで、0 から 7FF に移動して、受け入れたい ID のリストから 1 つ以上のメッセージを含み、受け入れたくない ID を含まないマスクを見つけようとします。

7FFまでOK、このアルゴリズムが使えます。確かにそれは最高ではありませんが、その目的を果たしました. しかし、私はもっと効率的なものを見つけようとしており、これを 29 ビットにも適用したいと考えています。0 から 7FFFFFFF に移行するには、非常に長い時間がかかります。

どんなアイデアでも大歓迎です。

PS: アルゴリズムは Java で書かれているはずです。

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

c++ - CAN入力の読み取り中にGUI要素を更新する効率/速度

このプロジェクトの前に、コントローラー エリア ネットワーク (CAN) や ValueCAN3 の経験がなかったので、メッセージの読み取りに Intrepid の例を使用しました。ただし、読み取っているアナログ信号とデジタル信号を表示する GUI の更新の効率と頻度に問題があります。

私の GUI は、アナログ チャネル用の 16 個の数値アップ/ダウン ボックスと、デジタル信号がオン (1) またはオフ (0) になると緑色に変化する 36 個のボタンで構成されています。CAN メッセージを読みながら、適切なフィードバックを表示するように GUI コントロールを更新します。ただし、プラグインされたCANジョイスティックのボタンを押すと、デジタルチャンネルはほぼ瞬時に応答しますが、アナログ信号は、信号を変化させるために使用しているストリングポットでそれほど速く更新されません. アナログ信号が応答するのに 1 ~ 2 秒かかることがあります。

現在、GUI コントロールを設定してから、GUI コントロールから値を読み取り、UDP 経由でソケット接続を介して値を別のアプリケーションに送信しています。おそらくこれを変更して、設定している GUI コントロールから読み取るのではなく、受信した信号からデータを直接送信する必要がありますが、それは問題ではないと思います。

System::Timers::Timer オブジェクトを使用して、メッセージの更新、読み取り、およびデータ パケットの送信を行っています。50hz ~ 100hz、できれば 100hz に近いレートが必要です。反対側のソケットを使用すると、パケットが頻繁に送信されていることがわかりますが、アナログ チャネルのデータはスムーズに、または頻繁に変更されません。私が間違っているかもしれないこと、またはより効率的な方法でデータを処理する方法について誰かが考えている場合は、それを述べてください.

以下は、CAN メッセージを読み取る Intrepid のコード セグメントです。

私のフォームは、次を使用して CanReader オブジェクトからのメッセージを要求します。

そのメソッドは、最後に受信したメッセージを取得します。

この GetLatestMsg() は、最新のメッセージの取得を実装する悪い方法のように思えますが、CanReader がフォームから分離されているため、これが私のプログラムにどの程度影響しているか、またはこれを行う方法が完全にはわかりません。そうでなければ、メッセージの配列を渡す必要があります。これは、最後に取得されたメッセージのみを読み取り、それまでのメッセージは読み取らないため、メッセージをスキップしているのではないかと思います。

注意すべきもう 1 つのことは、6 つの異なる PGN から読み取っていることです。アナログ信号は 4 つの PGN に対応し、2 つはデジタル信号に対応します。

アップデート

アプリケーションで遊んで、さまざまなアナログ チャンネルでストリング ポットを使用した後、一部のチャンネルが他のチャンネルよりも頻繁に更新されていることに気付きました。また、アクセスされている PGN を確認すると、いくつかのページに他のページより頻繁にアクセスしていることがわかります。

CAN デバイスは、異なる PGN に対して比較的同じレートでデータをブロードキャストしませんか? はいの場合、私の GetLatestMsg() メソッドは異なる PGN を効果的に読み取っていてはなりません。5 ミリ秒ごとに新しいメッセージを読み取ります。

さらに、異なる PGN を個別に検出するために個別の読み取りタイマーを作成する必要があるかどうかを知っている人はいますか?

明確にするために提供できる追加のコードがある場合は、お知らせください。

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

linux - Linux CAN ソケット - エラー フレームの処理

CAN送信でエラーが発生すると、システムが特定のエラー フレームを生成することを知っています。しかし、これを機能させる方法がわかりません。

CAN ソケットをセットアップしてから、データを書き込みます。

バスには何も接続されていないので、CAN_ERR_ACK が来ると思いますが、何も届きません。

PS: エラー受信が有効になっています。

どうしたの?

0 投票する
4 に答える
12095 参照

serial-communication - CANバスプロトコルの実装

CANBUSプロトコルを学び、実装したい。ソフトウェアでMSP430Launchpadを使用して、UART、SPI、I2C、およびOneWireBusプロトコルを実装しました。ここで、CANバスプロトコルについて学びたいと思います。私はmBedLPC1768CortexM3開発ボードを持っています。mBedにはCanBusLibraryがありますが、他の通信プロトコルの場合と同じように、詳細に学習できるように独自のライブラリを作成したいと思います。

そもそも適切な資料が見つからず、ネット上に散らばっているようです。利用可能な開発ボードを使用してCANバスプロトコルを作成および実装する方法を誰かがガイドできますか?

ありがとう

0 投票する
3 に答える
3500 参照

diagnostics - CAN診断

車の診断ツールと通信するスマートフォンアプリケーションを開発する必要があります。一般的に、診断に使用されるプロトコルは、KWP2000、UDS、およびOBDです。私の質問は、「車と通信する方法と、これらのプロトコルを使用する方法」です。

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

arduino - CAN バスを使用して ECU を再マッピングできますか?

このようなものを使用してArduinoをバイクECUに接続することを考えています: http://www.skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html

私はこのようなことは決してしません.CANバスを使用すると、ECUの一部の診断パラメータしか読み取れないのか、それとも一部のECUパラメータを再マッピングできるのかがわかります.

このことを理解するのを手伝ってもらえますか?

0 投票する
3 に答える
1397 参照

c++ - Linux で EG20T チップセットを搭載した Intel Atom Q7 モジュールで CAN-Bus を使用するには?

EG20T チップセットを搭載した Intel Q7 モジュールで CAN-Bus インターフェイスを使用したいと考えています。Windowsで動作するようになりましたが、Linuxで動作するようにする必要がありますが、情報はほとんど見つかりません.

メッセージの読み取り、書き込み、開始、停止、および CAN バスのボーレートの設定方法を知る必要があるだけです。

これまでのところ、http://cateee.net/lkddb/web-lkddb/PCH_CAN.html と、シェルの使用に関する can4linux と socketCan に関するいくつかのコメントを見つけまし

しかし、実際には、C または C++ プログラム内での使用方法を知る必要があります。