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を起動し、ファイル>新規作成>プロジェクトでプロジェクトを作成する。
- 新しいプロジェクトダイアログが表示される
- 左メニューから
インストール済み>Windowsデスクトップを選択 Windows フォームアプリケーション(.NET Framework) Visual C#を選択- プロジェクトの名前を
ORiNCaoAppに指定 - OKボタンを押す
![ORIN_newproj.png]()
3-2. フォームの作成
以下のコントロールを配置する。
(1) 入力用テキストボックス
Name: textBox_IP_Address
(2) メッセージ出力用テキストボックス
Name: textBox_Message
(3) pingボタン
Name: button_Ping
Text: ping
ついでにフォームの名前も変更し、サイズもいい感じにする。
Text: ORiNCaoApp
3-3. コードを書く準備
ソリューションエクスプローラーからForm1.csを選んで右クリックし、コードの表示を選択する。
3-4. CAOライブラリを追加する
3-5. pingボタンのメソッドを追加
Form1.cs[デザイン]タブで、pingボタンをダブルクリックする。Form1.csタブのソースコードに、button_Ping_Click()が追加されたことを確認する。
以下のようになっているはず。
namespaceORiNCaoApp{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton_Ping_Click(objectsender,EventArgse){}}}3-6. コーディング
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が表示される。
到達できなかった場合は、以下のように0以外のエラーコードが表示される。
4. CRDチュートリアル
CAOチュートリアルの機能に追加して、CRDファイルでエラーコードとメッセージを登録し、エラーコードに対応したエラーメッセージを表示する。
4-1. tutorial.xmlを追加する
ソリューションエクスプローラからORiNCaoAppを選択し、右クリックメニューで追加>新しい項目をクリックする。
新しい項目の追加ダイアログが表示されるので、左メニューからVisual C#アイテム>Dataを選ぶと候補が表示される。XMLを選択し、名前をtutorial.xmlにする。
追加ボタンを押す。
4-2. tutorial.xmlを編集する
以下の内容を記載する。
先頭のcodingをutf-8に変更した以外は、元のサンプルからそのまま持ってくる。
<?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は各環境で修正すること。
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ボタンを押す。到達できた場合は、テキストボックスにメッセージが表示される。
到達できなかった場合は、以下のようにエラーメッセージが表示される。
以上





