質問するログイン新規登録

回答編集履歴

4

修正

2021/04/09 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Dim buf(32768) As Byte ' 一時バッファ
8
8
 
9
- '無限に待たれても困るので、タイムアウトがInfiniteTimeoutならとりあえず10秒に設定
9
+ '無限に待たれても困るので、ReadTimeoutがInfiniteTimeoutならとりあえず10秒に設定
10
10
  If st.ReadTimeout = SerialPort.InfiniteTimeout Then
11
11
  st.ReadTimeout = 10000
12
12
  End If

3

修正

2021/04/09 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,39 @@
1
- 試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
1
+ ~~試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、~~戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
2
+
3
+ BaseStreamはReadTimeoutを考慮してくれないようなので、SerialPortオブジェクトをそのまま使用した方がよいかもしれません。サンプルソースを少し弄ってみました。(デバッグはしてないです)
4
+ ```vbnet
5
+ Public Function ReadBinaryData(st As SerialPort) As Byte()
6
+
7
+ Dim buf(32768) As Byte ' 一時バッファ
8
+
9
+ '無限に待たれても困るので、タイムアウトがInfiniteTimeoutならとりあえず10秒に設定
10
+ If st.ReadTimeout = SerialPort.InfiniteTimeout Then
11
+ st.ReadTimeout = 10000
12
+ End If
13
+
14
+ Using ms As New MemoryStream()
15
+
16
+ While (True)
17
+ Try
18
+ ' シリアルポートから一時バッファに読み込む
19
+ Dim read As Integer = st.Read(buf, 0, buf.Length)
20
+
21
+ If read > 0 Then
22
+ ' 一時バッファの内容をメモリ・ストリームに書き込む
23
+ ms.Write(buf, 0, read)
24
+ Else
25
+ Exit While
26
+ End If
27
+
28
+ Catch ex As TimeoutException
29
+ 'タイムアウト処理も入れておく
30
+ Exit While
31
+ End Try
32
+ End While
33
+
34
+ ' メモリ・ストリームの内容をバイト配列に格納
35
+ Return ms.ToArray()
36
+
37
+ End Using
38
+ End Function
39
+ ```

2

修正

2021/04/09 01:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,1 @@
1
- 提示されているソースのReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
1
+ 試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。

1

修正

2021/04/09 00:10

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,1 @@
1
- 提示されているソースのReadBinaryData戻ってきたバイト配列を、File.WriteAllBytesで出力すればよいのではないでしょうか。
1
+ 提示されているソースのReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。