/// <summary> /// 读取配水间干压mock /// </summary> /// <param name="client"></param> /// <param name="redisClient"></param> /// <param name="messageString"></param> public static void Get_ZJJH_WTPM_TrunkPressure_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString) { var par = messageString.FromJson <ControlRequest>(); var waterStation = new IotDataWaterStation(); waterStation.DeviceTypeId = par.DeviceTypeId; try { waterStation.AlarmCode = 0; waterStation.AlarmMsg = "mock数据"; waterStation.StationId = par.DeviceId; //注水间ID waterStation.Mock = par.UseMockData; waterStation.Mock = par.UseMockData; waterStation.DateTime = DateTime.Now; //用于将读取的结果写入Redis队列 redisClient.AddItemToList("YCIOT:IOT_Data_WaterStation", waterStation.ToJson().IndentJson()); redisClient.Set($"Group:WaterStation:{par.DeviceName}-{par.DeviceId}", waterStation); //用于通过ServerEvent给调用着返回消息 if (!par.UserName.IsNullOrEmpty()) { ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, waterStation.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); } } }
public static async Task Get_ZJJH_WTPM_TrunkPressure(ModbusRtuOverTcp client, RedisClient redisClient, string messageString) { var par = messageString.FromJson <ControlRequest>(); var waterStation = new IotDataWaterStation(); var logIotModbusPoll = par.ConvertTo <LogIotModbusPoll>(); var modbusAddress = par.ModbusAddress; ClientInfo.CurrentModbusPoolAddress = modbusAddress; waterStation.DeviceTypeId = par.DeviceTypeId; var flag = true; try { var read = await client.ReadAsync($"s={modbusAddress};x=3;220", 1); if (read.IsSuccess) { var value = client.ByteTransform.TransInt16(read.Content, 0); waterStation.StationId = par.DeviceId; //注水间ID waterStation.TrunkPressure = value / 100.0; //总汇管压力 waterStation.DateTime = DateTime.Now; //采集时间 } else { flag = false; waterStation.AlarmCode = -1; waterStation.AlarmMsg = "数据异常"; waterStation.Mock = par.UseMockData; logIotModbusPoll.DateTime = DateTime.Now; logIotModbusPoll.State = -1; logIotModbusPoll.Result = "读取注水间干压数据异常!"; redisClient.AddItemToList("YCIOT:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson()); } waterStation.NetworkNode = ClientInfo.ManyIpAddress; if (flag == true || par.UseMockData) { waterStation.Mock = par.UseMockData; //用于将读取的结果写入Redis队列 redisClient.AddItemToList("YCIOT:IOT_Data_WaterStation", waterStation.ToJson().IndentJson()); redisClient.Set($"Group:WaterStation:{par.DeviceName}-{par.DeviceId}", waterStation); } //用于通过ServerEvent给调用着返回消息 if (!par.UserName.IsNullOrEmpty()) { ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, waterStation.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); } } }
public static async Task Get_XAAS_WTPM_TrunkPressure(ModbusRtuOverTcp client, RedisClient redisClient, string messageString) { var par = messageString.FromJson <ControlRequest>(); var waterStation = new IotDataWaterStation(); var logIotModbusPoll = par.ConvertTo <LogIotModbusPoll>(); var modbusAddress = par.ModbusAddress; ClientInfo.LinkId = par.LinkId; ClientInfo.CurrentModbusPoolAddress = modbusAddress; waterStation.DeviceTypeId = par.DeviceTypeId; var flag = true; try { var startAddress = (ushort)10; lock (ClientInfo.locker) { ClientInfo.RequestTime = DateTime.Now; ClientInfo.ExpectedType = 0x04; ClientInfo.ExpectedDataLen = 0x08; } var read = await client.ReadAsync($"s={par.ModbusAddress};x=4;{startAddress}", 4); if (read.IsSuccess) { waterStation.StationId = par.DeviceId; //注水间ID var value1 = client.ByteTransform.TransInt16(read.Content, 0); var value2 = client.ByteTransform.TransInt16(read.Content, 2); var value3 = client.ByteTransform.TransInt16(read.Content, 4); var value4 = client.ByteTransform.TransInt16(read.Content, 6); var v1 = BCDUtils.BCDToUshort((ushort)value1) / 100.0; var v2 = BCDUtils.BCDToUshort((ushort)value2) / 100.0; var v3 = BCDUtils.BCDToUshort((ushort)value3) / 100.0; var v4 = BCDUtils.BCDToUshort((ushort)value4) / 100.0; double[] values = { v1, v2, v3, v4 }; waterStation.TrunkPressure = values.Max(); //总汇管压力 waterStation.DateTime = DateTime.Now; //采集时间 } else { flag = false; waterStation.AlarmCode = -1; waterStation.AlarmMsg = "数据异常"; waterStation.Mock = par.UseMockData; logIotModbusPoll.DateTime = DateTime.Now; logIotModbusPoll.State = -1; string msg = $"{par.DeviceName}-{par.DeviceId}"; Logger.Warn($"{msg}:读取注水间干压数据异常![{read.Message}]"); logIotModbusPoll.Result = $"{msg}:读取注水间干压数据异常![{read.Message}]"; redisClient.AddItemToList("YCIOT:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson()); } waterStation.NetworkNode = ClientInfo.ManyIpAddress; waterStation.StationId = par.DeviceId; if (flag == true || par.UseMockData) { waterStation.Mock = par.UseMockData; //用于将读取的结果写入Redis队列 redisClient.AddItemToList("YCIOT:IOT_Data_WaterStation", waterStation.ToJson().IndentJson()); redisClient.Set($"Group:WaterStation:{par.DeviceName}-{par.DeviceId}", waterStation); } //用于通过ServerEvent给调用着返回消息 if (!par.UserName.IsNullOrEmpty()) { ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, waterStation.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); } } }