Exemplo n.º 1
0
        public string InitAllSensors(int machineId, string connectionId)
        {
            // 保存连接信息
            if (!AddClient(machineId, connectionId))
            {
                return("connected server faild");
            }
            string curAxisNum = "";
            string curMeters  = "";

            try {
                initDicCache(machineId, out curAxisNum, out curMeters);
            } catch (Exception e) {
                Debug.Write(e.ToString());
            }
            var bllMach            = new MesWeb.BLL.T_Machine();
            var machine            = bllMach.GetModel(machineId);
            VM_MachineProperty pty = null;

            try {
                //缓存中数据存在,则从缓存中读取
                if (curMachPtyDic.TryGetValue(machineId, out pty))
                {
                }
                else
                {
                    pty               = new VM_MachineProperty();
                    pty.MachineName   = machine.MachineName;
                    pty.CurrentMeters = curMeters;
                    pty.AxisNum       = curAxisNum;
                    pty.ODMax         = decimal.MinValue;
                    pty.ODMin         = decimal.MaxValue;
                    //添加到缓存中去
                    curMachPtyDic.TryAdd(machineId, pty);
                }
            } catch (Exception e) {
                log = LogFactory.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName + ":" + MethodBase.GetCurrentMethod().Name);
                log.Error("获取机台属性失败", e);
            }


            return("axis: " + curAxisNum + " meters: " + curMeters);
        }
Exemplo n.º 2
0
        /////////////////////
        protected VM_MachineProperty GetMachineProperty(int Id)
        {
            log = LogFactory.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName + ":" + MethodBase.GetCurrentMethod().Name);

            var machLayout = bllLayout.GetModel(Id);
            var machPty    = new VM_MachineProperty();

            if (machLayout != null)
            {
                if (machLayout.LayoutTypeID == (int)LAYOUT_TPYE.MACHINE)
                {
                    try {
                        var bllMach     = new MesWeb.BLL.T_Machine();
                        var bllCurData  = new MesWeb.BLL.T_CurrentData();
                        var bllEmployee = new MesWeb.BLL.T_Employee();
                        var bllSpec     = new MesWeb.BLL.T_Specification();
                        var bllColData  = new MesWeb.BLL.T_CollectedDataParameters();

                        var mach = bllMach.GetModel((int)machLayout.TableRowID);
                        if (mach == null)
                        {
                            return(null);
                        }
                        var curData = bllCurData.GetModelList("MachineID = " + mach.MachineID).FirstOrDefault();
                        if (curData == null)
                        {
                            return(null);
                        }
                        ///  var emmployee = bllEmployee.GetModel((int)curData.EmployeeID_Main);
                        var spec         = bllSpec.GetModel((int)curData.SpecificationID);
                        var curMeters    = bllColData.GetModelList("MachineID = " + mach.MachineID + " AND  ParameterCodeID = " + (int)SPEC_PARAM_CODE.METERS_COUNT_FACT).FirstOrDefault().CollectedValue;
                        var materialRFID = bllColData.GetModelList("MachineID = " + mach.MachineID + " AND  ParameterCodeID = " + (int)SPEC_PARAM_CODE.MATERIAL_RFID).FirstOrDefault().CollectedValue;
                        var linearSpeed  = bllColData.GetModelList("MachineID = " + mach.MachineID + " AND  ParameterCodeID = " + (int)SPEC_PARAM_CODE.LINEAR_SPEED).FirstOrDefault().CollectedValue;

                        machPty.MachineName = mach.MachineName;
                        machPty.TaskNum     = "4000";
                        machPty.AxisNum     = curData.Axis_No;
                        //   machPty.ManuMan = emmployee.EmployeeName;
                        machPty.ManuMan       = "张三";
                        machPty.SpecNum       = spec.SpecificationName;
                        machPty.ODMax         = spec.ODMax;
                        machPty.ODMin         = spec.ODMin;
                        machPty.SpecColor     = spec.SpecificationColor;
                        machPty.UnitPrice     = spec.SpecificationPrice;
                        machPty.MaterialRFID  = materialRFID;
                        machPty.CurrentMeters = curMeters;
                        machPty.BatchNum      = "Na";
                        machPty.ContUnit      = "Na";
                        machPty.JobNum        = "Na";
                        machPty.EstTime       = ((40000 - double.Parse(curMeters)) / double.Parse(linearSpeed) / 60).ToString("0.00") + "分钟";
                        machPty.ReachedNum    = (double.Parse(curMeters) * 100 / 4000 + "%").ToString();
                    } catch (Exception e) {
                        log.Error("数据库操作失败", e);
                        return(null);
                    }
                }
                else
                {
                    log.Error("该标志不属于机台");
                    return(null);
                }
            }
            else
            {
                log.Error("查找机台失败!");
                return(null);
            }
            return(machPty);
        }
Exemplo n.º 3
0
        public void UpdateSensorData(DataDisplay.StructData dpData)
        {
            var sensorData = new SensorData();

            List <T_CollectedDataParameters> colData = new List <T_CollectedDataParameters>();
            List <T_CodeUsing> code = new List <T_CodeUsing>();

            try {
                if (!string.IsNullOrEmpty(dpData.datamain))
                {
                    dpData.datamain = dpData.datamain.Replace(":abc123", ":\"\"").Replace("\"abc123\"", "\"\"");
                    code            = JsonConvert.DeserializeObject <List <T_CodeUsing> >(dpData.datamain);
                }
                if (!string.IsNullOrEmpty(dpData.datadetail))
                {
                    dpData.datadetail = dpData.datadetail.Replace(":abc123", ":\"\"").Replace("\"abc123\"", "\"\"");
                    colData           = JsonConvert.DeserializeObject <List <T_CollectedDataParameters> >(dpData.datadetail);
                }
                if (!string.IsNullOrEmpty(dpData.faultdata))
                {
                    sensorData.Fault = JsonConvert.DeserializeObject <T_FaultModule>(dpData.faultdata);
                }
                sensorData.CodeUsing     = code;
                sensorData.CollectedData = colData;
                updateCurModuleStateDic(sensorData);
            } catch (Exception e) {
                Debug.Write(e.ToString());
                return;
            }
            mapParamCode(sensorData);
            #region 来自于中心服务器测试数据
            ////++testMeters;
            //Random random = new Random();
            //timer = new Timer(testTimerHub,null,random.Next(1000,5000),0);
            //List<T_CollectedDataParameters> colData = new List<T_CollectedDataParameters> {
            //    //现场温度
            //    new T_CollectedDataParameters {
            //        CollectedTime =DateTime.UtcNow,
            //        CollectedValue =  random.Next(-20,100).ToString(),
            //        ParameterCodeID = 3,
            //        MachineID = 22
            //    },
            //    //六段温度
            //  new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(1,3).ToString(),
            //        ParameterCodeID = (int) SPEC_PARAM_CODE.INNER_OD,
            //        MachineID = 22
            //    },
            // new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(2,5).ToString(),
            //        ParameterCodeID = (int)SPEC_PARAM_CODE.OUTTER_OD,
            //        MachineID = 22
            //    },
            // new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(-20,100).ToString(),
            //        ParameterCodeID = 16,
            //        MachineID = 22
            //    },
            // new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(-20,100).ToString(),
            //        ParameterCodeID = 18,
            //        MachineID = 22
            //    },
            // new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(-20,100).ToString(),
            //        ParameterCodeID = 20,
            //        MachineID = 22
            //    },
            // new T_CollectedDataParameters {
            //        CollectedTime = DateTime.Now.AddMilliseconds(500),
            //        CollectedValue =  random.Next(-20,100).ToString(),
            //        ParameterCodeID = 22,
            //        MachineID = 22
            //    },};
            ////收到米数
            //if(testMetersTrigger % 5 == 0) {
            //    ++testMeters;
            //    //colData.Add(new T_CollectedDataParameters {
            //    //    CollectedTime = DateTime.Now.AddMilliseconds(500),
            //    //    CollectedValue = testMeters.ToString(),
            //    //    ParameterCodeID = (int)SPEC_PARAM_CODE.METERS_COUNT,
            //    //    MachineID = 22
            //    //});
            //}
            //List<T_CodeUsing> code = new List<T_CodeUsing>();
            ////模拟每100米更换一次轴号
            //if(testMeters % 2 == 0) {
            //    //code.Add(new T_CodeUsing {
            //    //    Axis_No = "CPXXtestxxxxyyy",
            //    //    GeneratorTime = DateTime.Now,
            //    //    MachineID = 22,
            //    //    CodeNumber = "12456464650"

            //    //});
            //}

            //反序列化的数据
            //sensorData.CodeUsing = code;
            //sensorData.CollectedData = colData;
            #endregion

            //将接受的数据封装成需要的数据
            var retData = sensorDataBiz.GetSensorData(sensorData);
            //按机台分组,即接受到的数据所包含的机台
            var groupData = (from d in sensorData.CollectedData group d by d.MachineID into g select g);
            //取出机台收到的参数
            foreach (var data in groupData)
            {
                var    machineId  = data.Key.Value;
                string curMeters  = "";
                string curAxisNum = "";


                //更新字典缓存
                updateDicCache(machineId, sensorData, out curMeters, out curAxisNum,
                               //轴号变动则通知前端浏览器清空数据
                               //相当于在线重新进行初始化数据
                               () => {
                    //TODO
                });

                VM_MachineProperty pty = new VM_MachineProperty();
                //获取到该机台的属性
                if (curMachPtyDic.TryGetValue(machineId, out pty))
                {
                    //更新参数
                    pty.CurrentMeters = curMeters;
                    pty.AxisNum       = curAxisNum;
                    //最大最小线径
                    try {
                        var maxOd = (from d in data where d.ParameterCodeID == (int)SPEC_PARAM_CODE.OUTTER_OD select d).Max(d => decimal.Parse(d.CollectedValue));
                        var minOd = (from d in data where d.ParameterCodeID == (int)SPEC_PARAM_CODE.OUTTER_OD select d).Min(d => decimal.Parse(d.CollectedValue));
                        if (pty.ODMax.Value < maxOd)
                        {
                            pty.ODMax = maxOd;
                        }
                        if (pty.ODMin > minOd)
                        {
                            pty.ODMin = minOd;
                        }
                    } catch (Exception e) {
                    }
                }



                //拥有相同机台的前端连接
                var sameMachConnectionIds = new List <string>();
                if (clientsDic.TryGetValue(machineId, out sameMachConnectionIds))
                {
                    //挨个推送机台的实时数据
                    ConcurrentDictionary <string, List <Param> > moduleStateTab;
                    curModuleStateDic.TryGetValue(machineId, out moduleStateTab);
                    foreach (var conenctionId in sameMachConnectionIds)
                    {
                        //更新曲线参数
                        context.Clients.Client(conenctionId).
                        updateSensorData(
                            //数据
                            retData,
                            //当前米数
                            curMeters,
                            //该机台的错误表
                            moduleStateTab);

                        //更新机台属性
                        context.Clients.Client(conenctionId).updateMachinePty(pty);
                    }
                }
            }
        }