以前、ハンディターミナル側から送受信を行う関数等の記事を掲載してきましたが、 ハンディターミナルの相手側としてのパソコン側のプログラムが必要になります。
パソコン側のファイル送受信用のツールがDLLの形でDENSOさんの方から提供されています。 以下の所にDENSOのURLを貼っておきますので、そちらを参照下さい。
・BHT-BASIC4.0転送ユーティリティ
このユーティリティを購入して、送受信を行うパソコンにライセンス登録が必要です。 プログラムのインストールなどは無く、必要なDLL等を実行プログラムのフォルダに登録します。 この辺りのことは購入後、取説をDENSOからダウンロードし確認してみて下さい。
■VB.NETプログラムの場合の必要なDLL
VB.NETのプログラムの実行フォルダ内に以下のDLL等が必要です。
・Bhtprtdm.dll -- BHT-BASIC4.0 転送ユーティリティライブラリ
・Bhtprt.ini -- BHT-BASIC4.0 転送ユーティリティライブラリ設定
・Ymodem_pd.dll -- YMODEMプロトコルライブラリ
・BHTIr_pd.dll -- BHT-Irプロトコルライブラリ
実際の転送処理で呼出すのはBhtprtdm.dllで、その中の送受信関数(ExecProtocol)を呼出して処理をさせます。
Declare Function ExecProtocol Lib "Bhtprtdm.dll" (_
ByVal hWnd As IntPtr, _
ByVal Param As String, _
ByVal FileName As System.Text.StringBuilder, _
ByVal Protocol As Integer) As Integer
[引数]
hWnd :DLLを呼び出すウィンドウハンドルを設定
Param :ファイル転送の動作を制御するオプションの文字列
(1つのファイル名と複数のオプションをスペースで区切った文字列)
FileName:転送したパス名/ファイル名を格納
Protocol:プロトコル番号を指定
[戻り値]
Integer型の値で、0(Er_NOERROR)はエラー無しで、
0以外は伝送エラー在り
(エラー内容はDENSO提供のBASICソースを参照)
上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
■オプションの文字列
オプション | 内容 | デフォルト |
【伝送速度】
+B
|
"+B9600" 9600 bps
"+B19200" 19200 bps
"+B38400" 38400 bps
"+B57600" 57600 bps
"+B115200" 115200 bps
"+B230400" 230400 bps
"+B460800" 460800 bps
|
YMODEM時
"+B115200"
BHT-Ir時
"+B9600"
|
【通信ポート】
+Pn
|
+Pn (n = 1 ~ 99)
|
"+P1" |
【ファイルフィールド】
+Fn
+F
-F
|
[+Fn]の場合:"+Fa,b,c..."
a:フィールド1桁数
b:フィールド2桁数
c:フィールド3桁数
...
[+F]の場合:既存フィールドファイルによる
(YMODEMのみ)
※受信の場合はフィールドファイルを受信しない
[-F]の場合:フィールド指定なし(YMODEMのみ)
|
|
【伝送方向】
+R
-R
|
"+R" ファイル受信
"-R" ファイル送信
|
"-R" |
【追加書込】
+A
-A
|
"+A" 既存データファイルに追加書込み
"-A" 追加書き込みしない
|
"-A" |
【CR-LFの扱い】
+C
-C
|
"+C" CR-LFをデータとする
"-C" CR-LFをレコードの区切り
|
"-C" |
オプション文字列の一般的な例としては以下の様になります。
送信の場合:"TEST.DAT +P5 +F16,12 -R"
受信の場合:"TEST.DAT +P5 +F16,12 +R"
この場合、YMODEMでの伝送を想定していて、 通信ポートはパソコンにUSB-COMポートをインストールした時に
COM5 になったので"P5"としています。
また、フィールド指定は以下の記事のデータファイルを使っています。
・BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
■VB.NETの送受信テストプログラム
上記のオプション例を使った簡単なVB.NETのテストプログラムを以下に示します。
Module Module1
Declare Function ExecProtocol Lib "Bhtprtdm.dll" ( _
ByVal hWnd As IntPtr, _
ByVal Param As String, _
ByVal TransferFileName As System.Text.StringBuilder, _
ByVal ProtocolType As Integer) As Integer
End Module
Public Class Form1
'送信処理ボタン
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Const PRTCL_YMODEMBATCH As Short = 2
Dim iRet As Integer
Dim strFile As System.Text.StringBuilder = New System.Text.StringBuilder
Dim strOption As String
'オプションの編集
strOption = "TEST.DAT +P5 +F16,12 -R" '"-R"送信
'ファイル転送
iRet = ExecProtocol(Me.Handle, strOption, strFile, PRTCL_YMODEMBATCH)
'戻り値のチェック
If iRet <> 0 Then
MsgBox("Err Code = " & iRet.ToString() & " : File[" & strFile.ToString() & "]")
Else
MsgBox("送信OK...File[" & strFile.ToString() & "]")
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'受信処理ボタン
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
Const PRTCL_YMODEMBATCH As Short = 2
Dim iRet As Integer
Dim strFile As System.Text.StringBuilder = New System.Text.StringBuilder
Dim strOption As String
'オプションの編集
strOption = "TEST.DAT +P5 +R" '"+R"受信
'ファイル転送
iRet = ExecProtocol(Me.Handle, strOption, strFile, PRTCL_YMODEMBATCH)
'戻り値のチェック
If iRet <> 0 Then
MsgBox("Err Code = " & iRet.ToString() & " : File[" & strFile.ToString() & "]")
Else
MsgBox("受信OK...File[" & strFile.ToString() & "]")
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
フォームの画面表示は以下の感じです。 送信ボタンと受信ボタンをフォームに配置しそれぞれのボタンクリックで送受信処理を行っているだけです。 受信時のオプションはフィールド指定が無い違いがあります。
■BHT-BASICの送受信テストプログラム(ハンディ側)
ハンディターミナル側の簡単な受信・送信テストプログラムを以下に示します。
'---------------------------------------
'ファイル送信
'---------------------------------------
'Function GfSndFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$)
'引 数:
' pintFp% :ファイル番号
' pstrSpeed$ :送信スピード
' pstrFile$ :送信ファイル名
' pstrOption$ :送信オプション
'戻り値:
' GfSndFile% :送信OK(GcTrue%)NG(GcFalse%)
'---------------------------------------
Function GfSndFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$)
On Error Goto GfSndFile.ErrProc
OPEN "COM1:" + pstrSpeed$ AS pintFp%
XFILE pstrFile$, pstrOption$
GfSndFile% = GcTrue%
GfSndFile.Return '終了処理
CLOSE pintFp%
On Error Goto 0
Exit Function
'-----
'エラー処理
'-----
GfSndFile.ErrProc
GfSndFile% = GcFalse%
Resume GfSndFile.Return
End Function
'---------------------------------------
'ファイル受信
'---------------------------------------
'Function GfRcvFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$)
'引 数:
' pintFp% :ファイル番号
' pstrSpeed$ :受信スピード
' pstrFile$ :受信ファイル名
' pstrOption$ :受信オプション("R")以外のオプション
'戻り値:
' GfRcvFile% :受信OK(GcTrue%)NG(GcFalse%)
'---------------------------------------
Function GfRcvFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$)
On Error Goto GfRcvFile.ErrProc
OPEN "COM1:" + pstrSpeed$ AS pintFp%
OUT &h6060, 3 'YMODEM
XFILE pstrFile$, "R" + pstrOption$
GfRcvFile% = GcTrue%
GfRcvFile.Return '終了処理
CLOSE pintFp%
On Error Goto 0
Exit Function
'-----
'エラー処理
'-----
GfRcvFile.ErrProc
GfRcvFile% = GcFalse%
Resume GfRcvFile.Return
End Function
'---------------------------------------
'メイン処理開始
'---------------------------------------
SCREEN 1 '漢字モード
LOCATE , , 2 'カーソルをブロック表示
PRIVATE intRet%
PRINT "受信開始:";
intRet% = GfRcvFile%(1, "115200", "TEST.DAT", "PTM") '受信
PRINT "GfRcvFile%=" + STR$(intRet%)
WAIT 0, &h01 'キー入力待ち
PRINT "送信開始:";
intRet% = GfSndFile%(1, "115200", "TEST.DAT", "PTM") '送信
PRINT "GfSndFile%=" + STR$(intRet%)
WAIT 0, &h01 'キー入力待ち
END
■VB.NETの送受信テストプログラムの実行
送信時の画面は、以下の様にYMODEM送信のダイアログが表示されて、 件数の様な数字がカウントアップします。
送信処理後に、
TEST.DAT の存在するフォルダを確認すると
TEST.FLD ファイルが作られているのがわかります。 この
TEST.FLD ファイルの内容は以下の様にフィールドの定義ファイルの様です。
* created by BHT-BASIC 4.0 Transfer Utility DLL Version 1.14
* Copyright (C) DENSO WAVE INC. 2001-2013 all rights reserved
file TEST.DAT
fields 16 12
受信時の画面は、以下の様な表示になります。
受信後は、ハンディから送られてくる
TEST.FLD ファイルが生成される様です。 以下はその内容です。
* created by BHT
file TEST.DAT
size 150
records 5
fields 16 12
=====
2016/04/02:の時の情報