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