Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
                }
            }
        }