OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する

C#でOMRON(オムロン)製のUPSの電圧情報 容量 内部温度を取得するコードを紹介します。

概要

OMRON UPSライブラリを利用してOMRONのUPSの電圧情報や容量を取得できます。

事前準備

OMRON UPSライブラリのダウンロード

こちらの記事を参照して OMRON UPSライブラリをダウンロードします。

プロジェクトの作成、ライブラリの追加

こちらの記事を参照して OMRON UPSライブラリを利用したアプリケーションを作成します。

プログラム

こちらの記事で作成したプログラムにコードを追加します。

UI

下図のUIを作成します。ボタンをフォームに一つ追加します。
OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する:画像1

コード

作成したボタンのクリックインベントを実装します。下記のコードを記述します。フォーム以外のコードは先に作成したプログラムのコードから変更はありません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ApiCallDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
      int lReturn = OmronUpsLib.ue_AutoFindUPS();

      if (lReturn <= 256 & lReturn >= 1) {
        int port = lReturn;
        textBox1.Text += "Com Port:" + port.ToString() + "\r\n";

        // Open communicatin port
        lReturn = OmronUpsLib.ue_OpenConnection(port);

        if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
          textBox1.Text += "Connection Open\r\n";

          // Get UPS status and battery status
          lReturn = GetUpsStatus();

          OmronUpsLib.ue_CloseConnection(port);
        }
        else if (OmronUpsLib.ERROR_OPEN_CONNECTION_ERROR == lReturn){
          textBox1.Text += "Connection Cannot open\r\n";
        }
        else {
        }
      }
      else if (lReturn == 901) {
        textBox1.Text += "Omron UPS Not Fond\r\n";
      }
    }

    public int GetUpsStatus()
    {
      int lReturn;
      int lGroup;
      OmronUpsLib.UPS_STATUS_AND_DATA UpsStatusAndData = new OmronUpsLib.UPS_STATUS_AND_DATA();

      lGroup = 0; // Get group 1
      lReturn = OmronUpsLib.ue_GetUPSStatusAndData(lGroup, ref UpsStatusAndData);

      if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
        DisplayStatus(UpsStatusAndData.UPSStatus.lUpsStatus);
        DisplayBatteryStatus(UpsStatusAndData.UPSStatus.lBatteryStatus);
      }
      else {
      }
      return 0;
    }


    public void DisplayStatus(int status)
    {
      switch (status) {
        case OmronUpsLib.UPS_NORMAL:
          textBox1.Text += "status:Normal\r\n";
          break;
        case OmronUpsLib.UPS_IN_TEST:
          textBox1.Text += "status:In Test\r\n";
          break;
        case OmronUpsLib.UPS_AC_FAIL:
          textBox1.Text += "status:AC Fail\r\n";
          break;
        case OmronUpsLib.UPS_BATTERY_LOW:
          textBox1.Text += "status:Battery Low\r\n";
          break;
        case OmronUpsLib.UPS_BATTERY_EMPTY:
          textBox1.Text += "status:Battery Empty\r\n";
          break;
        case OmronUpsLib.UPS_DISCONNECT:
          textBox1.Text += "status:Disconnect\r\n";
          break;
        default:
          textBox1.Text += "status:Disconnect\r\n";
          break;
      }
    }

    public void DisplayBatteryStatus(int status)
    {
      switch (status) {
        case OmronUpsLib.BATTERY_NORMAL:
          textBox1.Text += "battery status:Normal\r\n";
          break;
        case OmronUpsLib.BATTERY_WEAK:
          textBox1.Text += "battery status:Weak\r\n";
          break;
        case OmronUpsLib.BATTERY_NONE:
          textBox1.Text += "battery status:None\r\n";
          break;
        default:
          textBox1.Text += "battery status:None\r\n";
          break;

      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      int lReturn = OmronUpsLib.ue_AutoFindUPS();

      if (lReturn <= 256 & lReturn >= 1) {
        int port = lReturn;
        textBox1.Text += "Com Port:" + port.ToString() + "\r\n";

        // Open communicatin port
        lReturn = OmronUpsLib.ue_OpenConnection(port);

        if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
          textBox1.Text += "Connection Open\r\n";

          // Get UPS status and battery status
          lReturn = GetUpsData();

          OmronUpsLib.ue_CloseConnection(port);
        }
        else if (OmronUpsLib.ERROR_OPEN_CONNECTION_ERROR == lReturn) {
          textBox1.Text += "Connection Cannot open\r\n";
        }
        else {
        }
      }
      else if (lReturn == 901) {
        textBox1.Text += "Omron UPS Not Fond\r\n";
      }
    }


    public int GetUpsData()
    {
      int lReturn;
      int lGroup;
      OmronUpsLib.UPS_STATUS_AND_DATA UpsStatusAndData = new OmronUpsLib.UPS_STATUS_AND_DATA();

      lGroup = 1; // Get group 2
      lReturn = OmronUpsLib.ue_GetUPSStatusAndData(lGroup, ref UpsStatusAndData);

      if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
        textBox1.Text += string.Format("入力電圧:{0}\r\n",UpsStatusAndData.UPSData.byInputVoltage);
        textBox1.Text += string.Format("出力電圧:{0}\r\n", UpsStatusAndData.UPSData.byOutputVoltage);
        textBox1.Text += string.Format("出力容量:{0}\r\n", UpsStatusAndData.UPSData.byOutputLoad);
        textBox1.Text += string.Format("入力周波数:{0}\r\n", UpsStatusAndData.UPSData.byInputFrequency);
        textBox1.Text += string.Format("バッテリ電圧:{0}\r\n", UpsStatusAndData.UPSData.byBatteryVoltage);
        textBox1.Text += string.Format("内部温度:{0}\r\n", UpsStatusAndData.UPSData.byInternalTemperature);
      }
      else {
      }
      return 0;
    }
  }
}

解説

新たに作成したボタンのクリックイベントは下記のコードになります。こちらの記事で作成した"Connect & Get Status"ボタンのコードと同様です。接続できた場合に呼び出す処理がGetUpsData()メソッドを呼ぶ部分が異なります。

private void button2_Click(object sender, EventArgs e)
{
  int lReturn = OmronUpsLib.ue_AutoFindUPS();

  if (lReturn <= 256 & lReturn >= 1) {
    int port = lReturn;
    textBox1.Text += "Com Port:" + port.ToString() + "\r\n";

    // Open communicatin port
    lReturn = OmronUpsLib.ue_OpenConnection(port);

    if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
     textBox1.Text += "Connection Open\r\n";

      // Get UPS status and battery status
      lReturn = GetUpsData();
      OmronUpsLib.ue_CloseConnection(port);
    }
    else if (OmronUpsLib.ERROR_OPEN_CONNECTION_ERROR == lReturn) {
      textBox1.Text += "Connection Cannot open\r\n";
    }
    else {
    }
  }
  else if (lReturn == 901) {
    textBox1.Text += "Omron UPS Not Fond\r\n";
  }
}


GetUpsDataメソッドのコードは下記になります。UPSの状態を取得するコードと同様に、ue_GetUPSStatusAndData() メソッドを呼び出しますが、第一引数uGroupの値に1を与えることで、UPSの情報を取得します。取得した情報は UPS_STATUS_AND_DATA 構造体に代入されますので、メンバ変数の値をテキストボックスに表示します。

public int GetUpsData()
{
  int lReturn;
  int lGroup;
  OmronUpsLib.UPS_STATUS_AND_DATA UpsStatusAndData = new OmronUpsLib.UPS_STATUS_AND_DATA();

  lGroup = 1; // Get group 2
  lReturn = OmronUpsLib.ue_GetUPSStatusAndData(lGroup, ref UpsStatusAndData);

  if (OmronUpsLib.ERROR_UPS_SUCCESSFUL == lReturn) {
    textBox1.Text += string.Format("入力電圧:{0}\r\n",UpsStatusAndData.UPSData.byInputVoltage);
    textBox1.Text += string.Format("出力電圧:{0}\r\n", UpsStatusAndData.UPSData.byOutputVoltage);
    textBox1.Text += string.Format("出力容量:{0}\r\n", UpsStatusAndData.UPSData.byOutputLoad);
    textBox1.Text += string.Format("入力周波数:{0}\r\n", UpsStatusAndData.UPSData.byInputFrequency);
    textBox1.Text += string.Format("バッテリ電圧:{0}\r\n", UpsStatusAndData.UPSData.byBatteryVoltage);
    textBox1.Text += string.Format("内部温度:{0}\r\n", UpsStatusAndData.UPSData.byInternalTemperature);
  }
  else {
  }
  return 0;
}

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する:画像2

UPSの電源が入っている状態で、[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。入力、出力の電圧も100V程度の数値になっていることが確認できます。
OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する:画像3

続いて、UPSの電源を切ります。電源が入っていない状態で[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。電源が入っていないため、出力電圧の値が0になっていることが確認できます。
OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する:画像4

続いて電源をONにした状態で電源プラグを引き抜きます。電源が切断された状態で、[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。電源プラグが抜かれているため、入力電圧の値が0になっていることが確認できます。
OMRONのUPSのデータ(電圧情報 容量 内部温度)を取得する:画像5

UPSの電圧や内部温度の値を取得するプログラムが作成できました。

AuthorPortraitAlt
著者
かつて日本を代表したスーパーエンジニア (自称)
ハードウェア、電気設備、ガーデニング関係の記事を担当。
作成日: 2018-08-25
Copyright © 1995–2025 iPentec all rights reserverd.