DPsim
Loading...
Searching...
No Matches
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
22namespace DPsim {
23
24class RealTimeDataLogger : public DataLoggerInterface,
25 public SharedFactory<RealTimeDataLogger> {
26
27protected:
28 std::filesystem::path mFilename;
29 size_t mRowNumber;
30 size_t mCurrentRow;
31 size_t mCurrentAttribute;
32
33 std::vector<std::vector<Real>> mAttributeData;
34
35public:
36 typedef std::shared_ptr<RealTimeDataLogger> Ptr;
37
38 RealTimeDataLogger(std::filesystem::path &filename, Real finalTime,
39 Real timeStep);
40 RealTimeDataLogger(std::filesystem::path &filename, size_t rowNumber);
41
42 virtual void start() override;
43 virtual void stop() override;
44
45 virtual void log(Real time, Int timeStepCount) override;
46
47 virtual CPS::Task::Ptr getTask() override;
48
49 class Step : public CPS::Task {
50 public:
51 Step(RealTimeDataLogger &logger)
52 : Task("RealTimeDataLogger.Write"), mLogger(logger) {
53 for (auto attr : logger.mAttributes) {
54 mAttributeDependencies.push_back(attr.second);
55 }
56 mModifiedAttributes.push_back(Scheduler::external);
57 }
58
59 void execute(Real time, Int timeStepCount);
60
61 private:
62 RealTimeDataLogger &mLogger;
63 };
64};
65} // namespace DPsim
Tasks to be defined by every component.
Definition Task.h:25