DPsim
RealTimeDataLogger.h
1 /* A data logger for real-time simulation data logging.
2  *
3  * Author: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
4  * SPDX-FileCopyrightText: 2024 Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 #pragma once
8 
9 #include <filesystem>
10 #include <fstream>
11 #include <iostream>
12 #include <map>
13 
14 #include <dpsim-models/Attribute.h>
15 #include <dpsim-models/PtrFactory.h>
16 #include <dpsim-models/SimNode.h>
17 #include <dpsim-models/Task.h>
18 #include <dpsim/DataLoggerInterface.h>
19 #include <dpsim/Definitions.h>
20 #include <dpsim/Scheduler.h>
21 
22 namespace DPsim {
23 
24 class RealTimeDataLogger : public DataLoggerInterface, public SharedFactory<RealTimeDataLogger> {
25 
26 protected:
27  std::filesystem::path mFilename;
28  size_t mRowNumber;
29  size_t mCurrentRow;
30  size_t mCurrentAttribute;
31 
32  std::vector<std::vector<Real>> mAttributeData;
33 
34 public:
35  typedef std::shared_ptr<RealTimeDataLogger> Ptr;
36 
37  RealTimeDataLogger(std::filesystem::path &filename, Real finalTime, Real timeStep);
38  RealTimeDataLogger(std::filesystem::path &filename, size_t rowNumber);
39 
40  virtual void start() override;
41  virtual void stop() override;
42 
43  virtual void log(Real time, Int timeStepCount) override;
44 
45  virtual CPS::Task::Ptr getTask() override;
46 
47  class Step : public CPS::Task {
48  public:
49  Step(RealTimeDataLogger &logger) : Task("RealTimeDataLogger.Write"), mLogger(logger) {
50  for (auto attr : logger.mAttributes) {
51  mAttributeDependencies.push_back(attr.second);
52  }
53  mModifiedAttributes.push_back(Scheduler::external);
54  }
55 
56  void execute(Real time, Int timeStepCount);
57 
58  private:
59  RealTimeDataLogger &mLogger;
60  };
61 };
62 } // namespace DPsim
Tasks to be defined by every component.
Definition: Task.h:25