private void Display() { CommunicateDevice.FindAllWithCache().ForEach(com => { com.ShowDevices.ForEach(showDevice => { var cardType = showDevice.ShowDeviceType; var ledType = LedDeviceFactory.GetLedDeviceType(cardType.Name); ILedDevice ledDevice = LedDeviceFactory.CreateLedDevice(ledType); if (ledDevice != null) { try { var host = com.Args1; var args = Convert.ToInt32(com.Args2); ledDevice.Init(host, args); var maxPosition = 0; var messageList = showDevice.ShowDatas.ToList() .Select(sd => { var dev = sd.SensorDeviceUnit; var position = sd.Position; var info = dev.ShowValue; if (info == "负无穷大") { info = ""; } if (dev.Sensor.Name.Contains("雨雪")) { info = dev.ProcessedValue == 1M ? "有" : "无"; } if (dev.Sensor.Name.Contains("风向")) { info = JudgWindDirection(dev.ProcessedValue); dev.Sensor.Unit = ""; //发送到屏幕上去除风向的单位 } if (position > maxPosition) { maxPosition = position; } return(new Tuple <int, string>(position, string.Format("{0}:{1}{2}", dev.Name, info, dev.Sensor.Unit))); }).ToList(); if (!Setting.Current.LedAttactInfo.IsNullOrWhiteSpace()) { messageList.Add(new Tuple <int, string>(maxPosition + 1, Setting.Current.LedAttactInfo)); } ledDevice.Display(messageList); ServiceLogger.Current.WriteDebugLog("LED发送成功,{0}:{1}", com.Args1, com.Args2); } catch (Exception ex) { ServiceLogger.Current.WriteError("发送LED失败," + ex.Message); ServiceLogger.Current.WriteException(ex); } } }); }); }
private void Display() { CommunicateDevice.FindAllWithCache().ForEach(com => { ///判断一下是否为TTS设备。。。 TransportTypeEnum type; if (!TransportTypeEnum.TryParse(com.CommunicateDeviceTypeName, true, out type)) { type = TransportTypeEnum.Unknow; } var host = com.Args1; var e = Convert.ToInt32(com.Args2); var timeout = Convert.ToInt32(com.Args3); //获取Transport var transport = TransportFactory.GetTransport(type, host, e, timeout); var kdxf = new KdxfDevice(transport); com.ShowDevices.ForEach(showDevice => { var devices = showDevice.ShowDatas.ToList().Select(sd => sd.SensorDeviceUnit); devices.ForEach(dev => { var message = "{0} {1} {2} {3}".F("", dev.Name, dev.ShowValue, dev.Sensor.Unit); var result = kdxf.Display(message); if (result) { ServiceLogger.Current.WriteDebugLog("播报成功"); } else { ServiceLogger.Current.WriteError("语音播报失败:{0}", message); } }); }); }); }
/// <summary> /// 采集控制设备状态 /// </summary> private static void Collect() { CommunicateDevice.FindAllWithCache().ForEach(com => { var key = "{0}://{1}:{2}".F(com.CommunicateDeviceTypeName, com.Args1, com.Args2); TransportTypeEnum type; if (!Enum.TryParse(com.CommunicateDeviceTypeName, true, out type)) { type = TransportTypeEnum.Unknow; } var host = com.Args1; var e = Convert.ToInt32(com.Args2); var timeout = Convert.ToInt32(com.Args3); //获取Transport var transport = TransportFactory.GetTransport(type, host, e, timeout); if (transport != null) { var modulars = com.ModularDevices; if (modulars != null && modulars.Count > 0) { modulars.ForEach(modular => { var controlDevices = modular.ControlDeviceUnits; if (controlDevices != null && controlDevices.Count > 0) { var dataType = modular.ProtocalTypeName; if (dataType.EqualIgnoreCase(ProtocalTypeEnum.MODBUS.ToString())) { var modbusControlDevice = new ModbusControlDevice(transport, Convert.ToByte(modular.Address)) { Registers = controlDevices.ToList().SelectMany(controlDeviceUnit => { var addrs = new List <int> { Convert.ToInt32(controlDeviceUnit.RegisterAddress1) }; //添加第一个 //如果是组合设备添加第二个 //if (controlDeviceUnit.IsComposite) // addrs.Add(Convert.ToInt32(controlDeviceUnit.RegisterAddress2)); return(addrs); }).ToList() }; //读数据,重试三次 var result = false; for (var i = 0; i < 3; i++) { try { modbusControlDevice.EnsureTransport(transport); result = modbusControlDevice.Read(); break; } catch (ObjectDisposedException odx) { LogHelper.Fatal(odx.ToString()); //重新构建transport transport = TransportFactory.GetTransport(type, host, e, timeout); } catch (Exception ex) { LogHelper.Fatal(ex.ToString()); } LogHelper.Debug("第{3}次读取{0}:{1}地址为{2}数据失败", host, e, modular.Address, (i + 1)); } if (result) { //处理设备状态 //保存到数据库 var minReg = modbusControlDevice.Registers.Min(); controlDevices.ForEach(controlDevice => { var regAddr = Convert.ToInt32(controlDevice.RegisterAddress1); var value1 = modbusControlDevice.Values.Skip(regAddr - minReg).Take(1).ElementAt(0); var value = 0; //控制设备当前状态 //if (controlDevice.IsComposite) //{ // var regAddr2 = Convert.ToInt32(controlDevice.RegisterAddress1); // var value2 = modbusControlDevice.Values.Skip(regAddr2 - minReg).Take(1).ElementAt(0); // //controlDevice.OriginalValue = (value1 << 8) + value2; // if (value1 && !value2) // { // value = 0xFF00; // controlDevice.ProcessedValue = "正转"; // } // else if (!value1 && value2) // { // value = 0; // controlDevice.ProcessedValue = "停止"; // } // else if (!value1 && !value2) // { // value = 0X00FF; // controlDevice.ProcessedValue = "反转"; // } //} //else //{ value = value1 ? 1 : 0; //} controlDevice.OriginalValue = value; controlDevice.ProcessedValue = CalcControlDeviceValue.CalcProcessValue( controlDevice.FacilityControlDeviceUnits[0]); controlDevice.UpdateTime = DateTime.Now; controlDevice.Save(); //执行控制 //bool success= control(value,controldevice.id); // if(success) // { // servicelogger.current.writelog("设备控制成功"); // } // else // { // servicelogger.current.writeerror("设备控制失败"); // } }); } else { LogHelper.Error("读取设备控制数据失败"); } } } }); } } else { //通讯对象创建失败 LogHelper.Error("无法创建通讯{0}", key); } }); }