VC6.0のRS-232Cでシリアル通信をするプログラミングについて説明してあるサイトやサンプルソースがあるサイトがあったら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

はじめまして、


私もVBでつっくたモノをVCで作り直しているんですが
なかなか資料がなくて困ってます。

API関数を使う方法とMSCommクラスを使う
方法があるようですがVBからの移行なので
MSCommクラスを使ってはまっている状態です。

私が参考にしたHPは
http://www6.freeweb.ne.jp/computer/t-soga//index …

http://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/ …

です前者はシリアルとかで検索するといくつか引っかかります。こちらはAPI関数を使った回答でした
後者はMSCommクラスを使った方法が少しだけ載ってます。

シリアルの関連の本はASCIIから出ている
Windows95 通信プログラミング
定価 3398円+税
ISCN4-7561-1911-5
ぐらいしか見当たりませんでした。
この本もAPI関数を使ってます。

お互いがんばりましょう!!

参考URL:http://www6.freeweb.ne.jp/computer/t-soga//index …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシリアル通信無線化

シリアル通信の無線にはどんな方法があるのでしょうか?Bluetoothでシリアル通信くらいなのでしょうか。また、Wi-Fi(無線LAN)でシリアル通信はできるのでしょうか。私はネットワーク初心者なので、そもそもなにかを勘違いしているかもしれません。親身になってくれる方教えてください。

Aベストアンサー

なんで無線の話なのにケーブルのカテゴリなの?

QRS232Cシリアル通信について

現在VC6++でRS232Cの通信プログラムの機能の追加をしている(元は違う人が製造)のですが、一部わからない部分がありました。

RS232Cを使用して電文全てログファイル出力したいのですが、
//送信
aaa = WriteFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL);

//受信
aaa = ReadFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL);

の様に記述がしてあり、そのすぐ後ろにログファイルを出力する記述
PrintLF((CHAR *)ccc);  //PrintLF・・・引数をファイルに出力する関数

を書いています。

(1)PrintLFの引数はunsigned charではない為PrintLF((CHAR *)ccc);と記述しましたがこれでよろしいでしょうか?(文字化けなどはしない?)

(2)電文全てログファイル出力したいとなると、WriteFi・ReadFileのすぐ後にログ出力の記述(第2引数を出力)してあげればよろしいでしょうか?

(3)実際にテストが出来ない為、いいソフトはないでしょうか?

以上ですがよろしくお願いいたします。

現在VC6++でRS232Cの通信プログラムの機能の追加をしている(元は違う人が製造)のですが、一部わからない部分がありました。

RS232Cを使用して電文全てログファイル出力したいのですが、
//送信
aaa = WriteFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL);

//受信
aaa = ReadFile( bbb, (UCHAR *)ccc, ddd, &eee, NULL);

の様に記述がしてあり、そのすぐ後ろにログファイルを出力する記述
PrintLF((CHAR *)ccc);  //PrintLF・・・引数をファイルに出力する関数

を書いています。

(1)PrintLFの...続きを読む

Aベストアンサー

> (1)PrintLFの引数はunsigned charではない為PrintLF((CHAR *)ccc);と記述しましたがこれでよろしいでしょうか?(文字化けなどはしない?)

PrintLFの仕様がわからないのでどうしようもありません。

> (2)電文全てログファイル出力したいとなると、WriteFi・ReadFileのすぐ後にログ出力の記述(第2引数を出力)してあげればよろしいでしょうか?

バッファを他のスレッドと共有していないのであれば、おそらくそれで問題ないと思います。

> (3)実際にテストが出来ない為、いいソフトはないでしょうか?

どんなテストがしたいのかにもよりますが、文字ベースでよければハイパーターミナルで十分でしょう。

QopenFrameworks-複数台Arduino間のシリアル通信

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観ると,ofSerialクラスのドキュメントには
”the ofSerial class can attempt to communicate with the first available device it finds.”
とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,
という意味なのでしょうか?
また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?

プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観る...続きを読む

Aベストアンサー

>これを実行すると
>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

こちらについてだけ…

>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。

上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?

QLinuxでシリアル通信(RS232C)プログラム

Linuxでパソコンから他の機器へ文字列を送るプログラムを書きたいと思っています。
termios.h というヘッダーがあると言うことは検索して分かったのですが、それ以上に詳しいことがよく分かりません。
Linuxでシリアル通信をするC言語のプログラミングを扱っている書籍や詳しいサイトがあれば教えて頂きたく思います。

また、C言語のヘッダーは自分が勉強した本に載っているものは分かるのですが、それ以外のものはどうやって調べられているのでしょうか?
自分が求めている機能のライブラリがあるかどうかは、Googleとかで調べておられるのでしょうか?
termios.hというようなヘッダーについては、どうやって情報を集められているのでしょう?

よろしくお願い致します。

Aベストアンサー

これとか参考になるかと。
古くからあるドキュメントですが、基本的に変わってないので。
もしかすると、もっとお手軽に使えるフレームワークがQtやJavaあたりにありそうですが。

参考URL:http://www.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO.html

QPC同士、LANでシリアル通信

PC2台をストレートLANケーブルで接続し、シリアル通信することは可能でしょうか?もし可能でしたらその手順をご教授願います。
VC++でシリアル通信のアプリケーションを作成しており、その動作確認のできる環境を構築したいのです。上記の他にローコストで良い方法があればそれでも構いません。 お願いいたします。

Aベストアンサー

たぶん「シリアルポートに見えるドライバーを書けば」って話になりますね。

かつてOS/2環境に、Ethernet接続した端末間で、RS-232-C互換の仮想ポートを実現するvmodem(SIOの一部)というドライバーがありました。
シェアウェアのこれを使って、パソコン通信のホスト(Ethernet非対応)を
Internet回線上に乗っけた例があったりしました…
vmodemはOS/2のMultiple Virtual DOS Machine上でも有効だったからKTX/Vから行けた。

そのWindows向け実装の話は聞いたことないので無い気がします。
vmodemというありがちな名前はググっても埓があかないので…


同様の技術は、理論上はありえますが、パソコン通信も廃れきった今
たぶん、そういうドライバーを書く人がいないってことになりますね。

もしかしたら、業務用のシリアル通信ソフト向けに
どこかに存在する可能性はありますが、たぶん高価なのでは…

QWindowsAPIでシリアル通信プログラム(RS232C)

Windowsで、VC++やVBを使わずに普通のC言語で簡単な文字列(コマンド)を外部機器に送信するプログラムを書きたいのですが、WindowsAPIというものの存在は知っているものの全くもって触れたことがありません。
取り合えず、パソコンから外部機器に文字列を送信することが出来ればよいのですが、すぐ実装に役立つような書籍などはありませんでしょうか?
VCやVBでシリアル通信プログラムの解説をしている書籍は見つかるのですが、WindowsAPIで行っているものが見受けられません。

もし、ご存知でしたらよろしくお願い致します。

Aベストアンサー

参考URLを書いておきます。

Linuxでもシリアル通信をやりたいようですので、そんな場合、面倒くさがり屋の私はTclを使っています。(http://www.freesoftnet.co.jp/tclkits/doc/TclCmdRef/TclCmd/fconfigure_jp.htm)

参考URL:http://members.jcom.home.ne.jp/0434383301/vc10.htm

Qシリアル通信で文字バケ

picを使ってパソコンとのシリアル通信実験してるんですが、通じたり、通じなかったりで
時にはなんだか見たこともない漢字がでてきたりします。

シリアル通信は大体がアスキー文字を送っているわけでアスキーコードにない
わけのわからない漢字、記号がでてくるのはなぜなんですか?

Aベストアンサー

PICとPCとの接続方法と、PICのUSARTの設定と、PC側の使用ソフト&設定を教えて下さい。
ありそうなのは、極性が間違っているか速度が間違っていることです。

> 漢字、記号がでてくるのはなぜなんですか?
ASCII文字は最上位bitが0です。
漢字や記号(の1バイト目)は最上位bitが1です。
シリアル通信は最下位bitから順に送信します。
速度が間違っていると途中のbitを最上位bitと見間違えます。
極性が間違っているとそもそも開始地点がずれますので何が起こっても不思議はありません。

QRS232Cを用いたSCIでのシリアル通信について

PCで計算して吐き出した5~6個の数値データ(それぞれ3桁の数字で最大2バイトあれば足りる大きさです)をRS232Cを使ってSCIでマイコンに送り、マイコン側でそのデータを使って計算する、というシステムを考えています。

色々勉強してみたのですが、例えばPC側プログラムがテキストデータで吐き出した数値を読み込んで送信する場合、全てアスキーコードで送られてしまうのでしょうか?少なくともキーボード入力の値はアスキーコードで送られているようだとはわかりましたが・・・。
また、まだアルゴリズムは考えてませんが、PC側の計算プログラムから直接に数値をPC側送信プログラムに渡してあげた場合は、やはりそのままの値(例えば8なら1バイト2進法で00001000で送られるものなのでしょうか?

開発環境はC言語で、マイコンはSH2だということです。通信は今はテスト段階でハイパーターミナルを使っていますが、いずれは命令を出したときに適切な値を送信するようにしたいので、C言語で書かれたSCI通信のフリーウェアなどを使う検討もしています。
その理由はC言語プログラムの中にハイパーターミナルをどのように含めればいいのかわからなくて・・・
C言語でできたソフトなら、そのままPC側計算プログラムに組み込めばいいかなぁと思いまして・・・。(浅はか?)
この点についてもご教授頂ければ幸いです。

説明不足かもしれませんが、その場合はご指摘ください。
どうぞ、宜しくお願いいたします。

PCで計算して吐き出した5~6個の数値データ(それぞれ3桁の数字で最大2バイトあれば足りる大きさです)をRS232Cを使ってSCIでマイコンに送り、マイコン側でそのデータを使って計算する、というシステムを考えています。

色々勉強してみたのですが、例えばPC側プログラムがテキストデータで吐き出した数値を読み込んで送信する場合、全てアスキーコードで送られてしまうのでしょうか?少なくともキーボード入力の値はアスキーコードで送られているようだとはわかりましたが・・・。
また、まだアルゴリズムは考...続きを読む

Aベストアンサー

1.データの形式
文字列としても二進法としても送ることができます.

PC側がテキストとして数値を投げた場合には, 文字として数値が渡されること
になります. 送信側で数値→文字列の変換, 受信側で文字列→数値の変換が必
要となります. これをアスキー形式といいます. データは"8" などと, そ
のまま数字の文字列で送信されます.

一方, PC側が数値をテキスト化しないで送った場合には, 2進数のビット列が
そのまま送信されます. これをバイナリ形式といいます. 8なら. '00001000'
などとなります.

アスキー形式は1桁1文字(=8bit)で数値を表すので, データ量が多くなりがち
である欠点があります. 逆に, バイナリ形式はデータの開始, 終了をどのように
表すかという点で工夫が必要です. (考えてみてください)

どちらも一長一短ではありますが, 質問の件のようなそれほどデータ量の
多くないシステムであれば, アスキー形式にしておけば楽でよいかもしれません.


2.ターミナル?
C言語とおっしゃるのが, PC側のアプリケーションの話なのかSH2側の組み込み
アプリのことなのかよくわかりませんが, PC側のことであれば, COMポート
(RS232) を使ってデータの送受信を行うライブラリなどがありますから,
そういったものを利用します. ハイパーターミナルはあまり関係ありません.

フリーウェアの件ですが, それはソースコードが公開されているという意味
ですよね? 単にアプリケーションを拾ってきただけだと「組み込む」のは
ムズカシイと思いますが・・・


※ところで, SCIってのは"H8やSH2のシリアル通信機能"の名前ですよね.
一般的な言い方をするなら単にシリアル通信とか, RS232とか, UARTなんて
呼び方の方がいいかもしれません.
SCIって検索かけてもパソコン上で役に立ちそうな話はでてこないのではないですか.

1.データの形式
文字列としても二進法としても送ることができます.

PC側がテキストとして数値を投げた場合には, 文字として数値が渡されること
になります. 送信側で数値→文字列の変換, 受信側で文字列→数値の変換が必
要となります. これをアスキー形式といいます. データは"8" などと, そ
のまま数字の文字列で送信されます.

一方, PC側が数値をテキスト化しないで送った場合には, 2進数のビット列が
そのまま送信されます. これをバイナリ形式といいます. 8なら. '00001000'
などとなります.

ア...続きを読む

Qシリアル通信の電圧変換

シリアル通信に関する質問です。

出力が3.3Vのマイコンから入力電圧が5V必要なサーボコントローラの間で、シリアル通信をしたいのですが、どうやったらいいのでしょうか?

信号の方向は、

マイコン(3.3V)→サーボコントローラ(5V)です。

昇圧回路?とかを通すのでしょうか?その辺はよくわかってませんが。。

Aベストアンサー

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器間の距離がかなり短い場合を除いて、この方法はお勧めしません。なぜかといいますと、論理ICの電流ドライブ能力が低く、数mものばすとコードの抵抗によって通信ができなかったり、誤動作したりするからです。
 こうした場合にはやはりある程度の電圧振幅と電流ドライブ能力のあるRS-232CのインターフェースICが適しています。これをマイコン側に使えば、サーボコントローラ側はRS-32Cの端子に接続するだけで、余分な加工が要りません。
NO1のURLにあげているような
+3V to +5.5V RS-232 Transceivers
となっているICがいいでしょう。やや入手性に問題がある製品もありますので入手しやすいものをお使いください。

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器...続きを読む

QVC++でのRS232C通信をサポートしてくれるソフトは?

VC++6.0を仕事で使うことになったのですが、
VC++でのRS232C通信をサポートしてくれるソフトがあれば教えてください。

VBAのEasyCommのようなソフトはあるのでしょうか?

Aベストアンサー

VBAから使えるもの(COMオブジェクト)は、VC++からも使えるので、EasyComm(どんなものなのか私はしりませんが)を使いたいなら、それを使えばいいと思います。
#import "~.dll"
とかしておけば、何が起こっているか深く知らないでも、まあ、なんとなく直感的に使えます。

たとえば、こんなのとか参考になりますか。
http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/Introduction/UseVC.htm
http://www.ujasiri.com/prglib/vc/excel/import/xls_imp_coapp_exp.html


人気Q&Aランキング

おすすめ情報