シリアル通信(CAN)の送受信不正

[戻る]
リサリサ 2015/08/26(水) 15:46:45
初めして、シリアル通信(CAN)で
1、データが受信できない場合
2、送受信の順序が乱れる
現状が発生します。

PCと対向機器Aと下記リンクのデバイスを繋ぎ、通信ライン上をバスアナライザでウォッ
チしています。

具体的には、
http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=apgdt002
を利用し通信しており、
リンク先のCAN BUS Analyzer Install v2.0をインストールするとCAN BUS Analyzerとい
うツールの
ソースコードが展開され、それを参考にVC++2008 MFC環境で実装しました。

制御方法は、まず、
USBのハンドル取得を行いました。

そして、Threadを起動し、Thread内で、
WinUsb_WritePipe()
WinUsb_ReadPipe()
を交互にコールしています。

このAPIはWinUsb_WritePipeしても送信されず、
WinUsb_WritePipeして、WinUsb_ReadPipeすると送信されます。
そして、WinUsb_ReadPipeにてリードしたバッファに、送信,受信の識別子があり、
それで送信,受信を判定します。

受信識別子が読めると、バッファをチェックし所望のデータなら、
WinUsb_WritePipeにて送信データを書き込む。。を繰り返しています。

1、が発生する場合は、バスアナライザ上では、所望の受信データが見えるのですが、
 WinUsb_ReadPipeしてたとき、受信識別子がないときがあります。
 
2、が発生する場合は、上記制御しているにも関わらす、送信識別子が連続して読めま
す。
 バスアナライザ上も、連続で送信されています。

文章だけだと分かり辛いかもしれませんが、
アドバイスいただけらうれしいです。

気になる現象として、WinDDK(7600,16385,1)をインストール後から、
CFileDialogでopenするとハンドル例外が発生するようになり、以下の対処を行いまし
た。
環境の問題でしょうか。。
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+201205/12050011.txt

どうぞ、よろしくお願いいたします。


----- 環境 -----
Windows7 Professional 32bit SP1
Visual Studio 2008
WinDDK(7600,16385,1)
  ->http://www.devdrv.co.jp/windows/を参考にインストール
----------------

リサリサ 2015/08/26(水) 16:07:47
これだけじゃ、アドバイスしようがありませんよね。。

ソースコードを貼らせていただきます。
(準備中です。。)

ITO 2015/08/26(水) 19:19:05
マイクロチップジャパンに問い合わせてみるといいと思います。
意外と親切です。

リサリサ 2015/08/27(木) 09:11:55
ITOさん

コメントどうもありがとうございます。

問い合わせ中ですが、こちらの質問の仕方が良くないのか、
なかなか回答をもらえない状況です。

マイクロチップジャパン様はそちらの環境(プログラムのミスも含めて)の
問題では?
などと思われているのでしょうか。。

こちらの環境の問題、例えば.netのバージョンが問題とか、
プログラムの問題が本当にないか等、確認したく
このサイトに投稿した次第です。

非常に困っています。。

ITO 2015/08/27(木) 19:13:51
うーーん、
 そもそも、CAN BUS Analyzer をインストールするのにWinDDK(7600,16385,1)を
インストールして、ソフトをコンパイルしなければいけないのかわからないですね。
会社にもUSBアナライザーがありますが、スタンドアロンで動きますね。

ITO 2015/08/27(木) 19:31:53
DDKは、winxpのときのものですね。
今は、WDKですね。最新バ-ジョンはver8.1ですが、
VC++2008なのでver7.XXあたりでしょうか?
Readmeに、
provided in the Windows Driver Kit (WDK) version 7.0.0 (7600.16385.0).
ってありますね。
WDK 7.00にインストールし直したほうがいいですね。
VC++2008が対応しているか調べたほうがいいですね。

netのバージョンは、「dotnetfx2_0.exe」があるので、Ver2.0以上でしょうね。
windows7インストール時のでいいと思います。

うーーん、そもそも netのバージョンがver2.0とは開発環境はどうなんでしょうね?

ITO 2015/08/27(木) 19:33:35
追記です。
>最新バ-ジョンはver8.1ですが
現状は調べてないです。

リサリサ 2015/08/27(木) 20:07:01
ITOさん

コメントありがとうございます!

分かりにくくてごめんなさい。

前述のリンク先から、
Microchip CAN BUS Analyzer v2.0 Installer.zip
をダウンロードし、解凍します。すると、
Microchip CAN BUS Analyzer v2.0 Installer/Dotnet
Microchip CAN BUS Analyzer v2.0 Installer/Driver
Microchip CAN BUS Analyzer v2.0 Installer/Microchip CAN BUS Analyzer v2.0 Instal
ler.exe
ができます。
そして、上記Driverをインストールし、Microchip CAN BUS Analyzer v2.0 Installer.ex
e
を実行します。

CAN BUS Analyzer を使うだけならこれでOKなんです。


CAN BUS Analyzer をインストールすると、以下にソースファイル等が展開されます。
C:\Program Files (x86)\Microchip Technology Inc\CAN BUS Analyzer v2.0\SourceCode
\PC Application

そのソースをビルドしようとすると、
1>c:\xxxx\work\sourcecode\pc application\Form1.h(80) : fatal error C1083: includ
e ファイルを開けません。'Winusb.h': No such file or directory
とエラーが出るため、
VC++2008の
構成プロパティー->C/C++->追加のインクルードディレクトリに
C:\WinDDK\7600.16385.1\inc\api
C:\WinDDK\7600.16385.1\inc\ddk
を追加しました。

>会社にもUSBアナライザーがありますが、スタンドアロンで動きますね。
すみません、どういう意味でしょうか。
ごめんなさい。


どうぞよろしくお願いいたします。

ITO 2015/08/27(木) 21:48:37
>すみません、どういう意味でしょうか。


>CAN BUS Analyzer を使うだけならこれでOKなんです。
これで疑問が解けました。
CAN BUS Analyzerとして使う場合もコンパイルしないといけないかと思っていました。


> VC++2008の
> 構成プロパティー->C/C++->追加のインクルードディレクトリに
> C:\WinDDK\7600.16385.1\inc\api
> C:\WinDDK\7600.16385.1\inc\ddk
> を追加しました。
これでコンパイラーは通りましたか?

>Microchip CAN BUS Analyzer v2.0 Installer.zip
を解凍すると、「Driver」の中の「readme.txt」に
>provided in the Windows Driver Kit (WDK) version 7.0.0 (7600.16385.0).
とあります。
WinDDK(7600,16385,1)でなく
Windows Driver Kit (WDK) version 7.0.0 (7600.16385.0).
をインストールしなければいけなかったのではないでしょうか?

ITO 2015/08/27(木) 21:51:33
修正です。
誤 これでコンパイラーは通りましたか?

正 コンパイルのエラーはなくなりましたか?

リサリサ 2015/08/28(金) 10:00:50
ITOさんおはようございます。

>これでコンパイラーは通りましたか?
すみません、情報不足でした。
"'_In_' : 定義されていない識別子です。"
など大量のエラーが出たため、対処方法をWebで検索し、
追加のインクルードディレクトリに
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
C:\WinDDK\7600.16385.1\inc\api
C:\WinDDK\7600.16385.1\inc\ddk
を追加しました。
するとビルドは通りました。

>Windows Driver Kit (WDK) version 7.0.0 (7600.16385.0).
そうですね、試してみます。


ご回答ありがとうございます、感謝いたします!

リサリサ 2015/08/28(金) 20:55:39
ITOさん
お世話になります。

WDK7.0.0を探してインストールし、
追加のインクルードディレクトリに
C:\WinDDK\7600.16385.0\inc\api
C:\WinDDK\7600.16385.0\inc\ddk
を設定し試しましたが、

2、送受信の順序が乱れる

は、発生してしまいました。
1、データが受信できない場合
は未確認です。

残念です。。

ITO 2015/08/29(土) 12:41:51
う--ん、
あとは、
  相手との通信手順の不具合かな?
と思います。
 相手に機器担当とデバッグしてみたらどうでしょうか?

ITO 2015/08/29(土) 19:03:24
失礼しました、
 相手の機器担当とデバッグしてみたらどうでしょうか?
ですね。

ITO 2015/09/08(火) 13:17:44
うーーん
どんな様子ですか?

ドライバー部分は、ビルドしたあるのを使うわけにはいけないですか?
あと、いまいち、コンパイルして使わないといけないか分からないです。

CAN I/Fの代わりに使うのですか?

ITO 2015/09/08(火) 13:18:45
失礼しました
 ドライバー部分は、ビルドしてあるのを使うわけにはいけないですか?
ですね。

リサリサ 2015/09/09(水) 16:50:33
ITOさん、こんにちは。

進展なしです。。
うまくいくときもあるので騙し騙し使っています。


>ドライバー部分は、ビルドしてあるのを使うわけにはいけないですか?
ドライバー部分とは、どの部分のことになるのでしょうか?
ごめんなさい、教えてください。。

>あと、いまいち、コンパイルして使わないといけないか分からないです。
えっと、CAN BUS Analyzerをインストールして使うだけなら
コンパイルは不要で、、何をコンパイルする話でしょうか。。
こちらも、理解できなくてごめんなさい。

ご回答お待ちしております。


どうぞ、よろしくお願いいたします。

ITO 2015/09/10(木) 10:12:13
>ドライバー部分とは、どの部分のことになるのでしょうか?
APIを作るために、WDK7.0.0が必要なんですね。

>何をコンパイルする話でしょうか。。
 >そのソースをビルドしようとすると
  この目的がいまいち?
  PC側のCAN BUS I/Fがないのでその代わりに使うのかと思いましたが.......?

リサリサ 2015/09/10(木) 17:22:51
ITOさん、こんにちは。
(この件でお手数をお掛けしています。)

>APIを作るために、WDK7.0.0が必要なんですね。
作るというか、winusb.hとwinusb.libはWDK7.0.0にしか
ないため必要です。

>この目的がいまいち?
すみません、目的は
ビルドしてみたら、、、程度です。
CAN BUS Analyzerのプロジェクトを参考に
これはおそらく(.netのVC++で作られています。)
VC++ MFCで作りたかったんです。
いずれにしても、
WDK7.0.0が開発環境に必要です。
と言いたかったんです。
すみません。。

どうぞ、よろしくお願いいたします。

ITO 2015/09/11(金) 20:18:58
USBの通信の不具合は、USBアナライザ-等を使いじっくり見ないと分からないと思います
。
>ビルドしてみたら、、、程度です。
でたら、勉強も兼ねてみてみるのもありだと思います。

ITO 2015/09/12(土) 11:31:36
修正・補足です。
>ビルドしてみたら、、、程度です。
でしたら、勉強も兼ねてみてみるのもありだと思います。
せっかく、WDKインストールしたのですから、付属のデバッカー・ユ−ティリティ等
を使ってみるのもいいと思います。
パソコンは自分のを使った方がいいと思います。手違いでブル−スクリ−ンになる場合が
あります。

古いスレッドには追加発言できません。