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); }
///////////////////// 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); }
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); } } } }