バイナリファイルを送信するには?


ナン男  2006-05-02 18:37:58  No: 131213

バイナリファイルの内容をCOM1につながっている端末へ送信したいのですが、
Mscomm1.Output = MyString()
のところで時間がかかっています。

テラタームでも同じようなファイル送信が出来ますが、
それと同等もしくはそれより短い時間で送信したいのですが…。
どなたかご教示お願いします。

test.bin ファイルサイズ…120kbyte

    Dim MyString() As Byte

    Open "C:\test.bin" For Binary As #1
        Do While Not EOF(1)
            MyString() = InputB(1, 1)
            MSComm1.Output = MyString()
            Do
            DoEvents
            Loop Until MSComm1.OutBufferCount = 0
        Loop
    Close #1


GOD  2006-05-02 20:09:31  No: 131214

1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
送信タイムアウト外せばさらに大きくてもいいかも。(要API)
あと、送信済みチェックはOutputする前の方が効率いいですよ。(送信中に次データを読み込めるので。)


ナン男  2006-05-02 20:18:48  No: 131215

GODさま、ありがとうございます。

> 1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
> 送信タイムアウト外せばさらに大きくてもいいかも。(要API)

すみませんが、上記2項目、
具体的にどの様に行えば良いでしょうか?
よろしければ教えてください。

> あと、送信済みチェックはOutputする前の方が効率いいですよ。(送信中に次データを読み込めるので。)

知りませんでした!良いこと聞かせていただきました。ありがとうございます。


ひろ  2006-05-02 20:49:29  No: 131216

MsCommでは5秒より長い送信時間の送信は勝手に打ち切られる
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200512/05120126.txt

という問題があるので、GODさんの提案のように細分して送ることをお勧めします。


特攻隊長まるるう  2006-05-02 21:00:36  No: 131217

MSComm については、よくまとまったサンプルや解説が
WEB上に存在するので探してみてはいかが?
(過去ログにもあるだろうけど・・・)

見つからないなら、どんな検索キーワードを使ったか?
を報告してくれれば見つかるキーワードを回答します。


GOD  2006-05-02 21:03:03  No: 131218

>> 1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
>> 送信タイムアウト外せばさらに大きくてもいいかも。(要API)
>
>すみませんが、上記2項目、
>具体的にどの様に行えば良いでしょうか?
>よろしければ教えてください。
>
上側は貴方の力で十分解決できるはず。
「秒間に何bit通信するか決めたのは私ではなく貴方ですよ。」
「今だってデータを読み込んでいるし送信もしている。」
一体、何がわからないのか?

下側は APIの使用方法がわからないなら手を出さない方が無難。
SetCommTimeouts 関数を使用すれば自分でタイムアウトを設定できる。
GetCommTimeouts 関数を使用すれば現在のタイムアウト値が取得できる。


ナン男  2006-05-02 21:43:14  No: 131219

ひろさま
特攻隊長まるるうさま
GODさま

早速のアドバイスありがとうございます。

楽をしようと少し甘えてみました。
皆様のアドバイスを元に少し苦労してみます。

(GW前にケリがつけばと思っていた次第です…)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加