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