バイナリファイルの内容を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
1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
送信タイムアウト外せばさらに大きくてもいいかも。(要API)
あと、送信済みチェックはOutputする前の方が効率いいですよ。(送信中に次データを読み込めるので。)
GODさま、ありがとうございます。
> 1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
> 送信タイムアウト外せばさらに大きくてもいいかも。(要API)
すみませんが、上記2項目、
具体的にどの様に行えば良いでしょうか?
よろしければ教えてください。
> あと、送信済みチェックはOutputする前の方が効率いいですよ。(送信中に次データを読み込めるので。)
知りませんでした!良いこと聞かせていただきました。ありがとうございます。
MsCommでは5秒より長い送信時間の送信は勝手に打ち切られる
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200512/05120126.txt
という問題があるので、GODさんの提案のように細分して送ることをお勧めします。
MSComm については、よくまとまったサンプルや解説が
WEB上に存在するので探してみてはいかが?
(過去ログにもあるだろうけど・・・)
見つからないなら、どんな検索キーワードを使ったか?
を報告してくれれば見つかるキーワードを回答します。
>> 1Byteずつではなく、一度にたくさん(1〜2秒分ぐらいの容量)読込&送信するようにして下さい。
>> 送信タイムアウト外せばさらに大きくてもいいかも。(要API)
>
>すみませんが、上記2項目、
>具体的にどの様に行えば良いでしょうか?
>よろしければ教えてください。
>
上側は貴方の力で十分解決できるはず。
「秒間に何bit通信するか決めたのは私ではなく貴方ですよ。」
「今だってデータを読み込んでいるし送信もしている。」
一体、何がわからないのか?
下側は APIの使用方法がわからないなら手を出さない方が無難。
SetCommTimeouts 関数を使用すれば自分でタイムアウトを設定できる。
GetCommTimeouts 関数を使用すれば現在のタイムアウト値が取得できる。
ひろさま
特攻隊長まるるうさま
GODさま
早速のアドバイスありがとうございます。
楽をしようと少し甘えてみました。
皆様のアドバイスを元に少し苦労してみます。
(GW前にケリがつけばと思っていた次第です…)
ツイート | ![]() |