TWELITE PAL Viewer では、SerialPort1 の .DataRecievedイベントを起点として、書式の解釈が行われます。
以下のコード例では、CSnsDataクラスにデータをコピーしています。
' event handler when got data from serial port
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim strDataReceived As String
Dim bFlag As Boolean = True
While SerialPort1.BytesToRead > 0
Try
strDataReceived = SerialPort1.ReadLine
Catch ex As Exception
strDataReceived = ex.Message
bFlag = False
End Try
If bFlag Then
Try
'' PAL 標準フォーマットを解釈する
Dim b() As Byte = System.Text.Encoding.ASCII.GetBytes(strDataReceived)
Dim dataArrival = PAL_Utils.genDataPresentation(b)
Dim dataFmt As ClsDataFormatPalApp = dataArrival.objFormat 'データ形式、無線ノードの情報
Dim dataPay As ClsDataPayloadPalSensors = dataFmt.objPayload '各種センサー情報
'' CSnsData 形式に変換
Dim snsdt As CSnsData = New CSnsData
snsdt.bStored = True
' LQI
snsdt.iLQI = dataFmt.BLQI : snsdt.bLQI = True
' 続き番号
snsdt.iSeq = dataFmt.UsDataSer
' 名前ラベル
Dim iPalPcb_CD As UInteger = (dataFmt.BPalPcb And &HF)
Dim sPalPcb_Name As String
Select Case iPalPcb_CD
Case 0
sPalPcb_Name = "nc"
Case 1
sPalPcb_Name = "OnC"
Case 2
sPalPcb_Name = "AMB"
Case Else
sPalPcb_Name = "UNK"
End Select
snsdt.sID = sPalPcb_Name + dataFmt.BSrcAddr.ToString("_00")
' 電圧
Dim l = dataPay.SensorCode(ClsDataPalSenseElement.E_SNSCD.VOLT)
For Each m In l
If m.Ex = ClsDataPalSenseElement.E_EXCD_VOLT.POWER Then
snsdt.iVolt = l(0).Data(0) : snsdt.bVolt = True
End If
Next
' OpnCls状態
l = dataPay.SensorCode(ClsDataPalSenseElement.E_SNSCD.HALL)
If l.Count > 0 Then
snsdt.iPC = (l(0).Data(0) And &H7F) : snsdt.bPC = True
End If
' TEMP
l = dataPay.SensorCode(ClsDataPalSenseElement.E_SNSCD.TEMP)
If l.Count > 0 Then
Try
snsdt.fTemp = CSng(l(0).Data(0)) / 100.0
snsdt.bTemp = True
Catch ex As Exception
snsdt.bTemp = False
End Try
End If
' HUMD
l = dataPay.SensorCode(ClsDataPalSenseElement.E_SNSCD.HUMD)
If l.Count > 0 Then
Try
snsdt.fHumid = CSng(l(0).Data(0)) / 100.0
snsdt.bHumid = True
Catch ex As Exception
snsdt.bHumid = False
End Try
End If
' LIGHT
l = dataPay.SensorCode(ClsDataPalSenseElement.E_SNSCD.LUMI)
If l.Count > 0 Then
Try
snsdt.iLight = CInt(l(0).Data(0))
snsdt.bLight = True
Catch ex As Exception
snsdt.bHumid = False
End Try
End If
' データ
snsObjs.AddEntryTemporary(snsdt, thetime)
snsObjsLong.AddEntryTemporary(snsdt, thetime)
SaveRawLog(snsdt)
Catch ex As Exception
bFlag = False
End Try
End If
End While
End Sub