初めして、シリアル通信(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/を参考にインストール
----------------
これだけじゃ、アドバイスしようがありませんよね。。
ソースコードを貼らせていただきます。
(準備中です。。)
マイクロチップジャパンに問い合わせてみるといいと思います。
意外と親切です。
ITOさん
コメントどうもありがとうございます。
問い合わせ中ですが、こちらの質問の仕方が良くないのか、
なかなか回答をもらえない状況です。
マイクロチップジャパン様はそちらの環境(プログラムのミスも含めて)の
問題では?
などと思われているのでしょうか。。
こちらの環境の問題、例えば.netのバージョンが問題とか、
プログラムの問題が本当にないか等、確認したく
このサイトに投稿した次第です。
非常に困っています。。
うーーん、
そもそも、CAN BUS Analyzer をインストールするのにWinDDK(7600,16385,1)を
インストールして、ソフトをコンパイルしなければいけないのかわからないですね。
会社にもUSBアナライザーがありますが、スタンドアロンで動きますね。
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とは開発環境はどうなんでしょうね?
追記です。
>最新バ-ジョンはver8.1ですが
現状は調べてないです。
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アナライザーがありますが、スタンドアロンで動きますね。
すみません、どういう意味でしょうか。
ごめんなさい。
どうぞよろしくお願いいたします。
>すみません、どういう意味でしょうか。
>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さんおはようございます。
>これでコンパイラーは通りましたか?
すみません、情報不足でした。
'_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).
そうですね、試してみます。
ご回答ありがとうございます、感謝いたします!
ITOさん
お世話になります。
WDK7.0.0を探してインストールし、
追加のインクルードディレクトリに
C:\WinDDK\7600.16385.0\inc\api
C:\WinDDK\7600.16385.0\inc\ddk
を設定し試しましたが、
2、送受信の順序が乱れる
は、発生してしまいました。
1、データが受信できない場合
は未確認です。
残念です。。
う--ん、
あとは、
相手との通信手順の不具合かな?
と思います。
相手に機器担当とデバッグしてみたらどうでしょうか?
失礼しました、
相手の機器担当とデバッグしてみたらどうでしょうか?
ですね。
うーーん
どんな様子ですか?
ドライバー部分は、ビルドしたあるのを使うわけにはいけないですか?
あと、いまいち、コンパイルして使わないといけないか分からないです。
CAN I/Fの代わりに使うのですか?