private static bool IsOnline(string baseUrl, int millisecondsTimeout = 2000) { try { if (string.IsNullOrEmpty(baseUrl)) { return(false); } var redisClientUrl = GetUrl(baseUrl); var urlSegments = redisClientUrl.Split(':'); if (urlSegments.Length == 2) { var isOnline = TcpClientConnector.IsOnline(urlSegments[0], int.Parse(urlSegments[1]), millisecondsTimeout); return(isOnline); } else { return(false); } } catch { return(false); } }
public static async Task Get_XAGL_WM3000WXGT_IndicatorDiagram(ModbusRtuOverTcp client, RedisClient redisClient, string messageString) { var par = messageString.FromJson <ControlRequest>(); try { var logIotModbusPoll = par.ConvertTo <LogIotModbusPoll>(); logIotModbusPoll.State = 0; logIotModbusPoll.Result = "ok"; var flag = true; var indicatorDiagram = new IotDataOilWellIndicatorDiagram() { NetworkNode = ClientInfo.ManyIpAddress, AlarmCode = 0, AlarmMsg = "正常" }; var jo1 = (JObject)JsonConvert.DeserializeObject(par.CommandParameter); double displacement = -1; if (jo1["0"] != null) { double.TryParse(jo1["0"].ToString().Trim(), out displacement); } if (displacement > 0) { indicatorDiagram.Displacement = displacement; } var modbusAddress = par.ModbusAddress; ClientInfo.CurrentModbusPoolAddress = modbusAddress; var commandParameter = par.CommandParameter.ToString(); var slot = Convert.ToInt32(jo1["1"].ToString()); var host = par.RemoteHost; var url = "/getworkgraph/"; bool IsHostAlive = false; if (host.StartsWith("192")) { $"无线功图树莓派({host})不正确,或者没有接入无线功图".Error(); } else { IsHostAlive = TcpClientConnector.IsOnline(host, null, 1000); if (IsHostAlive) { url = $"http://{host}{url}{slot}"; $"请求树莓派api:{url}".Info(); var indicatorDiagramJson = await url.GetJsonFromUrlAsync(); //$"树莓派api返回数据:{indicatorDiagramJson}".Info(); var oilWellIndicatorDiagram = indicatorDiagramJson.FromJson <OilWellIndicatorDiagram>(); indicatorDiagram.Stroke = oilWellIndicatorDiagram.chongCheng; indicatorDiagram.L = oilWellIndicatorDiagram.load; indicatorDiagram.D = oilWellIndicatorDiagram.displace; var maxDis = indicatorDiagram.D.Max(); var minDis = indicatorDiagram.D.Min(); if (!indicatorDiagram.Displacement.HasValue) { indicatorDiagram.Displacement = maxDis; } for (var i = 0; i < indicatorDiagram.D.Count; i++) { if (Math.Abs(maxDis - minDis) > 0.1) { indicatorDiagram.D[i] = Math.Round(((indicatorDiagram.D[i] - minDis) / (maxDis - minDis) * (double)indicatorDiagram.Displacement), 2); } } //补点 if (indicatorDiagram.L.Count > 0) { indicatorDiagram.L.Add(indicatorDiagram.L[0]); } if (indicatorDiagram.D.Count > 0) { indicatorDiagram.D.Add(indicatorDiagram.D[0]); } indicatorDiagram.MaxLoad = indicatorDiagram.L.Max(); indicatorDiagram.MinLoad = indicatorDiagram.L.Min(); indicatorDiagram.AvgLoad = indicatorDiagram.L.Average(); indicatorDiagram.DateTime = DateTime.Now; //树莓派时间不准确,取服务器时间 //to do 树莓派时间稳定了再换 indicatorDiagram.WellId = oilWellIndicatorDiagram.wellId; indicatorDiagram.Count = oilWellIndicatorDiagram.count; indicatorDiagram.Interval = oilWellIndicatorDiagram.interval; indicatorDiagram.DeviceTypeId = par.DeviceTypeId; indicatorDiagram.Mock = par.UseMockData; if (displacement > 0) { indicatorDiagram.Displacement = displacement; } indicatorDiagram.NetworkNode = host; redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_IndicatorDiagram", indicatorDiagram.ToJson().IndentJson()); redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:IndicatorDiagram", indicatorDiagram); redisClient.Set($"Single:OilWell:IndicatorDiagram:{par.DeviceName}-{par.DeviceId}", indicatorDiagram); } else { $"无线功图树莓派({host})网络不通!".Error(); } } //用于通过ServerEvent给调用着返回消息 if (!par.UserName.IsNullOrEmpty()) { ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, flag ? 0 : -2, indicatorDiagram.ToJson().IndentJson()); } } catch (Exception ex) { Logger.Error(ex.Message); Logger.Error(ex.StackTrace); Logger.Error(ex.Source); if (!par.UserName.IsNullOrEmpty()) { ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message); } } }