/// <summary> /// 获取相机位置,判断哪个相机可用 /// </summary> void GetCameraPositon() { Posistion posistion = new Posistion { x = RobitGroup.ReadD(0).CastTo <float>(-1), y = RobitGroup.ReadD(1).CastTo <float>(-1), z = RobitGroup.ReadD(2).CastTo <float>(-1), Ry = RobitGroup.ReadD(3).CastTo <float>(-1), Rx = RobitGroup.ReadD(4).CastTo <float>(-1), Rz = RobitGroup.ReadD(5).CastTo <float>(-1) }; //机器人矩阵 Transform transform = new Transform(); //相机矩阵 if (CalculatorClass.Rpy_to_trans(posistion, ref transform) == 0) //机器人姿态转为相机所在为位置 { } else { FormMain.GetOPCTaskInfo("机器人姿态转为相机位置失败"); } }
/// <summary> /// 当值发生改变时 /// </summary> /// <param name="group"></param> /// <param name="clientId"></param> /// <param name="values"></param> public async void OnDataChange(int group, int[] clientId, object[] values) { if (group == 2) //任务下发位置 { for (int i = 0; i < clientId.Length; i++) // 获取跳变信号 { int tempvalue = int.Parse((values[i].ToString())); //标志位 if (tempvalue == 0) //如果等于0 就是已经处理 可以下发任务 { if (!isWork) { isWork = true; aa : Posistion posistion = new Posistion { x = RobitGroup.ReadD(0).CastTo <float>(-1), y = RobitGroup.ReadD(1).CastTo <float>(-1), z = RobitGroup.ReadD(2).CastTo <float>(-1), Ry = RobitGroup.ReadD(3).CastTo <float>(-1), Rx = RobitGroup.ReadD(4).CastTo <float>(-1), Rz = RobitGroup.ReadD(5).CastTo <float>(-1) }; //机器人矩阵 Transform transform = new Transform(); //相机矩阵 if (CalculatorClass.Rpy_to_trans(posistion, ref transform) == 0) //机器人姿态转为相机所在为位置 { if (transform.v1.x > 0) //如果是一号热像仪可用 { CamIndex = 0; } else if (transform.v1.x > 1)//如果是二号热像仪可用 { CamIndex = 1; } else//都不可用的情况下 再取一次机器人的位置 { Thread.Sleep(50); goto aa; } FormDisplay frmDisplay = _DataControl.GetBindedDisplayForm(_LstEnumInfo[CamIndex].intCamIp); //选择已经绑定的IP的显示窗口 FormMain.GetOPCTaskInfo("正在使用窗体:" + frmDisplay.Name + "的热像仪!"); object[] obj = new object[36]; RpyGroup.SyncWrite(obj);//写入坐标和温度 isWork = false; } else { FormMain.GetOPCTaskInfo("机器人姿态转为相机位置失败"); } } else { FormMain.GetOPCTaskInfo("在获取热点信息时,产生了一次跳变信号,第" + JumpSingle + "次"); JumpSingle++; } } else { FormMain.GetOPCTaskInfo("跳变未找到Group组"); } } } #region 暂时无用 //else if (group == 3)//机器人姿态位置 //{ // for (int i = 0; i < clientId.Length; i++)// 获取跳变信号 // { // aa: Posistion posistion = new Posistion // { // x = float.Parse(RobitGroup.ReadD(0).ToString()), // y = float.Parse(RobitGroup.ReadD(1).ToString()), // z = float.Parse(RobitGroup.ReadD(2).ToString()), // Rx = float.Parse(RobitGroup.ReadD(3).ToString()), // Ry = float.Parse(RobitGroup.ReadD(4).ToString()), // Rz = float.Parse(RobitGroup.ReadD(5).ToString()) // }; // Transform transform = new Transform(); // if (CalculatorClass.Rpy_to_trans(posistion, ref transform) > 0)//机器人姿态转换相机位置 // { // if(transform.v1.x > 0)//如果是一号热像仪可用 // { // CamIndex = 0; // } // else if(transform.v1.x > 1)//如果是二号热像仪可用 // { // CamIndex = 1; // } // else//都不可用的情况下 再取一次机器人的位置 // { // goto aa; // } // FormDisplay frmDisplay = _DataControl.GetBindedDisplayForm(_LstEnumInfo[CamIndex].intCamIp); //选择已经绑定的IP的显示窗口 // FormMain.GetOPCTaskInfo("正在使用窗体:"+frmDisplay.Name +"的热像仪!"); // object[] obj = new object[36]; // await Task.Run(()=> frmDisplay.GetInfo(1, out obj) ); // RpyGroup.SyncWrite(obj);//写入坐标和温度 // } // else // { // FormMain.GetOPCTaskInfo("Rpy_to_trans:机器人姿态值转变失败,组:" + group); // } // } //} #endregion else { FormMain.GetOPCTaskInfo("跳变信号组错误,组:" + group); } }