public bool StopRead() { if (!ModbusDeviceStates.CanFire(TemperatureDeviceEdge.ReadStop)) { return(false); } IsReading = false; ModbusDeviceStates.Fire(TemperatureDeviceEdge.ReadStop); return(true); }
private async Task ReadAsync() { try { ushort[] data = await Modbus.ReadInputRegistersAsync(1, 0, 6); var temperature = BitConverter.ToSingle(BitConverter.GetBytes(data[0]) .Concat(BitConverter.GetBytes(data[1])) .ToArray(), 0); var humidity = BitConverter.ToSingle(BitConverter.GetBytes(data[2]) .Concat(BitConverter.GetBytes(data[3])) .ToArray(), 0); var pressure = BitConverter.ToSingle(BitConverter.GetBytes(data[4]) .Concat(BitConverter.GetBytes(data[5])) .ToArray(), 0); await Task.Run(() => { OnTemperatureRead?.Invoke(this, new ReadPacket <float> { Value = temperature, Time = DateTime.Now }); OnHumidityRead?.Invoke(this, new ReadPacket <float> { Value = humidity, Time = DateTime.Now }); OnPressureRead?.Invoke(this, new ReadPacket <float> { Value = (pressure * 133.322f) / 1000.0f, Time = DateTime.Now }); }); if (IsReading && ModbusDeviceStates.CanFire(TemperatureDeviceEdge.ReadSuccess)) { ModbusDeviceStates.Fire(TemperatureDeviceEdge.ReadSuccess); } await Task.Run(() => Thread.Sleep(1000)); } catch { if (ModbusDeviceStates.CanFire(TemperatureDeviceEdge.ReadError)) { ModbusDeviceStates.Fire(TemperatureDeviceEdge.ReadError); } } }