Пример #1
0
        public Tuple <short, string> ReadProgramBlock(ushort flib, ref ReadProgramBlockResultModel data)
        {
            Focas1.ODBSEQ seq = new Focas1.ODBSEQ();
            var           ret = Focas1.cnc_rdseqnum(flib, seq);

            if (ret == 0)
            {
                data.Value = seq.data;

                return(new Tuple <short, string>(0, null));
            }
            else
            {
                return(new Tuple <short, string>(ret, $"读取程序段号错误,返回:{ret}"));
            }
        }
Пример #2
0
        public string read()
        {
            if (!isOpened)
            {
                throw new Exception("Must open cnc connection first!");
            }
            // logger.Info("Target ip: " + host + "; port: " + port);
            JObject resp = new JObject();

            resp["systemtime"]               = DateTime.Now.ToString() + "." + DateTime.Now.Millisecond.ToString();
            resp["centername"]               = "加工中心";
            resp["txtip"]                    = host;
            resp["machinename"]              = "FANUC Series 32i";
            resp["spec"]                     = "5505";
            resp["x_relative"]               = null;
            resp["z_relative"]               = null;
            resp["c_relative"]               = null;
            resp["v_relative"]               = null;
            resp["x_absolute"]               = null;
            resp["z_absolute"]               = null;
            resp["c_absolute"]               = null;
            resp["v_absolute"]               = null;
            resp["x_machine"]                = null;
            resp["z_machine"]                = null;
            resp["c_machine"]                = null;
            resp["v_machine"]                = null;
            resp["x_distancetogo"]           = null;
            resp["z_distancetogo"]           = null;
            resp["c_distancetogo"]           = null;
            resp["v_distancetogo"]           = null;
            resp["spindle_name"]             = null;
            resp["spindlenumber"]            = 1;
            resp["spindleload"]              = null;
            resp["spindlespeed"]             = null;
            resp["sv1_load"]                 = null;
            resp["sv2_load"]                 = null;
            resp["sv3_load"]                 = null;
            resp["sv4_load"]                 = null;
            resp["cnc_status"]               = null;
            resp["runningmode"]              = null;
            resp["currentrunningprogramnum"] = null;
            resp["mainprogramnumber"]        = null;
            resp["currentrunningncprogram"]  = null;
            resp["currenttoolgroupnum"]      = null;
            resp["currenttoolnum"]           = null;
            resp["svnum"]                    = null;
            resp["cnc_versionnum"]           = "3C7B5D01";
            resp["relfeedrate"]              = null;
            resp["alarm_status"]             = null;
            resp["alarmnum"]                 = null;
            resp["alarmtype"]                = null;
            resp["alarmmessage"]             = null;
            resp["operatingtime"]            = null;
            resp["circlingtime"]             = null;
            resp["cuttingtime"]              = null;
            resp["powerontime"]              = null;
            resp["totalparts"]               = null;
            resp["cnc_turn_on"]              = "开机";
            short code;

            {
                short         number = Focas1.MAX_AXIS;
                Focas1.ODBPOS pos    = new Focas1.ODBPOS();
                code = Focas1.cnc_rdposition(pHdl, -1, ref number, pos);
                if (code == 0)
                {
                    resp["x_relative"]     = pos.p1.rel.data * Math.Pow(10, -pos.p1.rel.dec);
                    resp["z_relative"]     = pos.p2.rel.data * Math.Pow(10, -pos.p2.rel.dec);
                    resp["c_relative"]     = pos.p4.rel.data * Math.Pow(10, -pos.p4.rel.dec);
                    resp["v_relative"]     = pos.p5.rel.data * Math.Pow(10, -pos.p5.rel.dec);
                    resp["x_absolute"]     = pos.p1.abs.data * Math.Pow(10, -pos.p1.abs.dec);
                    resp["z_absolute"]     = pos.p2.abs.data * Math.Pow(10, -pos.p2.abs.dec);
                    resp["c_absolute"]     = pos.p4.abs.data * Math.Pow(10, -pos.p4.abs.dec);
                    resp["v_absolute"]     = pos.p5.abs.data * Math.Pow(10, -pos.p5.abs.dec);
                    resp["x_machine"]      = pos.p1.mach.data * Math.Pow(10, -pos.p1.mach.dec);
                    resp["z_machine"]      = pos.p2.mach.data * Math.Pow(10, -pos.p2.mach.dec);
                    resp["c_machine"]      = pos.p4.mach.data * Math.Pow(10, -pos.p4.mach.dec);
                    resp["v_machine"]      = pos.p5.mach.data * Math.Pow(10, -pos.p5.mach.dec);
                    resp["x_distancetogo"] = pos.p1.dist.data * Math.Pow(10, -pos.p1.dist.dec);
                    resp["z_distancetogo"] = pos.p2.dist.data * Math.Pow(10, -pos.p2.dist.dec);
                    resp["c_distancetogo"] = pos.p4.dist.data * Math.Pow(10, -pos.p4.dist.dec);
                    resp["v_distancetogo"] = pos.p5.dist.data * Math.Pow(10, -pos.p5.dist.dec);
                }
            }
            {
                short number = 32;
                Focas1.ODBEXAXISNAME spindleName = new Focas1.ODBEXAXISNAME();
                code = Focas1.cnc_exaxisname(pHdl, 1, ref number, spindleName);
                if (code == 0)
                {
                    resp["spindle_name"] = spindleName.axname1;
                }
            }
            {
                Focas1.ODBSVLOAD sv    = new Focas1.ODBSVLOAD();
                Focas1.ODBSPLOAD sp    = new Focas1.ODBSPLOAD();
                short            a     = 6;
                short            code0 = Focas1.cnc_rdsvmeter(pHdl, ref a, sv);
                short            code1 = Focas1.cnc_rdspmeter(pHdl, 1, ref a, sp);
                if (code0 == 0)
                {
                    resp["sv1_load"] = sv.svload1.data;
                    resp["sv2_load"] = sv.svload2.data;
                    resp["sv3_load"] = sv.svload3.data;
                    resp["sv4_load"] = sv.svload4.data;
                }
                if (code1 == 0)
                {
                    resp["spindleload"] = sp.spload1.spload.data;
                }
            }
            {
                Focas1.ODBACT pindle = new Focas1.ODBACT();
                code = Focas1.cnc_acts(pHdl, pindle);
                if (code == 0)
                {
                    resp["spindlespeed"] = pindle.data;
                }
            }
            {
                Focas1.ODBST obst = new Focas1.ODBST();
                code = Focas1.cnc_statinfo(pHdl, obst);
                if (code == 0)
                {
                    resp["cnc_status"]   = obst.run;
                    resp["runningmode"]  = obst.tmmode;
                    resp["alarm_status"] = obst.alarm;
                }
            }
            {
                Focas1.ODBDY2_1 dynadata = new Focas1.ODBDY2_1();
                Focas1.ODBPRO   pro      = new Focas1.ODBPRO();
                Focas1.ODBSEQ   seqnum   = new Focas1.ODBSEQ();
                code = Focas1.cnc_rdprgnum(pHdl, pro);
                if (code == 0)
                {
                    resp["currentrunningprogramnum"] = pro.data;
                    resp["mainprogramnumber"]        = pro.mdata;
                }
                code = Focas1.cnc_rdseqnum(pHdl, seqnum);
                if (code == 0)
                {
                    resp["currentrunningncprogram"] = seqnum.data;
                }
            }
            {
                Focas1.ODBTG     btg = new Focas1.ODBTG();
                Focas1.ODBUSEGRP grp = new Focas1.ODBUSEGRP();
                code = Focas1.cnc_rdtlusegrp(pHdl, grp);
                short a = Convert.ToInt16(grp.use);
                code = Focas1.cnc_rdtoolgrp(pHdl, a, 20 + 20 * 1, btg);
                resp["currenttoolgroupnum"] = a;
                resp["currenttoolnum"]      = btg.data.data1.tool_num;
            }
            {
                Focas1.ODBSYS odbsys = new Focas1.ODBSYS();
                code = Focas1.cnc_sysinfo(pHdl, odbsys);
                if (code == 0)
                {
                    resp["svnum"] = odbsys.axes[1];
                }
            }
            {
                Focas1.ODBACT odbact = new Focas1.ODBACT();
                code = Focas1.cnc_actf(pHdl, odbact);
                if (code == 0)
                {
                    resp["relfeedrate"] = odbact.data;
                }
            }
            {
                short             b   = 8;
                Focas1.ODBALMMSG2 msg = new Focas1.ODBALMMSG2();
                code = Focas1.cnc_rdalmmsg2(pHdl, -1, ref b, msg);
                if (code == 0)
                {
                    resp["alarmnum"]     = msg.msg2.alm_no;
                    resp["alarmmessage"] = msg.msg2.alm_msg;
                }
            }
            {
                int alarm = 0;
                code = Focas1.cnc_alarm2(pHdl, out alarm);
                if (code == 0)
                {
                    resp["alarmtype"] = alarmTypeMapper.ContainsKey(alarm) ? alarmTypeMapper[alarm] : null;
                }
            }
            {
                Focas1.IODBPSD_1 param6751 = new Focas1.IODBPSD_1();
                Focas1.IODBPSD_1 param6752 = new Focas1.IODBPSD_1();
                code = Focas1.cnc_rdparam(pHdl, 6751, 0, 8, param6751);
                if (code == 0)
                {
                    int workingTimeSec = param6751.ldata / 1000;
                    code = Focas1.cnc_rdparam(pHdl, 6752, 0, 8, param6752);
                    if (code == 0)
                    {
                        int workingTimeMin = param6752.ldata;
                        int workingTime    = workingTimeMin * 60 + workingTimeSec;
                        resp["operatingtime"] = workingTime;
                    }
                }
            }
            {
                Focas1.IODBPSD_1 param6757 = new Focas1.IODBPSD_1();
                Focas1.IODBPSD_1 param6758 = new Focas1.IODBPSD_1();
                code = Focas1.cnc_rdparam(pHdl, 6757, 0, 8, param6757);
                if (code == 0)
                {
                    int circlingTimeSec = param6757.ldata / 1000;
                    code = Focas1.cnc_rdparam(pHdl, 6758, 0, 8, param6758);
                    if (code == 0)
                    {
                        int circlingTimeMin = param6758.ldata;
                        int workingTime     = circlingTimeMin * 60 + circlingTimeSec;
                        resp["circlingtime"] = workingTime;
                    }
                }
            }
            {
                Focas1.IODBPSD_1 param6753 = new Focas1.IODBPSD_1();
                Focas1.IODBPSD_1 param6754 = new Focas1.IODBPSD_1();
                code = Focas1.cnc_rdparam(pHdl, 6753, 0, 8 + 32, param6753);
                if (code == 0)
                {
                    int cuttingTimeSec = param6753.ldata / 1000;
                    code = Focas1.cnc_rdparam(pHdl, 6754, 0, 8 + 32, param6754);
                    if (code == 0)
                    {
                        int cuttingTimeMin = param6754.ldata;
                        int workingTime    = cuttingTimeMin * 60 + cuttingTimeSec;
                        resp["cuttingtime"] = workingTime;
                    }
                }
            }
            {
                Focas1.IODBPSD_1 param6750 = new Focas1.IODBPSD_1();
                code = Focas1.cnc_rdparam(pHdl, 6750, 0, 8 + 32, param6750);
                if (code == 0)
                {
                    int powerOnTime = param6750.ldata * 60;
                    resp["powerontime"] = powerOnTime;
                }
            }
            {
                Focas1.IODBPSD_1 param6712 = new Focas1.IODBPSD_1();
                code = Focas1.cnc_rdparam(pHdl, 6712, 0, 8, param6712);
                if (code == 0)
                {
                    resp["totalparts"] = param6712.ldata;
                }
            }
            return(resp.ToString());
        }