- 締切済み
XPでVBを使いRS232Cから5bpsでデータを出力する方法を教えて下さい。
VBの初心者です。 VBを使いRS2322Cから5bpsでデータを出力したいと思っています。 98MEにてAPIのWriteFile()を使い成功したのですが、XPへ移行したとたんNGとなってしまいました。 MSComm1.Outputを使おうかとも思ったのですが最低ボーレイト110bpsまでで使えません。 何方かXPでRS2322Cから5bpsでデータを出力する方法をご存知の方がおられれば教えて下さい。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ykkw_2001
- ベストアンサー率26% (267/1014)
>>>5bps >>ご、ごびーぴーえす!!!なんでまたそんなスピードがいるんです? >自動車のECUと通信する際にOBD2と言う規格があり、初期化要求の時に13hを5bpsで出力する必要があります。 そ、そんなことが・・・ (しばしGoogle検索中・・結果表示) あるんだ・・・ネゴシエーションで使うのか・・・ しかもISO9141国際規格ではないですかぁぁぁーー http://www5.tkcity.net/~wbb_obd2/9141negomon.html#5bau ただ、100%規格どおりではないものが、主流のようでもあります。 <ちょこっと調べただけ・・・(^^) ECUと1対1なら、5ボーのネゴなしで通信できそうな気が・・・(実践なしの空論ですけど・・) で、もとに戻って、Xpで5bps、あるいは >XPでRS232Cを使い通信を行うAPI等をご存知であれば教えて下さい。(9600bpsでもかまいません。) ですね。 9600bpsならVB+MSCommで可能です。付録のサンプルプログラムにもあるはず。 ただWriteFile()を使った既存のプログラムがあるようですので、ポートのオープンや読み書きにはCreateFile()、ReadFile()、WriteFile()、ポートの状態を取得したり設定するのにはGetCommProperties()&DCB構造体でOKのはずです。 この辺が参考になるかも http://isweb8.infoseek.co.jp/school/speana_1/vb/vb_menu.htm あ、#2imogasiさんご紹介のURLにプログラムやAPIのDeclareが出てますね。 説明ダブっちゃったみたいですんません。 では。
- terra5
- ベストアンサー率34% (574/1662)
API自体はMEでもXPでも同じだろう思いますので, APIとしては変更の必要はないと思います。 ですが、5bpsというのは通常は想定してない値でしょうから,出来る方が不思議に思えます(^^;; (RS232Cとしてもそんな速度はなかったと思う) で、実際に指定した速度が使えるかどうかは、OSというよりは、 デバイスドライバやRS232Cを制御しているチップの問題でしょう。 通常RS232Cを制御しているチップと、それで使用しているクロックの周波数により、可能なボーレートは決まってきます。 ここで対応できない速度はどうやっても使えません。 基本的にできないと考えていいと思います。 通常は,ハードウェア,ソフトウェアを自作するんでしょうね。
お礼
回答ありがとうございます。 私も何故このAPIがXPで使えないのか疑問に思いもう一度基本に返って調べる事にしました。 そもそもどんなエラーが出ていたかと言うと”問題が発生したため、VisualBasicを終了します。”といったウインドーメッセージが出力され強制終了していました。 ブレークポイントを使い確認した所、やはりrtn1 = WriteFile(hComm, wData(0), dLen, wLen, 0)の所でした。 この現象から想像するに引数の書き方を間違えて変な所をアクセスしてしまったのかと思いました。 このステートメントは”VisualBasicでエンジョイプログラミング”を参考にしたもので間違いはありませんでした。(98MEでは、問題なく動いている) しかし、本文をもう一度確認した所、構造体を使わない場合、最後の引数はByVal 0&(単なる0でも動く)と書いてありました。サンプルも”0”で書かれていました。 もしかするとXPになり条件が厳しくなったのかと思い次の様に書き換えてみました。 rtn1 = WriteFile(hComm, wData(0), dLen, wLen, ByVal 0&) その結果OKとなりました。 皆さんから5bpsに対して懐疑的なコメントが多かったですがEPSONDIRECT EDicube BB100 XP-Homeで問題なく5bpsを出力すことが出来ました。データーレコーダーで1bit200msecで出力されている事も確認しました。 もう一度調べるきっかけを与えて頂いてありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
全く門外漢ですが、下記プログラム例が目にとまりました。旧いようだが、見当はズレならお詫びします。 http://www.webgates.or.jp/~sugawara/visual6.html このプログラムを読む力がありませんが、 myDCB.baudrate = 9600の例らしいが、タイマーをセット して1秒間に5BPSに落とせないですか。
お礼
回答ありがとうございます。 ご紹介いただいた情報はActiveXを使ってRS232Cから出力する方法ですが、この場合最低ボーレートが110bpsですの残念ながら使えません。 しかし、この様なサイトがあるとは有益な情報でした。 ありがとうございます。
- ykkw_2001
- ベストアンサー率26% (267/1014)
>5bps ご、ごびーぴーえす!!!なんでまたそんなスピードがいるんです? >98MEにてAPIのWriteFile()を使い成功した これにも、びっくりですけど・・・・設定だけで本当に5bpsになっているかどうか・・・ マジで信号確認しましたか? ま、それはおいといて・・ シリアルポートに利用されているICが、対応しているかどうかが問題ですが、Xpが動作するような最近の機種では、VB+MSCommでは、絶望的だと思います。 MAXIMとかでも2400あたりが最低ラインだったと思います。 パラレルポートやゲームポートを利用して、エンコードから作りこむ方法とか、オプションのPCIボード(コンテック社、インターフェース社etc...)なら、何とかなりそうですが・・・
補足
早速の回答ありがとう御座います。 自動車のECUと通信する際にOBD2と言う規格があり、初期化要求の時に13hを5bpsで出力する必要があります。 その後は9600bpsで通信を行います。 確かに98MEにてAPIのWriteFile()を使い成功しています。 XPでRS232Cを使い通信を行うAPI等をご存知であれば教えて下さい。(9600bpsでもかまいません。)
お礼
回答ありがとうございます。 結論的には#3のterra5さんの所でも書きましたが rtn1 = WriteFile(hComm, wData(0), dLen, wLen, 0) を rtn1 = WriteFile(hComm, wData(0), dLen, wLen, ByVal 0&) と書き直してOKとなりました。構造体を使わない際の引数の条件がXPになり厳しくなったようです。 XPでも5bpsは、無事出力できました。 ご紹介いただいたURLも参考になりますね。但し内容的には”VisualBasicでエンジョイプログラミング”と同じでしたが・・・ 本当に有益な情報ありがとうございます。