1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ORiN2 SDKのチュートリアルをC#で書く

Posted at

1. 概要

ORiN2は、FA/ロボット向けの通信インタフェース。このページを参照。
ORiNとは何か

ORiN2 SDKなどこちらの方の記事がよくまとまっている。
ORiNについて調べてみた

ユーザーズガイドに記載されていたサンプルを、Visual Studio 2017/C#に移植してみた。ORiN2 SDKのC#実装については、以下の動画が役に立った。
ORiN2 - Read Variable Example (RC8 Controller)

2. サンプルについて

元となっているサンプルは以下のユーザーズガイドから2つ。

ORiN2 SDKユーザーズガイド Version 2.1.32

  • 4.2 CAOチュートリアル
  • 4.3 CRDチュートリアル

4.3は4.2からの続きになっている。
本記事ではソースコードの詳しい説明は省略するので、上記ユーザーズガイドを参照。

3. CAOチュートリアル

指定したIPアドレスに対してpingを実行し、到達可能かを調べるアプリを作る。

3-1. プロジェクトの新規作成

Visual Studio 2017を起動し、ファイル>新規作成>プロジェクトでプロジェクトを作成する。

  1. 新しいプロジェクトダイアログが表示される
  2. 左メニューからインストール済み>Windowsデスクトップを選択
  3. Windows フォームアプリケーション(.NET Framework) Visual C#を選択
  4. プロジェクトの名前をORiNCaoAppに指定
  5. OKボタンを押す
    ORIN_newproj.png

3-2. フォームの作成

以下のコントロールを配置する。

(1) 入力用テキストボックス
Name: textBox_IP_Address
(2) メッセージ出力用テキストボックス
Name: textBox_Message
(3) pingボタン
Name: button_Ping
Text: ping

ついでにフォームの名前も変更し、サイズもいい感じにする。
Text: ORiNCaoApp
ORiN_form.png

3-3. コードを書く準備

ソリューションエクスプローラーからForm1.csを選んで右クリックし、コードの表示を選択する。
ORiN_03_codeview.png

コード入力の画面になる。
ORiN_04_codeview.png

3-4. CAOライブラリを追加する

  1. ソリューションエクスプローラーからMyORiNAppを選んで右クリック、追加>参照を選択する
    ORiN_05_add_reference.png

  2. 参照マネージャが表示されるので、左メニューCOM>タイプライブラリを選択し、中央メニューからCAO 1.0 Type Libraryをチェックする
    ORiN_06_refman.png

  3. OKボタンを押す

3-5. pingボタンのメソッドを追加

Form1.cs[デザイン]タブで、pingボタンをダブルクリックする。
Form1.csタブのソースコードに、button_Ping_Click()が追加されたことを確認する。
以下のようになっているはず。

Form1.cs
namespace ORiNCaoApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_Ping_Click(object sender, EventArgs e)
        {

        }
    }
}

3-6. コーディング

Form1.csを以下のように編集する。

Form1.cs
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;
using CAOLib;

namespace ORiNCaoApp
{
    public partial class Form1 : Form
    {
        private CaoEngine eng;
        private CaoWorkspace caoWS;
        private CaoController icmpCtrl;
        private CaoVariable icmpVar;
        public Form1()
        {
            InitializeComponent();
            // CAOエンジンの生成
            eng = new CaoEngine();
            caoWS = eng.Workspaces.Item(0);
        }

        private void button_Ping_Click(object sender, EventArgs e)
        {
            // ICMPプロバイダに接続
            icmpCtrl = caoWS.AddController("Sample", "CaoProv.ICMP", "",
                "Host=" + textBox_IP_Address.Text);
            icmpVar = icmpCtrl.AddVariable("@ERROR_CODE");
            // pingの送信
            textBox_Message.Text = icmpVar.Value.ToString();
            caoWS.Controllers.Remove(icmpCtrl.Index);
        }
    }
}

最後にCtrl+Shift+Sで全て保存にする。

3-7. 実行

実行ボタンを押して実行する。

ORiNCaoAppのダイアログが表示されるので、上のテキストボックスに到達可能なIPアドレスを入力し、pingボタンを押す。到達できた場合は、以下のようにメッセージのテキストボックスにエラーコード0が表示される。
ORiN_07_OK.png

到達できなかった場合は、以下のように0以外のエラーコードが表示される。
ORiN_08_NG.png

4. CRDチュートリアル

CAOチュートリアルの機能に追加して、CRDファイルでエラーコードとメッセージを登録し、エラーコードに対応したエラーメッセージを表示する。

4-1. tutorial.xmlを追加する

ソリューションエクスプローラからORiNCaoAppを選択し、右クリックメニューで追加>新しい項目をクリックする。

ORiN_09_new_item.png

新しい項目の追加ダイアログが表示されるので、左メニューからVisual C#アイテム>Dataを選ぶと候補が表示される。XMLを選択し、名前をtutorial.xmlにする。
ORiN_10_new_item.png

追加ボタンを押す。

4-2. tutorial.xmlを編集する

以下の内容を記載する。
先頭のcodingをutf-8に変更した以外は、元のサンプルからそのまま持ってくる。

tutorial.xml
<?xml version="1.0" encoding="utf-8" ?>
<CRD xmlns="http://www.orin.jp/CRD/CRDSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.orin.jp/CRD/CRDSchema CRDSchema.xsd">
  <Controller name="PingStatus">
    <Variable name="0">
      <Value type="VT_BSTR">
        <bstrVal>IP_SUCCESS</bstrVal>
      </Value>
    </Variable>
    <Variable name="11001">
      <Value type="VT_BSTR">
        <bstrVal>IP_BUF_TOO_SMALL</bstrVal>
      </Value>
    </Variable>
    <Variable name="11002">
      <Value type="VT_BSTR">
        <bstrVal>IP_DEST_NET_UNREACHABLE</bstrVal>
      </Value>
    </Variable>
    <Variable name="11003">
      <Value type="VT_BSTR">
        <bstrVal>IP_DEST_HOST_UNREACHABLE</bstrVal>
      </Value>
    </Variable>
    <Variable name="11004">
      <Value type="VT_BSTR">
        <bstrVal>IP_DEST_PROT_UNREACHABLE</bstrVal>
      </Value>
    </Variable>
    <Variable name="11005">
      <Value type="VT_BSTR">
        <bstrVal>IP_DEST_PORT_UNREACHABLE</bstrVal>
      </Value>
    </Variable>
    <Variable name="11006">
      <Value type="VT_BSTR">
        <bstrVal>IP_NO_RESOURCES</bstrVal>
      </Value>
    </Variable>
    <Variable name="11007">
      <Value type="VT_BSTR">
        <bstrVal>IP_BAD_OPTION</bstrVal>
      </Value>
    </Variable>
    <Variable name="11008">
      <Value type="VT_BSTR">
        <bstrVal>IP_HW_ERROR</bstrVal>
      </Value>
    </Variable>
    <Variable name="11009">
      <Value type="VT_BSTR">
        <bstrVal>IP_PACKET_TOO_BIG</bstrVal>
      </Value>
    </Variable>
    <Variable name="11010">
      <Value type="VT_BSTR">
        <bstrVal>IP_REQ_TIMED_OUT</bstrVal>
      </Value>
    </Variable>
    <Variable name="11011">
      <Value type="VT_BSTR">
        <bstrVal>IP_BAD_REQ</bstrVal>
      </Value>
    </Variable>
    <Variable name="11012">
      <Value type="VT_BSTR">
        <bstrVal>IP_BAD_ROUTE</bstrVal>
      </Value>
    </Variable>
    <Variable name="11013">
      <Value type="VT_BSTR">
        <bstrVal>IP_TTL_EXPIRED_TRANSIT</bstrVal>
      </Value>
    </Variable>
    <Variable name="11014">
      <Value type="VT_BSTR">
        <bstrVal>IP_TTL_EXPIRED_REASSEM</bstrVal>
      </Value>
    </Variable>
    <Variable name="11015">
      <Value type="VT_BSTR">
        <bstrVal>IP_PARAM_PROBLEM</bstrVal>
      </Value>
    </Variable>
    <Variable name="11016">
      <Value type="VT_BSTR">
        <bstrVal>IP_SOURCE_QUENCH</bstrVal>
      </Value>
    </Variable>
    <Variable name="11017">
      <Value type="VT_BSTR">
        <bstrVal>IP_OPTION_TOO_BIG</bstrVal>
      </Value>
    </Variable>
    <Variable name="11018">
      <Value type="VT_BSTR">
        <bstrVal>IP_BAD_DESTINATION</bstrVal>
      </Value>
    </Variable>
  </Controller>
</CRD>

4-3. ソースコードの編集

以下のように修正する。
ただし、caoWS.AddController()のPathは各環境で修正すること。

Form1.cs
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;
using CAOLib;

namespace ORiNCaoApp
{
    public partial class Form1 : Form
    {
        private CaoEngine eng;
        private CaoWorkspace caoWS;
        private CaoController icmpCtrl;
        private CaoVariable icmpVar;
        private CaoController crdPingStatus;
        public Form1()
        {
            InitializeComponent();
            // CAOエンジンの生成
            eng = new CaoEngine();
            caoWS = eng.Workspaces.Item(0);
            crdPingStatus = caoWS.AddController("PingStatus", "CaoProv.CRD", "",
                "Path=//Mac/Home/Documents/project/ORiN2/Tutorial/CaoPingApp/CaoPingApp/tutorial.xml");
        }

        private void button_Ping_Click(object sender, EventArgs e)
        {
            // ICMPプロバイダに接続
            icmpCtrl = caoWS.AddController("Sample", "CaoProv.ICMP", "",
                "Host=" + textBox_IP_Address.Text);
            icmpVar = icmpCtrl.AddVariable("@ERROR_CODE");
            CaoVariable Result = icmpVar;
            // pingの送信
            CaoVariable stVar = crdPingStatus.AddVariable(Result.Value);
            textBox_Message.Text = stVar.Value.ToString();
            crdPingStatus.Variables.Clear();
            caoWS.Controllers.Remove(icmpCtrl.Index);
        }
    }
}

4-4. 実行

実行ボタンを押して実行する。

ORiNCaoAppのダイアログが表示されるので、上のテキストボックスに到達可能なIPアドレスを入力し、pingボタンを押す。到達できた場合は、テキストボックスにメッセージが表示される。

ORiN_11_OK.png

到達できなかった場合は、以下のようにエラーメッセージが表示される。
ORiN_12_NG.png

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?