• ベストアンサー

シリアル(RS232C)通信でファイル送信をするには

現在、VB6.0を使用してシリアル通信の処理をしておりますが、 任意のファイルを相手側に送信をしたいと思いますがどの様に 処理をしたらいいいのか判らないので教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>どの様に処理をしたらいいいのか判らないので 1.送信側でファイルを選択、  →受信側にファイル名を通知(サイズもいる?) 2.送信側でファイルを読み込み、受信側に送信。  →受信側でファイルに書き出し   必要であれば、「n番目の送信」「送信サイズ」「チェックサム」等も付加する。 3.ファイルの終端まで2.を繰り返し。 基本的なやり方はどの通信方法でも一緒。

Simanohito
質問者

お礼

ご回答ありがとうございました。 上記方法で出来る事が出来ました。

その他の回答 (1)

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.2

■要求  任意のファイルを相手側に送信をしたい  ■システム構成の検討  ファイルを送信するためにはファイルを送信するソフトとファイルを受信するソフトが必要です。  ファイルを受信するソフトがハイパーターミナル,TeraTermなどの汎用端末ソフトにするのか,オリジナルのソフトかによって大きく構成が変わります。  もし相手がハイパーターミナル,TeraTermなどの汎用端末ソフトでファイルを送信するプログラムを作る場合はバイナリ転送プロトコル「XMODEM」「YMODEM」「ZMODEM」などを1つ実装すれば目的を果たせると考えます。  参考サイト http://www.st.rim.or.jp/~phinloda/proto2.html  送受信ともにオリジナルソフトであれば,かなり手抜きしても作成出来ます。  ファイル送信側のソフトでは単純に「ファイル名」と「ファイルサイズ」,「ファイルバイナリ」を順番に送信します。  ファイル受信側のソフトでは「ファイル名」と「ファイルサイズ」を受信してファイルを生成し,ファイルサイズ分の「ファイルバイナリ」を受信しそれをファイルに書き込むことでファイル転送完了となります。  最初はこれくらいでいいと思いますが,シリアル通信の品質が悪い場合を考えると受信側のエラー検出や再送手順などを検討する必要があります。

関連するQ&A

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • シリアル通信について

    現在、VB6.0を使用してシリアル通信のプログラムを作成しております。 その中で、通信先に対してバッチファイルを実行させてたいのですが、 通信先に対してバッチファイルを実行させる方法がわかりません。 どのようにするのか教えて頂けないでしょうか。 また、実行するバッチファイルでは引数を渡す必要があるようなのですが その方法も教えて下さい。 よろしくお願い致します。

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

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

  • RS232C通信(PC⇔PLC)

    PCとPLCでシリアル通信を行っています。PLCからPCへステータス受信要求し、PCから正常アンサーがあればPLCからPCへ処理開始指令コマンドが出力されるというプロトコルです。実際には、PC側ステータス正常の場合、PLCへの正常アンサーを出力するところまでは行くのですが、その直後にPLCから送信されているはずの処理開始指令コマンドを受信することができません。一連のコマンド送信・受信の間隔が狭すぎるのかと思い、PLC側で処理開始指令コマンド送信前に10msecのウェイトを設けるとPC側で受信することができました。(PLC側の送信が悪いのか、PC側の受信に問題があるのか不明ですが、、、) シリアル通信では、上記のような問題が発生しないように送受信の間隔等なんらかの規約が定められているのでしょうか??ウェイトを設けることなく通信を行いたいのですが、考えられる対処法を教えていただけませんでしょうか。よろしくお願い致します。 なお、通信機器の仕様は以下の通りです。 PLC:三菱シリアルコミニケーションユニット QJ71C24N-R2 PC:WinXpSP2、COMポート、VisualBASIC6.0のCommイベントによりデータ受信(10msecウェイトなしでは、処理開始指令コマンド送信時にCommイベントが発生しませんでした。) ※アスキー文字、PLC・PCともに送信終了コード(CR+LF)でバッファデータ読込み

  • シリアル通信について

    VB6にてシリアル通信プログラムを作成しましたが、データが受信できません。 ハイパーターミナルなら受信できて、一度ハイパーターミナルを使用すると、作成したプログラムでもデータが受信できるようになります。(再起動するとまたハイパーターミナルを使用するまで受信できません) 自作プログラムでなにか処理がたりないのでしょうか?

  • WIN XP ハイパーターミナルでRS232C送信について 

    パソコンWIN XPからハイパーターミナルを使用してRs232C通信、送信相手はPLC(シーケンサ)を行おうと試みていますが、送信動作をすると”無効なメッセージ形式”と出て送信出来ません。 送信ファイルはメモ帳で作成しテキスト、ASCIIコード等色々な文字を記入して試みていますが、駄目です。 パソコンにはCOMポートが無いので、USBをシリアル変換ケーブルを使用して通信しています。 RS232Cの配線(クロス)、通信設定、COMポート選択に間違いが無いかも確認していますが、問題ないと思っています。 USBシリアル変換ケーブルが原因かとも思いますが、”無効なメッセージ形式”なので、送信するデータ形式に問題があるのではと考えていますが、正しくはどの様な形式のものをファイルの送信にすれば宜しいでしょうか。またファイルの送信設定で、色々なプロトコル選択があります。どれを選べば宜しいでしょうか。 通信ポートの設定は9600,N,8,1です。 ご回答、宜しくお願い致します。

  • VBでのシリアル通信

    VB6 Professional Virsionを使用しています。 RS232Cでシリアル通信をしたいのですが、どうすればいいのでしょうか。ヒントを教えてください。

  • C++Builder6.0でのシリアル通信

    つい先日より、C++Borland6.0を用いて、シリアル通信で外部機器とのやりとりを行なえるものを作成することになりました。 これまで、VBでのシリアル通信は行なったことがあるのですが…同様に考えていたのですがC言語が初心者なためまったくと言っていいほど今回のものはわかりません。 そこで、色々なサイトを探した結果、文字数&送信文字を限定すれば送信でき、受信バイト数を限定すればできるものが出来上がりました。(サイトのものをほぼそのまま活用している感じですけど) しかし、 1、ボタン1を押すと「Edit1に書かれているものに<CR><LF>を加えたものを送信したい」 2、ボタン2を押すと「Edit2に書かれているものに<CR><LF>を加えたものを送信したい」(1と2は、送信バイト数が違うため、送信バイト数で引っかかる) 3、「受信文字数は、受信バイト数を指定ではなく全てを受信したい」 4、「受信したものを<CR><LF>で分けたい」 などになるとさっぱりできません。 「?Ver<CR><LF>」と送ると「*.**<CR><LF>」と外部機器から返ってきて、 「?PARAMETER<CR><LF>」と送ると「PARAMETER 1=***<CR><LF>PARAMETER 2=***<CR><LF>PARAMETER 3=***<CR><LF>OK<LF>」と外部機器から返ってくるとします。 現在のソースは回答1,2に書きます。ボタン1を押すと送信され、受信されたものをメモに加えられるというものになっています。 これを、上に書かれているような4つの機能を加えたものにしたいのですが…。 (?PARAMETERに関しては送信文字数が合わずにできなかったため、ソースに記入しておりません。また、通信設定に関しては省略しております) ご教授くださる方おりましたらよろしくお願いします。

  • C++でシリアル通信

    現在、私は「RFIDによる図書管理システム」という題材の下、卒業研究を行っています。 卒研室で購入したRFIDのリーダー/ライター(以下、リーダー)は、RS232C接続のものでした。USBタイプのものがあるのは、購入した後分かりました。 「RS232C接続のリーダーから、タグのデータを読み取り、それをブラウザに送信する」というアプリケーションをC++(MFC)で作成している途中です。さらに詳細を述べると、アプリケーションの「リード」ボタンをクリックすると、リーダーへリード命令(バイナリコード)を送信し、リーダーからのレスポンスをブラウザに送信するという処理を、一括して行う予定です。 何故、ブラウザに送信するかというと、例えば図書管理システムの「検索」メニューの処理の場合、「リーダから読み込んだデータをブラウザに送信し、あらかじめ作成しているデータベースと目的の書籍を照会し、書籍の詳細をブラウザに表示させる」という処理を実現させるためです。 いかんせん、MFC初心者なので、シリアル通信のことに関しての知識がほとんどありません。 Webで調べてみたのですが、力及ばず、RS232Cと通信ができる関数等が見つかりませんでした。 どなたか、アドバイス宜しく御願いします。 最後になりましたが、開発環境は WindowsXP、Visual C++ です。

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

専門家に質問してみよう