Excelからシリアル通信を実現してみようという連載の7回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org
前回はLoopBackTestTool(以下、本ツール)に使用しいるダイナミック リンク ライブラリ (DLL) の参照、その他の宣言について解説しました。
今回も前回の続きで、残りを解説したいと思います。
タイムアウトの設定
タイムアウトの設定です。COMMTIMEOUT構造体の形で設定した内容で「SetCommTimeouts」を使用して設定します。
'タイムアウトの設定 Public Declare PtrSafe Function _ SetCommTimeouts Lib "kernel32" ( _ ByVal hFile As Long, _ ByRef lfCOMMTIMEOUTS As COMMTIMEOUTS) _ As Long 'COMMTIMEOUT構造体 Type COMMTIMEOUTS ReadIntervalTimeout As Long ReadTotalTimeoutMultiplier As Long ReadTotalTimeoutConstant As Long WriteTotalTimeoutMultiplier As Long WriteTotalTimeoutConstant As Long End Type 'COMMTIMEOUTS型変数の定義 Public fCOMMTIMEOUTS As COMMTIMEOUTS
データの書込み、読み出し
オープンしたポートにデータを書き込んだり、読み出したりします。書込みは「WriteFile」、読み出しは「ReadFile」を使用します。 learn.microsoft.com
'ポート出力API Declare PtrSafe Function WriteFile Lib "kernel32" ( _ ByVal hFile As Long, _ ByRef lpBuffer As Any, _ ByVal nNumberOfBytesToWrite As Long, _ ByRef lpNumberOfBytesWritten As Long, _ ByVal lpOverlapped As Long) _ As Long 'ポート入力API Public Declare PtrSafe Function ReadFile Lib "kernel32" ( _ ByVal hFile As Long, _ ByRef lpBuffer As Any, _ ByVal nNumberOfBytesToRead As Long, _ ByRef lecActiveOfBytesRead As Long, _ ByVal lpOverlapped As Long) _ As Long
DCB構造体
「SetCommState」を使用してポートの設定を行います。設定はDCB構造体の形で定義します。
'DCBの内容を設定する Public Declare PtrSafe Function _ SetCommState Lib "kernel32" ( _ ByVal hCommDev As Long, _ ByRef lfDCB As DCB) _ As Long 'DCB構造体 Type DCB DCBlength As Long BaudRate As Long fBitFields As Long wReserved As Integer XonLim As Integer XoffLim As Integer ByteSize As Byte Parity As Byte StopBits As Byte XonChar As Byte XoffChar As Byte ErrorChar As Byte EofChar As Byte EvtChar As Byte wReserved1 As Integer End Type 'DCB型変数の定義 Public fDCB As DCB
COMSTAT構造体
COMSTAT構造体にはポートに関する情報が含まれます。前回ご紹介した「ClearCommError」で使用されます。
'COMSTAT構造体の定義 Type COMSTAT fBitFields As Long cbInQue As Long cbOutQue As Long End Type 'COMSTAT型変数の定義 Public fCOMSTAT As COMSTAT
次回は更なる改善
いかがでしょうか。今回でコードの解説はおしまいです。これでひととおりのツールはできたのですが、まだ使い勝手は良くないところがあります。次回は問題点を洗い出して改善方法を検討します。お楽しみに!!