using System;
using System.Collections.Generic;
using System.Threading;
using ORiN2.ManagedCAO;
namespace Sample
{
///
/// 川崎重工 Fシリーズコントローラプロバイダ サンプルプログラム
///
///
/// ・ プログラム開始時にtestというプログラムを実行開始
/// ・ 1秒ごとに現在位置を取得してコンソールに表示
/// ・ プログラム終了時にプログラムを停止
///
class Program
{
static string CTL_NAME = "SampleController";
static string CTL_PROV = "CaoProv.Kawasaki.KRCC";
// 接続先を自PCのPCASにしています。必要に応じて変更してください
// static string CTL_OPTION = "CONN=TCP:127.0.0.1";
//(変更例)実機の場合(IPアドレスに加え、ポートNoも設定)
static string CTL_OPTION = "CONN=TCP:192.168.0.72:23";
//static string CTL_OPTION = "CONN=TCP:192.168.0.11:23";
static string SV_PATH = "C:\\temp\\orin\\FCON_DATA.pg";
static string LD_PATH = "C:\\temp\\orin\\orin.pg";
static void Main(string[] args)
{
// CCaoEngineの作成
// using節を使うとスコープが切れたときに自動的にDisposeが呼び出されて解放される
using (CCaoEngine engine = new CCaoEngine())
{
bool run_fg = true;
while (run_fg)
{
Console.WriteLine("-----------------------------------------------------------------");
Console.WriteLine("Controler Check ");
Console.WriteLine("");
Console.WriteLine("1:Variables check 2:Loop Running Check other: end");
Console.WriteLine("-----------------------------------------------------------------");
string key =Console.ReadLine();
if (int.TryParse(key,out int result))
{
switch(result)
{
case 1:
valiableCheck(engine);
break;
case 2:
loopCheck(engine);
break;
default:
run_fg = false;
break;
}
}
else
{
run_fg = false;
}
}
}
}
static void valiableCheck(CCaoEngine engine)
{
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.Refresh();
CCaoController controller = engine.Workspaces[0].AddController(CTL_NAME, CTL_PROV, null, CTL_OPTION);
// System Valiable Set & Read
CCaoVariable val_sName = controller.AddVariable("@MAKER_NAME", "");
string s_val = val_sName.Value.ToString();
Console.WriteLine($"@MAKER_NAME : [{s_val}] OK");
CCaoVariable val_sVer = controller.AddVariable("@VERSION", "");
s_val = val_sVer.Value.ToString();
Console.WriteLine($"@VERSION : [{s_val}] OK");
CCaoVariable val_sPosit = controller.AddVariable("@CURRENT_POSITION", "");
double[] p_val = val_sPosit.Value as double[];
s_val = "";
for (int i = 0; i < p_val.Length; i++) s_val += $" {p_val[i]},";
Console.WriteLine($"@CURRENT_POSITION : [{s_val}] OK");
CCaoVariable val_sAngle = controller.AddVariable("@CURRENT_ANGLE", "");
double[] a_val = val_sAngle.Value as double[];
s_val = "";
for (int i = 0; i < a_val.Length; i++) s_val += $" {a_val[i]},";
Console.WriteLine($"@CURRENT_ANGLE : [{s_val}] OK");
// User Valiable
// 下記はユーザ指定の変数の定義と Get/Putの設定例です。
// 必要に応じて参照してください
//
//CCaoVariable val_uInt = controller.AddVariable("U_IntData", "Name=@IntData,Type=INT");
//val_uInt.Value = 123;
//s_val = val_uInt.Value.ToString();
//Console.WriteLine($"U_IntData : [{s_val}] OK");
//
//CCaoVariable val_uReal = controller.AddVariable("U_RealData", "Name=RealData,Type=REAL");
//val_uReal.Value = 123.4567;
//s_val = val_uReal.Value.ToString();
//Console.WriteLine($"U_RealData : [{s_val}] OK");
//
//CCaoVariable val_uStr = controller.AddVariable("U_StrData", "Name=$StrData,Type=STRING");
//val_uStr.Value = "TEST_Data";
//s_val = val_uStr.Value.ToString();
//Console.WriteLine($"U_StrData : [{s_val}] OK");
// < POSE型変数 >
//CCaoVariable val_uPose = controller.AddVariable("#U_PosData", "Name=#PosData,Type=POSE");
//List inp_val = new List() {1,2,3,4,5,6};
//val_uPose.Value = (object)inp_val;
//double[] put_val = val_uPose.Value as double[];
//s_val = "";
//for (int i = 0; i < put_val.Length; i++) s_val += $" {put_val[i]},";
//Console.WriteLine($"@U_PosData : [{s_val}] OK");
}
static void loopCheck(CCaoEngine engine)
{
CCaoController controller;
CCaoVariable variable;
bool run_fg = true;
int idx;
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
while (run_fg)
{
Console.WriteLine("< 2.Loop Check >");
Console.WriteLine(" 1 - Controller add and remove.");
Console.WriteLine(" 2 - Variable add and remove.");
Console.WriteLine(" 3 - Variable get value.");
Console.WriteLine(" 4 - Program execute and abort.");
Console.WriteLine(" 5 - Program hold and continue.");
Console.WriteLine(" 6 - Set speed.");
Console.WriteLine(" 7 - Save.");
Console.WriteLine(" 8 - Load.");
Console.WriteLine(" other - back to main");
Console.WriteLine("--------------------------------------");
Console.WriteLine("input {No} {count}");
string keys = Console.ReadLine();
string[] key = keys.Split(' ');
if (key.Length < 2) return;
if (!int.TryParse(key[0], out int ikey)) return;
if (!int.TryParse(key[1], out int icnt)) return;
proc.Refresh();
Console.WriteLine($"Memory(.WorkingSet:{proc.WorkingSet64:N0} .VirtualMemory:{proc.VirtualMemorySize64:N0})");
switch (ikey)
{
case 1:
Console.WriteLine(" Controller add and remove start.");
// 仮想メモリ量 ex) 290,201,600
for (int i=0;i