Excelからシリアル通信を実現してみようという連載の10回目です。前回の記事はこちらになります。
前回からクラスモジュール「SerialCom」のコーディングにとりかかりました。コンストラクター、デストラクター、そして一部のプロパティーについて進めました。
今回も引き続き、プロパティーに取り組みたいと思います。
PortSettingプロパティープロシージャ
PortSettingは、通信設定を行うプロパティープロシージャです。以下の項目を設定します。
ボーレート(通信速度)
通信速度です。単位はbpsです。300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200 から指定します。デフォルトは9600です
パリティービット
パリティービットの指定です。E(偶数)、O(奇数)、N(なし)から指定します。デフォルトはNです
データビット長
送受信するデータのビット長です。5, 6, 7, 8 から指定します。デフォルトは8です
ストップビット
送信後のストップビット長です。1, 1.5, 2 から指定します。デフォルトは1です
設定は文字データによって行います。
BAUD=ボーレート PARITY=パリティービット DATA=データビット長 STOP=ストップビット
「BAUD=9600 PARITY=N DATA=8 STOP=1」の様に書きます。まずはセッターのコードです。
'通信設定 Public Property Let PortSetting(ByVal PortSetting As String) 'ポート未設定の場合処理しない If PortNo_ = 0 Then Exit Property '各設定に分解 PortSetting = StrConv(PortSetting, vbNarrow + vbUpperCase) Dim eachData As Variant eachData = Split(PortSetting, " ") Dim i As Long For i = 0 To UBound(eachData) Dim baudRateData As Long If eachData(i) Like "*BAUD=*" Then baudRateData = CLng(Replace(eachData(i), "BAUD=", "")) Dim parityBitData As String If eachData(i) Like "*PARITY=*" Then parityBitData = Trim(Replace(eachData(i), "PARITY=", "")) Dim byteSizeData As Long If eachData(i) Like "*DATA=*" Then byteSizeData = CLng(Replace(eachData(i), "DATA=", "")) Dim stopBitsData As Double If eachData(i) Like "*STOP=*" Then stopBitsData = CDbl(Replace(eachData(i), "STOP=", "")) Next i 'ボーレート Select Case baudRateData Case 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200 fDCB.BaudRate = baudRateData Case Else fDCB.BaudRate = 9600 End Select 'パリティービット Select Case parityBitData Case "E" fDCB.Parity = 2 Case "O" fDCB.Parity = 1 Case Else fDCB.Parity = 0 End Select 'データビット長 Select Case byteSizeData Case 5, 6, 7, 8 fDCB.ByteSize = byteSizeData Case Else fDCB.ByteSize = 8 End Select 'ストップビット Select Case stopBitsData Case 1.5 fDCB.StopBits = 1 Case 2 fDCB.StopBits = 2 Case Else fDCB.StopBits = 0 End Select '設定実施 Dim resultData As Long resultData = SetCommState(handleNo, fDCB) End Property
まずPort_を確認して、ポート番号が設定されている場合のみ設定実施します。取得した文字列からキーワードを手掛かりに各設定値を抽出して指定します。無効な値が記述されている場合は、デフォルト値を指定します。指定された内容はDCB構造体に保存されて、これを使って設定します。
次にゲッターです。DCB構造体に保存してある内容から同じ形式の文字データを返します。
'設定の読込み Public Property Get PortSetting() As String 'ポート未設定の場合処理しない If PortNo_ = 0 Then Exit Property 'パリティービット Dim parityBitData As String Select Case fDCB.Parity Case 2 parityBitData = "E" Case 1 parityBitData = "O" Case Else parityBitData = "N" End Select 'ストップビット Dim stopBitData As String Select Case fDCB.StopBits Case 0 stopBitData = "1" Case 1 stopBitData = "1.5" Case 2 stopBitData = "2" End Select '設定文字列の構築 PortSetting = "BAUD=" & fDCB.BaudRate _ & " PARITY=" & parityBitData _ & " DATA=" & fDCB.ByteSize _ & " STOP=" & stopBitData End Property
次回もさらにコーディング
いかがでしょうか。通信設定は項目が多いので長くなってしまいました。次回は残りのプロパティーとメソッドに取り組みます。お楽しみに!!