問題タブ [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 投票する
2 に答える
2351 参照

embedded - LPC 1768 CAN バス オフ エラー

NXPのLPC1768 ARM Cortex M3マイクロコントローラ(データシートユーザーマニュアル)を使用しています。ユーザー マニュアルのセクション「16.5.8 CAN コントローラーのセルフテスト」に記載されているセルフ テスト モードで CAN バス ペリフェラルをテストしたいのですが、うまくいきません。

NXP ナレッジベースに記載されているこれらの NXP の例を試し、NXP のサンプル コード (can_self_test コード) を使用しました。すべてのピン構成が正常に実行され、すべての CAN バス構成と CAN バス メッセージ フレームも正常に実行されます (1 つずつ制御)。ただし、このステップの後の CAN1_Send 関数内では:

エラー フラグが設定されます。それにもかかわらず、CAN1_Send は SUCCESS を返します。

実際、このエラーステータスは「バスオフエラー」を意味します。「バス オフ エラー」は、フレーム エラーと CAN コントローラ エラーがあったことを意味します。データフレームとCANコントローラーをテストします。できます。

CAN1とCAN2の接続にはRS-232ケーブルを使用しています。セルフ テストには、CAN1 を使用します。

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

c++ - CANアダプタを使用してメッセージを受信する

Visual C++Express用のCANアダプターAPIを使用しています。APIの詳細については、同社のWebサイトを参照してください。私が使用している正しいPDFファイルについては、USB-CANmodul2ハードウェアマニュアルをクリックしてください。これは、優れたAPIを必要とするCANを使用するプログラムに役立ちます。

私のコード

添付されているのは、私が何をしているのかを説明するのに役立つ写真です。1つのコンパイラでCANブートローダーを実行していて、解析プログラムはVisualExpress上にあります。解析プログラムは、テキストファイルから読み取り、解析された情報をCANブートローダーに送信して、メモリにプログラムできるようにする必要があります。私はメッセージをうまく送ることができます。問題は、CANブートローダーがメッセージを受信すると、送信されたすべてが正しいことを他のプログラムに応答することになっていますが、APIを使用して解析プログラムでメッセージを受信する方法がわかりません。私は基本的に彼らのPDFファイルが私に言ったすべてをしました。

私は何が間違っているのですか?

デバッグモードのプログラムの写真:送信された解析プログラムからの情報、ブートローダーはそれをバッファーに入れています。ブートローダーが関数を呼び出して、エラーがないことを示すメッセージを送り返します。解析プログラムがポーリングループを通過することはないため、メッセージを受信することはありません。APIが入ってくるのと同じCANプログラムでそれらをテストしたので、ブートローダー送信機能が機能したことを知っています。うまくいけば、それは私が何をしているのかを理解するのに十分な情報です。

これらは私が問題を抱えている行です:

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

c# - スレッドから DataGridView を作成する

TEKTRONIX 020-2924-XX DPO DEMO 2 ボードから USB 経由でメッセージを送信する USB2-F-7x02 CANBus アダプタ用に Microsoft Visual C# 2010 Express でコードを書いています。

以下の CANSnifferForm.cs というコードは、CANBus API と対話する GUI を使用します。Run_Click は、アダプターがリッスンを開始する (canplus_Listen) 前にユーザーが [実行] をクリックした後、アダプターを開きます (canplus_open)。次に、コールバック スレッド (setReceiveCallBackThread) が実行され、コールバックを呼び出す setReceiveCallBack が呼び出されます。msg オブジェクトにはメッセージが含まれます。私の問題は、メッセージからこの情報を取得し、それを DataGridView (dataGridView1) に追加することにあります。

多くの可能性を検討しました。

最も明白なものは、「this.dataGridView1.Rows.Add(msg.id, msg.len, msg.timestamp);」と記述して、単純に dataGridView に行を追加することでした。コールバックで。ただし、コールバックは実際には静的ですが、dataGridView1 はそうではありません。残念ながら、 static キーワードを削除することはできません。これは、呼び出し元の関数で構文エラーが発生するためです。また、dataGridView1 を静的として宣言することはできません。これは、デザイン フォーム ファイルの初期化で構文エラーが発生するためです。

2 番目のオプションは、ファイルを開いて書き込むことでした。しかし、StreamWriter オブジェクトを宣言して使用すると、コールバックが静的に宣言されているというエラーが発生しました。そこで、コンソールに出力し、トレースを使用してファイルにリダイレクトすることにしました (Console.WriteLine は静的ではないため)。ここでトレースに関する議論を見つけました:

トレースします。

ただし、プログラムはこのファイルを解析し、スレッドの開始直後に dataGridView に出力する必要があります。これは、スレッドがファイルに書き込むときに、StreamReader オブジェクトが同時にファイルから読み取るため、データが複雑になる可能性があることを意味します。これにより、実行時にプログラムが応答しなくなりました。

そのため、最終的に静的配列を宣言し、コールバックに入力することを検討しました。配列の初期化に問題がありました。ただし、ループで解析して dataGridView に配置するには、最初に配列の大きさを知る必要があります。ループを使用して解析すると、サイズが変化します。

私はこれで忍耐力を失い始めています。だから私はスタックオーバーフローに私の質問を提示しています.

次の 3 つのコードには、問題の分析に必要なすべてが含まれている必要があります。EASYSYNC.msg は EASYSYNC.cs で宣言されています。私が行っている主なコーディングは CANSnifferForm.cs です。

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

c - STM32F4Discovery:CANフィルター構成

STM32F4Discoveryキットを使用して、単純なCANインターフェイスを構築しています。CANメッセージを送信できるように設定できましたが、受信できなくなりました。私の知る限り、CANメッセージを受信するには、受け入れフィルターを通過する必要があります。ID 0x700から0x7FFまでのすべての(標準、2.0A)メッセージを受け入れるようにフィルターを設定したいと思います。どうすればよいですか?

リファレンスマニュアルを読みましたが、実際にフィルタリングを構成する方法がわかりません。

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

arm - STM32F4Discovery:CANメッセージを受信して​​います

STM32F4DiscoveryでCANメッセージを受信する方法がわかりません。Silent_Loopbackモードになっています。つまり、送信されたすべてのメッセージはCANコントローラー自体に到着する必要があります。メッセージを送信するとTransmit_OKステータスが表示されますが、FIFOメールボックスに何も表示されません。すべてのメッセージを受信し、それらのいずれもフィルターで除外しないために、CANフィルター構成をスキップしました。私は何が間違っているのですか?

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

discovery - STM32F4 Can1 から最初のメッセージを取得して Can2 に送信する方法、Can1 と Can2 の速度が異なる

開発キット STM32f4 ディスカバリ キットがあり、Canbus インターフェイス モジュールが 2 つあります。Can1 から最初のメッセージを取得して Can2 に送信する方法、 Can1 と Can2 は速度が異なります

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

protocols - CAN通信に関する質問

私がレビューしているuCLinuxのCANドライバーを持っているので、私はこの道を歩み始めました。私は一般的にCANに慣れていないので、それについて少し調査していましたが、答えが見つからない質問に出くわしました。

CAN がシリアル インターフェイスであり、CANopenに「バス マスター」がない場合、CAN プロトコルはバス上の避けられないデータの衝突をどのように処理するのでしょうか? いつ送信できるかを管理する人がいない場合、十分なデバイスと時間が与えられた場合、衝突する送信が必要になります。

これはかなり基本的な質問なので、答えを見つけたのに理解できなかった可能性があります...誰かが答え/例を提供できれば素晴らしいでしょう。

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

c - ansiCでのSDカードの破損を回避する

私は現在、データロギング用の組み込みLinuxデバイスに取り組んでいます。LinuxデバイスはCANbusに接続され、トラフィックをSDカードに書き込みます。

SDカードが破損し、読み取り専用でマウントされることがあります。この動作は避ける必要があります。

ファイルシステムはFATです(SDカードはWindowsシステムで読み取り可能である必要があります)。

組み込みデバイスはいつでも電源障害が発生する可能性があるため、CプログラムからSDカードに安全に書き込む方法が必要です。

私は実際にはCに興味がないので、基本的に次の形式でcanmessagesをstdoutに出力する「candump」と呼ばれるプログラムに依存しています。

私のCプログラムは基本的に、candumpプログラムを開き、stdoutから読み取り、タイムスタンプを追加し、不要な文字を削除します。

上記のコードスニペットは正常に機能しますが、SDカードが破損するだけです。

解決

最終的に、標準のマウントオプションを使用してファイルシステムとしてext3を使用しました。もう問題ありません

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

android - ICS の CAN インターフェイスでビットレートを設定中にエラーが発生する

Android の i.Mx6 プロセッサでビットレートを設定しようとしています。CANコントローラーのビットレートを設定するためにiproute2ユーティリティを使用しています。ビットレートを設定するために使用されるコマンドを以下に示します。

以下のコマンドを使用して Android でビットレートを設定しようとしているときに、エラー メッセージが表示されます。

エラーメッセージは次のとおりです。

引数「ビットレート...」の代わりにガベージ。" "\"ip link help\" を試してください""

このユーティリティのソース コード内を分析およびデバッグし、Linux ユーティリティ ソースと比較しました。システムコールdlsym()でエラーが発生していることがわかりました。

この関数は、有効なアドレスを返すことを想定しています。しかし、私の場合、NULL を返します。

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

java - Android または Java 用の CAN-Bus フレームワークの検索

データを渡して完全なフレーム形式を生成できる CAN-Bus フレームワークを探しています。Androidアプリにはこれが必要です。CAN-Bus および衝突検出全体への接続などはすでに確立されています。

ブラジル