我們的一個應用程序的接收由傳感器發送的數據。通過檢查消息的內容,應用程序必須找出它正在查看的消息類型以及傳感器運行的固件版本。較新的固件版本發送額外的數據,必須以不同的方式處理。模式用於從非結構化消息中提取數據
我提供以下示出的數據消息的不同版本以及使用不同結構的配置消息的例子。
你可以看到一些數據是逗號分隔的,而有些則通過新線分離。消息中還有標記可用於確定消息類型。
既然我們不能改變的消息結構和該消息並不表示他們的固件版本,我正在尋找的建議和解釋數據的清晰,可維護,可擴展的方法的例子。我們能做的最好的事情就是儘可能優雅地處理事情。
舊版本的普通消息的
[MSG]
4 031116 080423
543215432154321
3711mV
30
1,0,0
[READINGS]
00451,00450,00402,06017
00000,021116 083000
00000
00000
00000
00000,031116 080000
[MSGEND]
的新版普通消息的
[MSG]
4 031116 080423
543215432154321
3711mV
30
1,0,0
**0000006216** <- Extra data added on extra line
[READINGS]
00451,00450,00402,06017
00000,021116 083000
00000
00000
00000
00000,031116 080000
[MSGEND]
配置報告
[MSG]
2 050416 194503
3913mV
30
1,1,0
0000006216
[CONFIG]
543215432154321
234,15,0037,01DE,-60,234,15,0037,42B0,-76
[MSGEND]
消息是如何識別的?參數總數?每行參數?參數的順序? []標記?每個標記的參數?一旦清楚瞭解確定消息類型的條件,就可以檢查這些條件並從數據中創建更多可用的消息對象。 – EpicSam
消息類型(閱讀/配置)可以由[CONFIG]標誌確定。 固件版本比較困難。這取決於在更新版本的固件中尋找額外的數據。 –
然後先檢查標誌以確定消息類型。之後,計算[MSG]和[MESSAGETYPE]之間的參數數目以確定固件版本? – EpicSam