Ejemplo n.º 1
0
        /// <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("机器人姿态转为相机位置失败");
            }
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }