using System; using System.Collections.Generic; using ORiN2.ManagedCAO; namespace MurataWirelessGatewaySample { /// /// 温湿度計の測定情報を画面に表示するプログラム /// class Program { /// /// メイン処理 /// /// static void Main(string[] args) { try { // CONN=に続くオプションを入力させる string option = "CONN="; Console.Write(option); option += Console.ReadLine(); // CaoEngineの作成 // usingで囲うとスコープから抜けたときに自動的にDisposeが実行されて解放される using (CCaoEngine engine = new CCaoEngine()) { // CaoControllerの作成 // engine.Workspaces[0] は自動的に生成される CCaoController controller = engine.Workspaces[0].AddController("Gateway", "CaoProv.Murata.WirelessGateway", null, option); // OnMessageイベントハンドラの登録 controller.OnMessage += Controller_OnMessage; Console.WriteLine("Hit any key to exit."); Console.ReadKey(); // OnMessageイベントハンドラの解除 controller.OnMessage -= Controller_OnMessage; } } catch(Exception ex) { // 例外の内容をコンソールに出力 Console.WriteLine(ex); } } /// /// メッセージ処理関数 /// /// 送信元のオブジェクト /// イベント引数 private static void Controller_OnMessage(object sender, OnMessageEventArgs e) { try { object[] values = e.Message.Value as object[]; // 目的以外のメッセージは処理しない if (e.Message.Number != 0 || values == null || values.Length != 5) { Console.WriteLine("invalid message."); return; } switch (Convert.ToByte(values[2])) { case 0x01: ShowTempAndHumidity(values); break; case 0x09: ShowVibration(values); break; case 0x12: ShowCT(values); break; case 0x10: ShowCurrentPulse(values); break; case 0x18: ShowVibrationSpeed(values); break; default: Console.WriteLine("Not suported"); break; } } catch (Exception ex) { // 例外の内容をコンソールに出力 Console.WriteLine(ex); } } static void ShowTempAndHumidity(object[] values) { ViewData(values, "温湿度", new string[] { "電源電圧", "温度", "湿度" }); } static void ShowVibration(object[] values) { ViewData(values, "振動", new string[] { "電源電圧", "ピーク周波数1", "ピーク加速度1", "ピーク周波数2", "ピーク加速度2", "ピーク周波数3", "ピーク加速度3", "ピーク周波数4", "ピーク加速度4", "ピーク周波数5", "ピーク加速度5", "加速度RMS", "尖り度", "温度" }); } static void ShowCT(object[] values) { ViewData(values, "CT", new string[] { "電源電圧", "カウンタ", "電流1", "電流2", "借電", "前回電流1", "前回電流2", "前回借電" }); } static void ShowCurrentPulse(object[] values) { ViewData(values, "電流・パルス", new string[] { "電源電圧", "カウンタ", "電流", "パルスカウント", "前回電流", "前回パルスカウント" }); } static void ShowVibrationSpeed(object[] values) { ViewData(values, "振動(速度)", new string[] { "電源電圧", "ピーク周波数1", "ピーク加速度1", "ピーク周波数2", "ピーク加速度2", "加速度RMS", "速度ピーク周波数1", "ピーク速度1", "速度ピーク周波数2", "ピーク速度2", "速度ピーク周波数3", "ピーク速度3", "速度RMS", "尖り度", "温度" }); } static void ViewData(object[] values, string sensorType, string[] headers) { ushort sensorId = Convert.ToUInt16(values[0]); short rssi = Convert.ToInt16(values[1]); byte sensorTypeId = Convert.ToByte(values[2]); object[] sensorValues = values[3] as object[]; byte[] unitValues = values[4] as byte[]; if (sensorValues == null || unitValues == null || headers.Length != sensorValues.Length || headers.Length != unitValues.Length) { Console.WriteLine("invalid message."); return; } List displayValues = new List(); displayValues.Add($"sensorId:{sensorId:X4}"); displayValues.Add($"rssi:{rssi}"); displayValues.Add($"sensorType:{sensorTypeId:X2}"); for (int i = 0; i < headers.Length; i++) { displayValues.Add($"{headers[i]}:{sensorValues[i]}{unitMap[unitValues[i]]}"); } Console.WriteLine($"{sensorType}: {string.Join(", ", displayValues)}"); } static readonly Dictionary unitMap = new Dictionary() { {0x01, "%"}, {0x02, "Pa"}, {0x03, ""}, {0x04, ""}, {0x05, "H"}, {0x06, "J"}, {0x07, "Time"}, {0x08, "rad/s2"}, {0x09, "m2/s"}, {0x0A, "rad/s"}, {0x0B, "°"}, {0x0C, "m/s2"}, {0x0D, "cd/m2"}, {0x0E, "Gy"}, {0x0F, "Gy/s"}, {0x10, "-"}, {0x11, "kat"}, {0x12, "kat/m3"}, {0x13, "lm"}, {0x14, "cd"}, {0x15, "S"}, {0x16, "Byte"}, {0x17, "A/m"}, {0x18, "sec"}, {0x19, "Hour"}, {0x1A, "minute"}, {0x1B, "second"}, {0x1C, "millsecond"}, {0x1D, "W"}, {0x1E, "Wb"}, {0x1F, "T"}, {0x20, "kg"}, {0x21, "m2/kg"}, {0x22, "kg/m3"}, {0x23, "mol/kg"}, {0x24, "kg/s"}, {0x25, "kg/m2・s"}, {0x26, "Hz"}, {0x27, "C/kg"}, {0x28, "lx"}, {0x29, "-"}, {0x2A, "℃"}, {0x2B, "Sv"}, {0x2C, "%RH"}, {0x2D, "m3"}, {0x2E, "J/m3"}, {0x2F, "m3/s"}, {0x30, "N"}, {0x31, "N・m"}, {0x32, "V"}, {0x33, "C"}, {0x34, "V/m"}, {0x35, "C/m3"}, {0x36, "ohm"}, {0x37, "F"}, {0x38, "C/m2"}, {0x39, "A"}, {0x3A, "A/m2"}, {0x3B, "kWh"}, {0x3C, "H/m"}, {0x3D, "S/m"}, {0x3E, "m2/s"}, {0x3F, "m"}, {0x40, "kW/m2"}, {0x41, "W/(m・K)"}, {0x42, "J/K"}, {0x43, "K"}, {0x44, "W/m2"}, {0x45, "Pa・s"}, {0x46, "ppm"}, {0x47, "m-1"}, {0x48, "m/s"}, {0x49, "J/kg"}, {0x4A, "-"}, {0x4B, "J/(kg・K)"}, {0x4C, "m3/kg"}, {0x4D, "N/m"}, {0x4E, "C/m2"}, {0x4F, "mol"}, {0x50, "rad"}, {0x51, "W/(m2・sr)"}, {0x52, "W/sr"}, {0x53, "Bq"}, {0x54, "kg/m3"}, {0x55, "m2"}, {0x56, "kg/m2"}, {0x57, "J/mol"}, {0x58, "J/(mol・K)"}, {0x59, "m3/mol"}, {0x5A, "S・m2/mol"}, {0x5B, "F/m"}, {0x5C, "N・s"}, {0x5D, "sr"}, {0x5E, "mol/m3"}, {0x5F, "uSv"}, {0x60, "-"}, {0x61, "-"}, {0x62, "mA"}, {0x63, "m/s2"}, {0x64, "hPa"}, {0x65, "-"}, {0x66, "-"}, {0x68, "-"}, {0x69, "W"}, {0x6A, "L/min"}, {0x6B, "L"}, {0x71, "rad"}, {0x72, "mm/s"}, {0x73, "mm"}, {0x74, "mm/s"}, {0xFA, "-"}, {0xFE, "-"}, {0xFF, "-"} }; } }