ソースコード解説_3(Excelでシリアル通信-7)

Excelからシリアル通信を実現してみようという連載の7回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

前回はLoopBackTestTool(以下、本ツール)に使用しいるダイナミック リンク ライブラリ (DLL) の参照、その他の宣言について解説しました。

今回も前回の続きで、残りを解説したいと思います。

タイムアウトの設定

タイムアウトの設定です。COMMTIMEOUT構造体の形で設定した内容で「SetCommTimeouts」を使用して設定します。

learn.microsoft.com

learn.microsoft.com

'タイムアウトの設定
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

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構造体の形で定義します。

learn.microsoft.com

learn.microsoft.com

'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」で使用されます。

learn.microsoft.com

'COMSTAT構造体の定義
Type COMSTAT
    fBitFields As Long
    cbInQue As Long
    cbOutQue As Long
End Type

'COMSTAT型変数の定義
Public fCOMSTAT As COMSTAT

次回は更なる改善

いかがでしょうか。今回でコードの解説はおしまいです。これでひととおりのツールはできたのですが、まだ使い勝手は良くないところがあります。次回は問題点を洗い出して改善方法を検討します。お楽しみに!!

hirocom777.hatenadiary.org