Beispiel #1
0
        public double GetAllAxisAbsolutePositions()
        {
            if (_handle == 0)
            {
                return(0);
            }

            try
            {
                Focas1.ODBAXIS _axisPositionMachine = new Focas1.ODBAXIS();
                _ret = Focas1.cnc_absolute(_handle, -1, 4 + 4 * Focas1.MAX_AXIS, _axisPositionMachine);

                if (_ret != Focas1.EW_OK)
                {
                    return(_ret);
                }

                for (int i = 0; i < Focas1.MAX_AXIS; i++)
                {
                    Console.WriteLine(i.ToString() + " = " + _axisPositionMachine.data[i] / _scale);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            return(0);
        }
Beispiel #2
0
        /// <summary>
        /// Read Machine Position Data (MachineAbsolutePosition)
        /// </summary>
        /// <param name="axisNo">Axis No</param>
        private void CallAbsolute(short axisNo)
        {
            try
            {
                Focas1.ODBAXIS odbAxis = new Focas1.ODBAXIS();
                short          pAxisNo = (short)(axisNo + 1);

                focasReturn = Focas1.cnc_absolute2(fanucHandle, pAxisNo, 8, odbAxis);

                if (focasReturn == EW_OK)
                {
                    base.SetDictionary(base.AXIS_ABS, axisNo, Convert.ToDouble(odbAxis.data[0]) / 1000);

                    LogHandler.WriteLog(base.division, string.Format("{0} :: CallAbsolute(AxisNo = {2}) Success :: ABS = {1}", this.ToString(), base.AXIS_ABS[axisNo], axisNo));
                }
                else if (focasReturn == EW_SOCKET)
                {
                    base.isConnect = false;
                    LogHandler.WriteLog(base.division, string.Format("{0} :: CallAbsolute(AxisNo = {1}) Fail :: SocketError", this.ToString(), axisNo));
                }
                else
                {
                    LogHandler.WriteLog(base.division, string.Format("{0} :: CallAbsolute(AxisNo = {2}) Fail :: ReturnCode = {1}", this.ToString(), focasReturn, axisNo));
                }
            }
            catch (Exception ex)
            {
                LogHandler.WriteLog(base.division, string.Format("{0} :: CallAbsolute(AxisNo = {2}) Exception :: Message = {1}", this.ToString(), ex.Message, axisNo));
            }
        }
Beispiel #3
0
        public void Callback(object sender, EventArgs e)
        {
            MySqlConnection conn = connSql();

            conn.Open();
            #region cnc_machine
            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();
            for (short i = 0; i < 3; i++)
            {
                int ret = Focas1.cnc_machine(Flibhndl, (short)(i + 1), 8, odbaxis);
                Console.WriteLine(odbaxis.data[0] * Math.Pow(10, -3));
                listView1.Items.Add(new ListViewItem(i.ToString()));

                try
                {
                    //MessageBox.Show("已经建立与数据库之间的连接");
                    string       sql    = "insert into user(username,password,registerdate) values('" + count++.ToString() + "','123','" + DateTime.Now + "')";
                    MySqlCommand cmd    = new MySqlCommand(sql, conn);
                    int          result = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("发生错误:" + ex.Message);
                    //Console.WriteLine("发生错误:"+ex.Message); //在控制台下使用这种方式
                }
            }
            #endregion
        }
Beispiel #4
0
 //读待走移动量
 #region cnc_distance
 void IMachineFanuc.GetDistanceToGo(double[] distanceCoor)
 {
     Focas1.ODBAXIS odbaxis_Distance = new Focas1.ODBAXIS();
     for (short i = 1; i <= 4; i++)
     {
         Focas1.cnc_distance(mFlibhndl, i, 8, odbaxis_Distance);
         distanceCoor[i - 1] = odbaxis_Distance.data[0] * Math.Pow(10, -3);
     }
 }
Beispiel #5
0
 //读取相对位置坐标
 #region cnc_relative2
 void IMachineFanuc.GetRelativeCoor(double[] relativeCoor)
 {
     Focas1.ODBAXIS odbaxis_RelativeCoor = new Focas1.ODBAXIS();
     for (short i = 1; i <= 4; i++)
     {
         Focas1.cnc_relative2(mFlibhndl, i, 8, odbaxis_RelativeCoor);
         relativeCoor[i - 1] = odbaxis_RelativeCoor.data[0] * Math.Pow(10, -3);
     }
 }
Beispiel #6
0
 //获取绝对位置坐标
 #region cnc_absolute2
 void IMachineFanuc.GetAbsoluteCoor(double[] absoluteCoor)
 {
     Focas1.ODBAXIS odbaxis_AbsoCoor = new Focas1.ODBAXIS();
     for (short i = 1; i <= 4; i++)
     {
         Focas1.cnc_absolute2(mFlibhndl, i, 8, odbaxis_AbsoCoor);
         absoluteCoor[i - 1] = odbaxis_AbsoCoor.data[0] * Math.Pow(10, -3);
     }
 }
Beispiel #7
0
 //获取机械坐标
 #region cnc_machine
 void IMachineFanuc.GetMachineCoor(double[] machCoor)
 {
     Focas1.ODBAXIS odbaxis_MachCoor = new Focas1.ODBAXIS();
     for (short i = 0; i <= 3; i++)
     {
         Focas1.cnc_machine(mFlibhndl, (short)(i + 1), 8, odbaxis_MachCoor);
         machCoor[i] = odbaxis_MachCoor.data[0] * Math.Pow(10, -3);
     }
 }
Beispiel #8
0
        /// <summary>
        /// 获得机床相对坐标
        /// </summary>
        public double GetRelativeCorX(ushort Flibhndl)                  //获得相对X轴
        {
            Focas1.ODBST   odbst   = new Focas1.ODBST();
            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();

            short  ret2       = Focas1.cnc_relative2(Flibhndl, 1, 16, odbaxis);
            string relative2X = odbaxis.data[0].ToString();
            double x          = Convert.ToDouble(relative2X) / 1000;

            return(x);
        }
Beispiel #9
0
        public double GetMachineCor3(ushort Flibhndl)     //Z轴
        {
            double cor3;

            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();

            short ret = Focas1.cnc_machine(Flibhndl, (short)(3), 8, odbaxis);

            cor3 = odbaxis.data[0] * Math.Pow(10, -3);
            return(cor3);
        }
Beispiel #10
0
        public double GetMachineCor2(ushort Flibhndl)     //Y轴
        {
            double cor2;

            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();

            short ret = Focas1.cnc_machine(Flibhndl, (short)(2), 8, odbaxis);

            cor2 = odbaxis.data[0] * Math.Pow(10, -4);
            return(cor2 * 10);
        }
Beispiel #11
0
        public static void connectToFanucDevice(string ip, string port, int timeout)
        {
            int ret;
            int status;

            Focas1.ODBST fanbuf; // CNC Status

            ret = Focas1.cnc_allclibhndl3(ip, Convert.ToUInt16(port), timeout, out handleFanuc);
            if (ret != Focas1.EW_OK)
            {
                Console.WriteLine("Fanuc lathe connection error£¡");
                return;
            }

            //coordination of the arm
            Focas1.ODBAXIS odbaxis = new Focas1.ODBAXIS();
            for (short i = 0; i < 3; i++)
            {
                ret = Focas1.cnc_machine(handleFanuc, (short)(i + 1), 8, odbaxis);
                Console.WriteLine(odbaxis.data[0] * Math.Pow(10, -4));
            }

            fanbuf = new Focas1.ODBST();
            ret    = Focas1.cnc_statinfo(handleFanuc, fanbuf);
            if (ret == Focas1.EW_OK)
            {
                status = fanbuf.run;

                switch (status)
                {
                case 0:
                    Console.WriteLine("Fanuc lathe in shutdown mode£¡");
                    break;

                case 1:
                    Console.WriteLine("Fanuc lathe in standby mode£¡");
                    break;

                case 2:
                    Console.WriteLine("Fanuc lathe in hold mode£¡");
                    break;

                case 3:
                    Console.WriteLine("Fanuc lathe in start mode£¡");
                    break;

                case 4:
                    Console.WriteLine("Fanuc lathe in manual mode, retraction and re-positioning of tools");
                    break;
                }
            }
        }
Beispiel #12
0
        public double MachinePosition()
        {
            if (_handle == 0)
            {
                return(0);
            }

            Focas1.ODBAXIS _axisPositionMachine = new Focas1.ODBAXIS();
            _ret = Focas1.cnc_machine(_handle, 88, 8, _axisPositionMachine);

            if (_ret != Focas1.EW_OK)
            {
                return(_ret);
            }

            return(_axisPositionMachine.data[0] / _scale);
        }
Beispiel #13
0
        public double RelativePosition()
        {
            if (_handle == 0)
            {
                return(0);
            }

            Focas1.ODBAXIS _axisPositionRelative = new Focas1.ODBAXIS();
            _ret = Focas1.cnc_relative2(_handle, 88, 8, _axisPositionRelative);

            if (_ret != Focas1.EW_OK)
            {
                return(_ret);
            }

            return(_axisPositionRelative.data[0] / _scale);
        }
Beispiel #14
0
        public double AbsolutePosition()
        {
            if (_handle == 0)
            {
                return(0);
            }

            Focas1.ODBAXIS _axisPositionAbsolute = new Focas1.ODBAXIS();
            _ret = Focas1.cnc_absolute2(_handle, 88, 8, _axisPositionAbsolute);

            if (_ret != Focas1.EW_OK)
            {
                return(_ret);
            }

            return(_axisPositionAbsolute.data[0] / _scale);
        }
Beispiel #15
0
        public Tuple <short, string> ReadParaReferencePositionRange(ushort flib, int start, int num, ref double[,] data)
        {
            if (start > 4 || start < 1)
            {
                return(new Tuple <short, string>(-100, "读取参考点数据错误,参考点参数数据设定错误"));
            }
            if ((start + num - 1) > 4 || (start + num - 1) < 1)
            {
                return(new Tuple <short, string>(-100, "读取参考点数据错误,参考点参数数据设定错误"));
            }
            if (data.Length < Focas1.MAX_AXIS * 4)
            {
                return(new Tuple <short, string>(-100, "读取参考点数据错误,数据存储区域过小"));
            }

            Focas1.ODBAXIS buf = new Focas1.ODBAXIS();
            buf.data = new int[Focas1.MAX_AXIS];
            short ret = -100;

            short s_number = (short)(start + 1239);
            short e_number = (short)(s_number + num - 1);
            short length   = (short)((4 + 8 * Focas1.MAX_AXIS + 2) * num);

            Focas1.IODBPSD_0IF param = new Focas1.IODBPSD_0IF();
            ret = Focas1.cnc_rdparar(flib, ref s_number, -1, ref e_number, ref length, param);
            if (ret == 0)
            {
                for (int i = 0; i < num; i++)
                {
                    string strdata = "data" + (i + 1).ToString();
                    object obj     = param.GetType().GetField(strdata).GetValue(param);
                    var    u       = (Focas1.IODBPSD_U)obj.GetType().GetField("u").GetValue(obj);

                    for (int j = 0; j < Focas1.MAX_AXIS; j++)
                    {
                        data[start + i - 1, j] = u.rdatas[j].prm_val * Math.Pow(-10, u.rdatas[j].dec_val);
                    }
                }
                return(new Tuple <short, string>(0, null));
            }

            return(new Tuple <short, string>(ret, $"读取参考点数据错误,返回:{ret}"));
        }
Beispiel #16
0
        public Tuple <short, string> ReadPositionRange(ushort flib, CncPositionTypeEnum pos_type, ref int[] data)
        {
            if (data.Length < Focas1.MAX_AXIS)
            {
                return(new Tuple <short, string>(-100, "读取位置信息错误,数据存储区域过小"));
            }

            Focas1.ODBAXIS buf = new Focas1.ODBAXIS();
            buf.data = new int[Focas1.MAX_AXIS];
            short ret = -100;

            switch (pos_type)
            {
            case CncPositionTypeEnum.Absolute:
                ret = Focas1.cnc_absolute(flib, -1, 132, buf);
                break;

            case CncPositionTypeEnum.Machine:
                ret = Focas1.cnc_machine(flib, -1, 132, buf);
                break;

            case CncPositionTypeEnum.Relative:
                ret = Focas1.cnc_relative(flib, -1, 132, buf);
                break;

            case CncPositionTypeEnum.Distance:
                ret = Focas1.cnc_distance(flib, -1, 132, buf);
                break;

            default:
                ret = -100;
                break;
            }

            if (ret == 0)
            {
                buf.data.CopyTo(data, 0);
                return(new Tuple <short, string>(0, null));
            }

            return(new Tuple <short, string>(ret, $"读取位置信号错误,返回:{ret}"));
        }