C#でOMRON(オムロン)製のUPSの電圧情報 容量 内部温度を取得するコードを紹介します。
OMRON UPSライブラリを利用してOMRONのUPSの電圧情報や容量を取得できます。
こちらの記事を参照して OMRON UPSライブラリをダウンロードします。
こちらの記事を参照して OMRON UPSライブラリを利用したアプリケーションを作成します。
こちらの記事で作成したプログラムにコードを追加します。
下図のUIを作成します。ボタンをフォームに一つ追加します。
作成したボタンのクリックインベントを実装します。下記のコードを記述します。フォーム以外のコードは先に作成したプログラムのコードから変更はありません。
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;
}
プロジェクトを実行します。下図のウィンドウが表示されます。
UPSの電源が入っている状態で、[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。入力、出力の電圧も100V程度の数値になっていることが確認できます。
続いて、UPSの電源を切ります。電源が入っていない状態で[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。電源が入っていないため、出力電圧の値が0になっていることが確認できます。
続いて電源をONにした状態で電源プラグを引き抜きます。電源が切断された状態で、[Connect & Get Data]ボタンをクリックします。下図の画面が表示されます。電源プラグが抜かれているため、入力電圧の値が0になっていることが確認できます。
UPSの電圧や内部温度の値を取得するプログラムが作成できました。