Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9743

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

$
0
0

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
namespaceORiNCaoApp{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton_Ping_Click(objectsender,EventArgse){}}}

3-6. コーディング

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

Form1.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingCAOLib;namespaceORiNCaoApp{publicpartialclassForm1:Form{privateCaoEngineeng;privateCaoWorkspacecaoWS;privateCaoControllericmpCtrl;privateCaoVariableicmpVar;publicForm1(){InitializeComponent();// CAOエンジンの生成eng=newCaoEngine();caoWS=eng.Workspaces.Item(0);}privatevoidbutton_Ping_Click(objectsender,EventArgse){// 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
<?xmlversion="1.0"encoding="utf-8"?><CRDxmlns="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"><Controllername="PingStatus"><Variablename="0"><Valuetype="VT_BSTR"><bstrVal>IP_SUCCESS</bstrVal></Value></Variable><Variablename="11001"><Valuetype="VT_BSTR"><bstrVal>IP_BUF_TOO_SMALL</bstrVal></Value></Variable><Variablename="11002"><Valuetype="VT_BSTR"><bstrVal>IP_DEST_NET_UNREACHABLE</bstrVal></Value></Variable><Variablename="11003"><Valuetype="VT_BSTR"><bstrVal>IP_DEST_HOST_UNREACHABLE</bstrVal></Value></Variable><Variablename="11004"><Valuetype="VT_BSTR"><bstrVal>IP_DEST_PROT_UNREACHABLE</bstrVal></Value></Variable><Variablename="11005"><Valuetype="VT_BSTR"><bstrVal>IP_DEST_PORT_UNREACHABLE</bstrVal></Value></Variable><Variablename="11006"><Valuetype="VT_BSTR"><bstrVal>IP_NO_RESOURCES</bstrVal></Value></Variable><Variablename="11007"><Valuetype="VT_BSTR"><bstrVal>IP_BAD_OPTION</bstrVal></Value></Variable><Variablename="11008"><Valuetype="VT_BSTR"><bstrVal>IP_HW_ERROR</bstrVal></Value></Variable><Variablename="11009"><Valuetype="VT_BSTR"><bstrVal>IP_PACKET_TOO_BIG</bstrVal></Value></Variable><Variablename="11010"><Valuetype="VT_BSTR"><bstrVal>IP_REQ_TIMED_OUT</bstrVal></Value></Variable><Variablename="11011"><Valuetype="VT_BSTR"><bstrVal>IP_BAD_REQ</bstrVal></Value></Variable><Variablename="11012"><Valuetype="VT_BSTR"><bstrVal>IP_BAD_ROUTE</bstrVal></Value></Variable><Variablename="11013"><Valuetype="VT_BSTR"><bstrVal>IP_TTL_EXPIRED_TRANSIT</bstrVal></Value></Variable><Variablename="11014"><Valuetype="VT_BSTR"><bstrVal>IP_TTL_EXPIRED_REASSEM</bstrVal></Value></Variable><Variablename="11015"><Valuetype="VT_BSTR"><bstrVal>IP_PARAM_PROBLEM</bstrVal></Value></Variable><Variablename="11016"><Valuetype="VT_BSTR"><bstrVal>IP_SOURCE_QUENCH</bstrVal></Value></Variable><Variablename="11017"><Valuetype="VT_BSTR"><bstrVal>IP_OPTION_TOO_BIG</bstrVal></Value></Variable><Variablename="11018"><Valuetype="VT_BSTR"><bstrVal>IP_BAD_DESTINATION</bstrVal></Value></Variable></Controller></CRD>

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

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

Form1.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingCAOLib;namespaceORiNCaoApp{publicpartialclassForm1:Form{privateCaoEngineeng;privateCaoWorkspacecaoWS;privateCaoControllericmpCtrl;privateCaoVariableicmpVar;privateCaoControllercrdPingStatus;publicForm1(){InitializeComponent();// CAOエンジンの生成eng=newCaoEngine();caoWS=eng.Workspaces.Item(0);crdPingStatus=caoWS.AddController("PingStatus","CaoProv.CRD","","Path=//Mac/Home/Documents/project/ORiN2/Tutorial/CaoPingApp/CaoPingApp/tutorial.xml");}privatevoidbutton_Ping_Click(objectsender,EventArgse){// ICMPプロバイダに接続icmpCtrl=caoWS.AddController("Sample","CaoProv.ICMP","","Host="+textBox_IP_Address.Text);icmpVar=icmpCtrl.AddVariable("@ERROR_CODE");CaoVariableResult=icmpVar;// pingの送信CaoVariablestVar=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

以上


Viewing all articles
Browse latest Browse all 9743

Trending Articles