Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F332150
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Size
56 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/Version_Max_07_05_2018_CMake/src/main_OMV.cpp b/Version_Max_07_05_2018_CMake/src/main_OMV.cpp
index 2988595..55155aa 100755
--- a/Version_Max_07_05_2018_CMake/src/main_OMV.cpp
+++ b/Version_Max_07_05_2018_CMake/src/main_OMV.cpp
@@ -1,1195 +1,1123 @@
/*
* main.cpp
*
* Created on: 25.05.2018
* Author: edwin willegger, edwin.willegger@tuwien.ac.at
* This file is used to generate output data from measurements
* from OMV for SAVE project.
* In this case the data of the 18.12.2017 is analyzed.
* Based on the implementation of Maximilian Götzinger.
*/
#include "Agent.h"
#include "Channel.h"
#include "create_unit.h"
#include "CSVreaderModule.h"
#include "inAgentsRegistrations.h"
#include "mount_nodes.h"
#include "register_in_testbench.h"
#include "Sensor.h"
#include "setupNode.h"
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include "Testbench.h"
#include "file_util.h"
#include "LinearFunction.h"
#include "LinearFunctionBlock.h"
#include "Testbench_Config.h"
using namespace std;
/**********************************************************************************************************************
************************************************begin of global definitions of variables and constants ***************
**********************************************************************************************************************/
//every n-th SAMBLING value will be read in from the CSV-Data-Input-Files.
#define SAMPLING 1
//global vectors for the different elements
static vector<Agent*> vec_of_Agents;
static vector<Sensor*> vec_of_Sensors;
static vector<Channel*> vec_of_Channels_for_Sensors;
static vector<Channel*> vec_of_Channels_for_Agents;
static vector<LinearFunctionBlock*> vec_of_linear_Function_Blocks;
static vector<Testbench*> vec_of_test_benches;
static vector<CSVreaderModule*> vec_of_csv_readers;
+#define NUM_DATA_POINTS 7
+
//names of the measured data
-const string FIRST_MEASURED_DATA_NAME = "PI6174"; //Input
-const string SECOND_MEASURED_DATA_NAME = "PI6184"; //Input
-const string THIRD_MEASURED_DATA_NAME = "FC6104"; //Output
-const string FOURTH_MEASURED_DATA_NAME = "FC6104_SP"; //Input
-const string FIFTH_MEASURED_DATA_NAME = "FC6104_Y"; //Input
-const string SIXTH_MEASURED_DATA_NAME = "FC6114CO"; //Input
-const string SEVENTH_MEASURED_DATA_NAME = "QI6154"; //Input
+
+const string measured_data_names[NUM_DATA_POINTS] = {
+ "PI6174", //INPUT
+ "PI6184", //INPUT
+ "FC6104", //OUTPUT
+ "FC6104_SP",//INPUT
+ "FC6104_Y", //INPUT
+ "FC6114CO", //INPUT
+ "QI6154" //INPUT
+};
+
//viability monitor
const string VIABILITY_MONITOR = "ViabilityMonitor";
//index number of output
const int INDEX_OUTPUT = 3;
//name for the channels of the sensors and agents
-const string APPENDIX_FOR_CHANNEL_SENSOR_NAME = "(SA)";
-const string FIRST_MEASURED_CHANNEL_SENSOR_NAME = FIRST_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string SECOND_MEASURED_CHANNEL_SENSOR_NAME = SECOND_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string THIRD_MEASURED_CHANNEL_SENSOR_NAME = THIRD_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string FOURTH_MEASURED_CHANNEL_SENSOR_NAME = FOURTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string FIFTH_MEASURED_CHANNEL_SENSOR_NAME = FIFTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string SIXTH_MEASURED_CHANNEL_SENSOR_NAME = SIXTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string SEVENTH_MEASURED_CHANNEL_SENSOR_NAME = SEVENTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
-const string APPENDIX_FOR_CHANNEL_AGENT_NAME = "(AA-UP)";
-const string FIRST_MEASURED_CHANNEL_AGENT_NAME = FIRST_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string SECOND_MEASURED_CHANNEL_AGENT_NAME = SECOND_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string THIRD_MEASURED_CHANNEL_AGENT_NAME = THIRD_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string FOURTH_MEASURED_CHANNEL_AGENT_NAME = FOURTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string FIFTH_MEASURED_CHANNEL_AGENT_NAME = FIFTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string SIXTH_MEASURED_CHANNEL_AGENT_NAME = SIXTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
-const string SEVENTH_MEASURED_CHANNEL_AGENT_NAME = SEVENTH_MEASURED_DATA_NAME + APPENDIX_FOR_CHANNEL_AGENT_NAME;
+#define APPENDIX_FOR_CHANNEL_SENSOR_NAME "(SA)";
+#define APPENDIX_FOR_CHANNEL_AGENT_NAME "(AA-UP)";
+
+static string measured_channel_sensor_names[NUM_DATA_POINTS];
+static string measured_channel_agent_names[NUM_DATA_POINTS];
+
+void init_channel_names(){
+ for(int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ measured_channel_sensor_names[i] = measured_data_names[i] + APPENDIX_FOR_CHANNEL_SENSOR_NAME;
+ measured_channel_agent_names[i] = measured_data_names[i] + APPENDIX_FOR_CHANNEL_AGENT_NAME;
+ }
+}
#define TRANSFER_RATE_CHANNEL_SENSOR 0
#define TRANSFER_RATE_CHANNEL_AGENT MAX_BUFFER_LENGTH
//////////////////////////////////////////////
/*
//out of the outer_bound the function is 0 or 1 and within 1 or 0 depending on function or complementery.
inner_bound_xxx = /----------=1----|------=1---------\ = inner_bound_xxxx
outer_bound_xxx = / | \
/ | \
0=__________/ | \ = outer_bound_xxxx ______ = 0
--------------------------------------------------------------------------
*/
//parameters of boundary for similar function
#define OUTTER_BOUND_SIM_DIF 0.20 //outer bound e. g. 0.14 = 14 percent; testested with 0.20, 0.14, 0.06,
#define INNER_BOUND_SIM_DIF 0.01 //inner bound e. g. 0.01 = 1 percent
//same way as above but shows drift.
#define OUTTER_BOUND_DRIFT OUTTER_BOUND_SIM_DIF * 3
#define INNER_BOUND_DRIFT OUTTER_BOUND_SIM_DIF
//timer sagt, dass nach dem DOWNSAMPLING der Ausgang bis zu
//n Werte später sich ändern darf, nachdem Sich der Eingang geändert hat.
#define BOUND_BROKEN 2
//length where fuzzy function raises from 0 to 1 or 1 to 0 for the complementery.
//history of the data depends of it, and should change, if it changes.
#define LENGTH 10
//definitions for the testbench
const string TEST_BENCH = "testbench";
//defintions for the csv-reader-modules
-const string APPENDIX_CSV_MODULES = " CSV-Reader";
+#define APPENDIX_CSV_MODULES " CSV-Reader"
+
+const string measured_data_csv_names[] = {
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES,
+ FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES
+ };
+
+/*
const string FIRST_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string SECOND_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string THIRD_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string FOURTH_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string FIFTH_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string SIXTH_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
const string SEVENTH_MEASURED_DATA_CSV_NAME = FILE_NAME_OF_ENTIRE_DATA + APPENDIX_CSV_MODULES;
-
+*/
//to switch between different file configurations change the
//DEFINES in file_util.h
/**********************************************************************************************************************
************************************************end of global definitions of variables and constants *****************
**********************************************************************************************************************/
/**********************************************************************************************************************
************************************************begin of function prototypes *****************************************
**********************************************************************************************************************/
void create_and_register_all_Testbench_Configs(Testbench* current_tb);
void create_and_register_All_Agents();
void set_working_cycle_of_All_Agents();
void create_and_register_All_Sensors();
void set_working_cycle_of_All_Sensors();
void create_and_register_channels();
void create_and_register_channels_for_sensors();
void create_and_register_channels_for_agents();
void mount_sensors_in_agents();
void mount_agents_in_agents();
void register_data_agents_in_agent_state_Handler();
void create_linear_function_blocks();
void create_same_state_deviation_function_block();
void create_another_state_deviation_function_block();
void create_state_time_function_block();
void create_another_state_time_function_block();
void create_valid_state_deviation_function_block();
void create_invalid_state_deviation_function_block();
void create_valid_state_time_function_block();
void create_invalid_state_time_function_block();
void create_confidence_state_drift_function_block();
void create_confidence_broken_function_block();
void mount_function_blocks_to_viability_monitor();
void create_all_testbenches();
void create_csvr_modules();
void register_agents_in_testbenches();
void register_sensors_in_testbenches();
void register_channels_in_testbenches();
void register_channels_of_sensors_in_testbenches();
void register_channels_of_actors_in_testbenches();
void set_config_values_in_linear_functions(Testbench* current_tb);
void set_parameters_LinearFunctionBlock(LinearFunctionBlock* cur_lin_func_block);
void set_parameters_LinearFunction(vector<LinearFunction*> vec_Lin_Func);
void set_CSV_Writer_parameter(Testbench* current_tb);
void run_simulation_of_all_testbenches();
void close_file_pointers();
void empty_static_vectors();
void empty_vec_Agent();
void empty_vec_Channel_Agent();
void empty_vec_Channel_Sensor();
void empty_vec_Sensors();
void empty_vec_csv_raders();
void empty_vec_linear_func_Blocks();
void empty_vec_TestBench();
/**********************************************************************************************************************
************************************************end of function prototypes *******************************************
**********************************************************************************************************************/
int main()
{
cout << "This program processes test data from OMV Steam Cracker furnaces." << endl;
+ init_channel_names();
+
create_and_register_All_Agents();
set_working_cycle_of_All_Agents();
create_and_register_All_Sensors();
set_working_cycle_of_All_Sensors();
create_and_register_channels();
mount_sensors_in_agents();
mount_agents_in_agents();
register_data_agents_in_agent_state_Handler();
create_linear_function_blocks();
mount_function_blocks_to_viability_monitor();
create_all_testbenches();
create_csvr_modules();
register_agents_in_testbenches();
register_sensors_in_testbenches();
register_channels_in_testbenches();
run_simulation_of_all_testbenches();
//close_file_pointers();
//TODO memory free of all objects.
empty_static_vectors();
cout << "Program finished successfully" << endl;
return 0;
}
void create_and_register_all_Testbench_Configs(Testbench* current_tb)
{
One_Config_t one;
one.bound_broken = 2;
one.inner_bound_sim_dif = 0.02;
one.outter_bound_sim_dif = 0.15;
one.inner_bound_drift = 3 * one.outter_bound_sim_dif;
one.inner_bound_drift = one.outter_bound_sim_dif;
one.length = 10;
Testbench_Config* cfg = new Testbench_Config();
Testbench_Config* cfg2 = new Testbench_Config(one);
Testbench_Config* cfg3 = new Testbench_Config();
Testbench_Config* cfg4 = new Testbench_Config();
cfg->print();
cfg2->print();
cfg3->print();
cfg4->print();
current_tb->register_testbench_config(cfg);
current_tb->register_testbench_config(cfg2);
current_tb->register_testbench_config(cfg3);
current_tb->register_testbench_config(cfg4);
}
/*
* creates all the agents used in the measurement
* and stores them into the global vector
*/
void create_and_register_All_Agents()
{
cout << "Creating Agents" << endl;
+
char* c_name_of_current_agent = new char[MAX_LENGTH_NAME];
- strcpy(c_name_of_current_agent, FIRST_MEASURED_DATA_NAME.c_str());
- Agent* a_PI6174 = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, SECOND_MEASURED_DATA_NAME.c_str());
- Agent* a_PI6184 = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, THIRD_MEASURED_DATA_NAME.c_str());
- Agent* a_FC6104 = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, FOURTH_MEASURED_DATA_NAME.c_str());
- Agent* a_FC6104_SP = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, FIFTH_MEASURED_DATA_NAME.c_str());
- Agent* a_FC6104_Y = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, SIXTH_MEASURED_DATA_NAME.c_str());
- Agent* a_FC6114CO = create_agent(c_name_of_current_agent);
- strcpy(c_name_of_current_agent, SEVENTH_MEASURED_DATA_NAME.c_str());
- Agent* a_QI6154 = create_agent(c_name_of_current_agent);
+ for(int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ strcpy(c_name_of_current_agent, measured_data_names[i].c_str());
+ Agent* a = create_agent(c_name_of_current_agent);
+ vec_of_Agents.push_back(a);
+ }
+ cout << vec_of_Agents.size() << " agents were created" << endl;
+
strcpy(c_name_of_current_agent, VIABILITY_MONITOR.c_str());
Agent* a_viabilityMonitor = create_agent(c_name_of_current_agent);
- vec_of_Agents.push_back(a_PI6174);
- vec_of_Agents.push_back(a_PI6184);
- vec_of_Agents.push_back(a_FC6104);
- vec_of_Agents.push_back(a_FC6104_SP);
- vec_of_Agents.push_back(a_FC6104_Y);
- vec_of_Agents.push_back(a_FC6114CO);
- vec_of_Agents.push_back(a_QI6154);
vec_of_Agents.push_back(a_viabilityMonitor);
cout << vec_of_Agents.size() << " agents were created" << endl;
delete c_name_of_current_agent;
}
/*
* the working_cycle for all registered agents is set
*/
void set_working_cycle_of_All_Agents()
{
unsigned int working_Cyle = SAMPLING;
unsigned int size_of_vec_of_Agents = 0;
unsigned int index = 0;
Agent* current_Agent;
size_of_vec_of_Agents = vec_of_Agents.size();
for(index = 0; index < size_of_vec_of_Agents; index++) {
current_Agent = vec_of_Agents[index];
setWorkingCycleOfAgent(current_Agent, working_Cyle);
}
}
/*
* all necessary sensors are created and registered
*/
void create_and_register_All_Sensors()
{
cout << "Creating Sensors" << endl;
char* c_name_of_current_sensor = new char[MAX_LENGTH_NAME];
- strcpy(c_name_of_current_sensor, FIRST_MEASURED_DATA_NAME.c_str());
- Sensor* s_PI6174 = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, SECOND_MEASURED_DATA_NAME.c_str());
- Sensor* s_PI6184 = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, THIRD_MEASURED_DATA_NAME.c_str());
- Sensor* s_FC6104 = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, FOURTH_MEASURED_DATA_NAME.c_str());
- Sensor* s_FC6104_SP = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, FIFTH_MEASURED_DATA_NAME.c_str());
- Sensor* s_FC6104_Y = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, SIXTH_MEASURED_DATA_NAME.c_str());
- Sensor* s_FC6114CO = create_sensor(c_name_of_current_sensor);
- strcpy(c_name_of_current_sensor, SEVENTH_MEASURED_DATA_NAME.c_str());
- Sensor* s_QI6154 = create_sensor(c_name_of_current_sensor);
- vec_of_Sensors.push_back(s_PI6174);
- vec_of_Sensors.push_back(s_PI6184);
- vec_of_Sensors.push_back(s_FC6104);
- vec_of_Sensors.push_back(s_FC6104_SP);
- vec_of_Sensors.push_back(s_FC6104_Y);
- vec_of_Sensors.push_back(s_FC6114CO);
- vec_of_Sensors.push_back(s_QI6154);
+ for(int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ strcpy(c_name_of_current_sensor, measured_data_names[i].c_str());
+ Sensor* s = create_sensor(c_name_of_current_sensor);
+ vec_of_Sensors.push_back(s);
+ }
cout << vec_of_Sensors.size() << " sensors were created." << endl;
delete c_name_of_current_sensor;
}
/*
* working cycle of all registered sensors is set
*/
void set_working_cycle_of_All_Sensors()
{
unsigned int working_Cyle = SAMPLING;
unsigned int size_of_vec_of_Sensors = 0;
unsigned int index = 0;
Sensor* current_Sensor;
size_of_vec_of_Sensors = vec_of_Sensors.size();
for(index = 0; index < size_of_vec_of_Sensors; index++) {
current_Sensor = vec_of_Sensors[index];
setWorkingCycleOfSensor(current_Sensor, working_Cyle);
}
}
/*
* creating and registering all channels
*/
void create_and_register_channels()
{
create_and_register_channels_for_sensors();
create_and_register_channels_for_agents();
}
/*
* creating and registering the channels for the sensors.
*/
void create_and_register_channels_for_sensors()
{
cout << "Creating and registering channels for sensors" << endl;
char* c_name_of_current_channel = new char[MAX_LENGTH_NAME];
- strcpy(c_name_of_current_channel, FIRST_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_PI6174 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SECOND_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_PI6184 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, THIRD_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_FC6104 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, FOURTH_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_FC6104_SP = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, FIFTH_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_FC6104_Y = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SIXTH_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_FC6114CO = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SEVENTH_MEASURED_CHANNEL_SENSOR_NAME.c_str());
- Channel* c_sa_QI6154 = create_channel(c_name_of_current_channel, 0);
-
- vec_of_Channels_for_Sensors.push_back(c_sa_PI6174);
- vec_of_Channels_for_Sensors.push_back(c_sa_PI6184);
- vec_of_Channels_for_Sensors.push_back(c_sa_FC6104);
- vec_of_Channels_for_Sensors.push_back(c_sa_FC6104_SP);
- vec_of_Channels_for_Sensors.push_back(c_sa_FC6104_Y);
- vec_of_Channels_for_Sensors.push_back(c_sa_FC6114CO);
- vec_of_Channels_for_Sensors.push_back(c_sa_QI6154);
+ for(int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ strcpy(c_name_of_current_channel, measured_channel_sensor_names[i].c_str());
+ Channel* c = create_channel(c_name_of_current_channel, 0);
+ vec_of_Channels_for_Sensors.push_back(c);
+ }
cout << vec_of_Channels_for_Sensors.size() << " channels for sensors were created" << endl;
delete c_name_of_current_channel;
}
/*
* creating and registering the channels for the agents
*/
void create_and_register_channels_for_agents()
{
cout << "Creating and registering channels for agents" << endl;
char* c_name_of_current_channel = new char[MAX_LENGTH_NAME];
- strcpy(c_name_of_current_channel, FIRST_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_PI6174 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SECOND_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_PI6184 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, THIRD_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_FC6104 = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, FOURTH_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_FC6104_SP = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, FIFTH_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_FC6104_Y = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SIXTH_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_FC6114CO = create_channel(c_name_of_current_channel, 0);
- strcpy(c_name_of_current_channel, SEVENTH_MEASURED_CHANNEL_AGENT_NAME.c_str());
- Channel* c_aa_QI6154 = create_channel(c_name_of_current_channel, 0);
-
- vec_of_Channels_for_Agents.push_back(c_aa_PI6174);
- vec_of_Channels_for_Agents.push_back(c_aa_PI6184);
- vec_of_Channels_for_Agents.push_back(c_aa_FC6104);
- vec_of_Channels_for_Agents.push_back(c_aa_FC6104_SP);
- vec_of_Channels_for_Agents.push_back(c_aa_FC6104_Y);
- vec_of_Channels_for_Agents.push_back(c_aa_FC6114CO);
- vec_of_Channels_for_Agents.push_back(c_aa_QI6154);
-
+ for(int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ strcpy(c_name_of_current_channel, measured_channel_agent_names[i].c_str());
+ Channel* c = create_channel(c_name_of_current_channel, 0);
+ vec_of_Channels_for_Agents.push_back(c);
+ }
cout << vec_of_Channels_for_Agents.size() << " channels for agents were created" << endl;
delete c_name_of_current_channel;
}
void mount_sensors_in_agents()
{
Agent* current_agent;
Sensor* current_sensor;
Channel* current_sensor_channel;
unsigned int size_of_vec_sensor = 0;
unsigned int index = 0;
size_of_vec_sensor = vec_of_Sensors.size();
cout << "mounting sensors in agents." << endl;
//it is assumed that the corresponding sensors and agents and channels are always at the same
//position in the different vectors, if not then you have to add an search algorithm for it.
for(index = 0; index < size_of_vec_sensor; index++)
{
current_agent = vec_of_Agents[index];
current_sensor = vec_of_Sensors[index];
current_sensor_channel = vec_of_Channels_for_Sensors[index];
mount_sensorInAgent(current_agent, current_sensor, current_sensor_channel);
}
cout << size_of_vec_sensor << " sensors in agents were mounted" << endl;
}
void mount_agents_in_agents()
{
Agent* current_agent;
Agent* viability_Monitor;
Channel* current_agent_channel;
unsigned int size_of_vec_agents = 0;
unsigned int index = 0;
size_of_vec_agents = vec_of_Agents.size();
//it is assumed that the viability agent is at the last position in the vector
viability_Monitor = vec_of_Agents[size_of_vec_agents-1];
//all agents and channels are registered to the viabilityMonitor agent
//so you have to subtract the viabilityMonitor from the number of elements to register
//it is assumed that all the corresponding channels and agents are placed at the same index
for(index = 0; index < size_of_vec_agents -1; index++)
{
current_agent = vec_of_Agents[index];
current_agent_channel = vec_of_Channels_for_Agents[index];
//only register if the agent is not the viability_monitor, otherwise you would register the viability monitor to itself.
if(current_agent != viability_Monitor) {
mount_agentInAgent(viability_Monitor, current_agent, current_agent_channel);
}
}
cout << size_of_vec_agents -1 << "agents were registered to the viability monitor" << endl;
}
/*
* registers the channels for the data agents to the viability monitor
*/
void register_data_agents_in_agent_state_Handler()
{
Agent* viability_Monitor;
Channel* current_agent_channel;
unsigned int size_of_vec_channel_agents = 0;
unsigned int index = 0;
size_of_vec_channel_agents = vec_of_Channels_for_Agents.size();
//get the agent for the viabilityMonitor, it is assumed that it is at the last position
viability_Monitor = vec_of_Agents[vec_of_Agents.size()-1];
//register all the channels to the viability monitor
for(index = 0; index < size_of_vec_channel_agents; index++) {
current_agent_channel = vec_of_Channels_for_Agents[index];
if(index != INDEX_OUTPUT) {
registerSlaveAgentAsInputVariableInStateHandler(viability_Monitor, current_agent_channel);
}
else{
registerSlaveAgentAsOutputVariableInStateHandler(viability_Monitor, current_agent_channel);
}
}
}
/*
* creates and register all the different linear function blocks
*/
void create_linear_function_blocks()
{
//don't change the sequence, because later it is assumed that the functions are
//registered int the vector in this sequence
//if you change it you have also to change the sequence in the function mount_function_blocks_to_viability_monitor
create_same_state_deviation_function_block();
create_another_state_deviation_function_block();
create_state_time_function_block();
create_another_state_time_function_block();
create_valid_state_deviation_function_block();
create_invalid_state_deviation_function_block();
create_valid_state_time_function_block();
create_invalid_state_time_function_block();
create_confidence_state_drift_function_block();
create_confidence_broken_function_block();
}
/*
* creates and register the linear function block for same state deviation
*/
void create_same_state_deviation_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_SAME_STATE_DEV.c_str());
LinearFunctionBlock* confSim2StateDev = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfSim2StateDev1 = new LinearFunction(CONF_SIM2_STATE_DEV_1);
funcConfSim2StateDev1->setDomain(false, true, (float)-OUTTER_BOUND_SIM_DIF);
funcConfSim2StateDev1->setKandD((float)0, (float)0);
confSim2StateDev->addLinearFunction(funcConfSim2StateDev1);
LinearFunction* funcConfSim2StateDev2 = new LinearFunction(CONF_SIM2_STATE_DEV_2);
funcConfSim2StateDev2->setDomain(true, (float)-OUTTER_BOUND_SIM_DIF, true, (float)-INNER_BOUND_SIM_DIF);
funcConfSim2StateDev2->setKandD((float)-OUTTER_BOUND_SIM_DIF, (float)0, (float)-INNER_BOUND_SIM_DIF, (float)1);
confSim2StateDev->addLinearFunction(funcConfSim2StateDev2);
LinearFunction* funcConfSim2StateDev3 = new LinearFunction(CONF_SIM2_STATE_DEV_3);
funcConfSim2StateDev3->setDomain(true, (float)-INNER_BOUND_SIM_DIF, true, (float)INNER_BOUND_SIM_DIF);
funcConfSim2StateDev3->setKandD((float)0, (float)1);
confSim2StateDev->addLinearFunction(funcConfSim2StateDev3);
LinearFunction* funcConfSim2StateDev4 = new LinearFunction(CONF_SIM2_STATE_DEV_4);
funcConfSim2StateDev4->setDomain(true, (float)INNER_BOUND_SIM_DIF, true, (float)OUTTER_BOUND_SIM_DIF);
funcConfSim2StateDev4->setKandD((float)INNER_BOUND_SIM_DIF, (float)1, (float)OUTTER_BOUND_SIM_DIF, (float)0);
confSim2StateDev->addLinearFunction(funcConfSim2StateDev4);
LinearFunction* funcConfSim2StateDev5 = new LinearFunction(CONF_SIM2_STATE_DEV_5);
funcConfSim2StateDev5->setDomain(true, (float)OUTTER_BOUND_SIM_DIF, false);
funcConfSim2StateDev5->setKandD((float)0, (float)0);
confSim2StateDev->addLinearFunction(funcConfSim2StateDev5);
vec_of_linear_Function_Blocks.push_back(confSim2StateDev);
delete c_name_of_current_func_block;
}
/*
* creates and register another state deviation function block
*/
void create_another_state_deviation_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_ANOTHER_STATE_DEV.c_str());
LinearFunctionBlock* confDif2StateDev = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfDif2StateDev1 = new LinearFunction(CONF_DIF2_STATE_DEV_1);
funcConfDif2StateDev1->setDomain(false, true, (float)-OUTTER_BOUND_SIM_DIF);
funcConfDif2StateDev1->setKandD((float)0, (float)1);
confDif2StateDev->addLinearFunction(funcConfDif2StateDev1);
LinearFunction* funcConfDif2StateDev2 = new LinearFunction(CONF_DIF2_STATE_DEV_2);
funcConfDif2StateDev2->setDomain(true, (float)-OUTTER_BOUND_SIM_DIF, true, (float)-INNER_BOUND_SIM_DIF);
funcConfDif2StateDev2->setKandD((float)-OUTTER_BOUND_SIM_DIF, (float)1, (float)-INNER_BOUND_SIM_DIF, (float)0);
confDif2StateDev->addLinearFunction(funcConfDif2StateDev2);
LinearFunction* funcConfDif2StateDev3 = new LinearFunction(CONF_DIF2_STATE_DEV_3);
funcConfDif2StateDev3->setDomain(true, (float)-INNER_BOUND_SIM_DIF, true, (float)INNER_BOUND_SIM_DIF);
funcConfDif2StateDev3->setKandD((float)0, (float)0);
confDif2StateDev->addLinearFunction(funcConfDif2StateDev3);
LinearFunction* funcConfDif2StateDev4 = new LinearFunction(CONF_DIF2_STATE_DEV_4);
funcConfDif2StateDev4->setDomain(true, (float)INNER_BOUND_SIM_DIF, true, (float)OUTTER_BOUND_SIM_DIF);
funcConfDif2StateDev4->setKandD((float)INNER_BOUND_SIM_DIF, (float)0, (float)OUTTER_BOUND_SIM_DIF, (float)1);
confDif2StateDev->addLinearFunction(funcConfDif2StateDev4);
LinearFunction* funcConfDif2StateDev5 = new LinearFunction(CONF_DIF2_STATE_DEV_5);
funcConfDif2StateDev5->setDomain(true, (float)OUTTER_BOUND_SIM_DIF, false);
funcConfDif2StateDev5->setKandD((float)0, (float)1);
confDif2StateDev->addLinearFunction(funcConfDif2StateDev5);
vec_of_linear_Function_Blocks.push_back(confDif2StateDev);
delete c_name_of_current_func_block;
}
void create_state_time_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_SAME_TIME.c_str());
LinearFunctionBlock* confSim2StateTime = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfSim2StateTime1 = new LinearFunction(CONF_SIM2_STATE_TIME_1);
funcConfSim2StateTime1->setDomain(false, true, (float)0);
funcConfSim2StateTime1->setKandD((float)0, (float)0);
confSim2StateTime->addLinearFunction(funcConfSim2StateTime1);
LinearFunction* funcConfSim2StateTime2 = new LinearFunction(CONF_SIM2_STATE_TIME_2);
funcConfSim2StateTime2->setDomain(true, (float)0, true, (float)LENGTH);
funcConfSim2StateTime2->setKandD((float)0, (float)0, (float)LENGTH, (float)1);
confSim2StateTime->addLinearFunction(funcConfSim2StateTime2);
LinearFunction* funcConfSim2StateTime3 = new LinearFunction(CONF_SIM2_STATE_TIME_3);
funcConfSim2StateTime3->setDomain(true, (float)LENGTH, false);
funcConfSim2StateTime3->setKandD((float)0, (float)1);
confSim2StateTime->addLinearFunction(funcConfSim2StateTime3);
vec_of_linear_Function_Blocks.push_back(confSim2StateTime);
delete c_name_of_current_func_block;
}
void create_another_state_time_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_ANOTHER_STATE_TIME.c_str());
LinearFunctionBlock* confDif2StateTime = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfDif2StateTime1 = new LinearFunction(CONF_DIF2_STATE_TIME_1);
funcConfDif2StateTime1->setDomain(false, true, (float)0);
funcConfDif2StateTime1->setKandD((float)0, (float)1);
confDif2StateTime->addLinearFunction(funcConfDif2StateTime1);
LinearFunction* funcConfDif2StateTime2 = new LinearFunction(CONF_DIF2_STATE_TIME_2);
funcConfDif2StateTime2->setDomain(true, (float)0, true, (float)LENGTH);
funcConfDif2StateTime2->setKandD((float)0, (float)1, (float)LENGTH, (float)0);
confDif2StateTime->addLinearFunction(funcConfDif2StateTime2);
LinearFunction* funcConfDif2StateTime3 = new LinearFunction(CONF_DIF2_STATE_TIME_3);
funcConfDif2StateTime3->setDomain(true, (float)LENGTH, false);
funcConfDif2StateTime3->setKandD((float)0, (float)0);
confDif2StateTime->addLinearFunction(funcConfDif2StateTime3);
vec_of_linear_Function_Blocks.push_back(confDif2StateTime);
delete c_name_of_current_func_block;
}
void create_valid_state_deviation_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_VAILD_STATE_DEV.c_str());
LinearFunctionBlock* confValidStateDev = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfValidStateDev1 = new LinearFunction(CONF_VALID_STATE_DEV_1);
funcConfValidStateDev1->setDomain(false, true, (float)-OUTTER_BOUND_SIM_DIF);
funcConfValidStateDev1->setKandD((float)0, (float)0);
confValidStateDev->addLinearFunction(funcConfValidStateDev1);
LinearFunction* funcConfValidStateDev2 = new LinearFunction(CONF_VALID_STATE_DEV_2);
funcConfValidStateDev2->setDomain(true, (float)-OUTTER_BOUND_SIM_DIF, true, (float)-INNER_BOUND_SIM_DIF);
funcConfValidStateDev2->setKandD((float)-OUTTER_BOUND_SIM_DIF, (float)0, (float)-INNER_BOUND_SIM_DIF, (float)1);
confValidStateDev->addLinearFunction(funcConfValidStateDev2);
LinearFunction* funcConfValidStateDev3 = new LinearFunction(CONF_VALID_STATE_DEV_3);
funcConfValidStateDev3->setDomain(true, (float)-INNER_BOUND_SIM_DIF, true, (float)INNER_BOUND_SIM_DIF);
funcConfValidStateDev3->setKandD((float)0, (float)1);
confValidStateDev->addLinearFunction(funcConfValidStateDev3);
LinearFunction* funcConfValidStateDev4 = new LinearFunction(CONF_VALID_STATE_DEV_4);
funcConfValidStateDev4->setDomain(true, (float)INNER_BOUND_SIM_DIF, true, (float)OUTTER_BOUND_SIM_DIF);
funcConfValidStateDev4->setKandD((float)INNER_BOUND_SIM_DIF, (float)1, (float)OUTTER_BOUND_SIM_DIF, (float)0);
confValidStateDev->addLinearFunction(funcConfValidStateDev4);
LinearFunction* funcConfValidStateDev5 = new LinearFunction(CONF_VALID_STATE_DEV_5);
funcConfValidStateDev5->setDomain(true, (float)OUTTER_BOUND_SIM_DIF, false);
funcConfValidStateDev5->setKandD((float)0, (float)0);
confValidStateDev->addLinearFunction(funcConfValidStateDev5);
vec_of_linear_Function_Blocks.push_back(confValidStateDev);
delete c_name_of_current_func_block;
}
void create_invalid_state_deviation_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_INVALID_STATE_DEV.c_str());
LinearFunctionBlock* confInvalidStateDev = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfInvalidStateDev1 = new LinearFunction(CONF_INVALID_STATE_DEV_1);
funcConfInvalidStateDev1->setDomain(false, true, (float)-OUTTER_BOUND_SIM_DIF);
funcConfInvalidStateDev1->setKandD((float)0, (float)1);
confInvalidStateDev->addLinearFunction(funcConfInvalidStateDev1);
LinearFunction* funcConfInvalidStateDev2 = new LinearFunction(CONF_INVALID_STATE_DEV_2);
funcConfInvalidStateDev2->setDomain(true, (float)-OUTTER_BOUND_SIM_DIF, true, (float)-INNER_BOUND_SIM_DIF);
funcConfInvalidStateDev2->setKandD((float)-OUTTER_BOUND_SIM_DIF, (float)1, (float)-INNER_BOUND_SIM_DIF, (float)0);
confInvalidStateDev->addLinearFunction(funcConfInvalidStateDev2);
LinearFunction* funcConfInvalidStateDev3 = new LinearFunction(CONF_INVALID_STATE_DEV_3);
funcConfInvalidStateDev3->setDomain(true, (float)-INNER_BOUND_SIM_DIF, true, (float)INNER_BOUND_SIM_DIF);
funcConfInvalidStateDev3->setKandD((float)0, (float)0);
confInvalidStateDev->addLinearFunction(funcConfInvalidStateDev3);
LinearFunction* funcConfInvalidStateDev4 = new LinearFunction(CONF_INVALID_STATE_DEV_4);
funcConfInvalidStateDev4->setDomain(true, (float)INNER_BOUND_SIM_DIF, true, (float)OUTTER_BOUND_SIM_DIF);
funcConfInvalidStateDev4->setKandD((float)INNER_BOUND_SIM_DIF, (float)0, (float)OUTTER_BOUND_SIM_DIF, (float)1);
confInvalidStateDev->addLinearFunction(funcConfInvalidStateDev4);
LinearFunction* funcConfInvalidStateDev5 = new LinearFunction(CONF_INVALID_STATE_DEV_5);
funcConfInvalidStateDev5->setDomain(true, (float)OUTTER_BOUND_SIM_DIF, false);
funcConfInvalidStateDev5->setKandD((float)0, (float)1);
confInvalidStateDev->addLinearFunction(funcConfInvalidStateDev5);
vec_of_linear_Function_Blocks.push_back(confInvalidStateDev);
delete c_name_of_current_func_block;
}
void create_valid_state_time_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_VALID_STATE_TIME.c_str());
LinearFunctionBlock* confValidStateTime = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfValidStateTime1 = new LinearFunction(VALID_STATE_TIME_1);
funcConfValidStateTime1->setDomain(false, true, (float)0);
funcConfValidStateTime1->setKandD((float)0, (float)0);
confValidStateTime->addLinearFunction(funcConfValidStateTime1);
LinearFunction* funcConfValidStateTime2 = new LinearFunction(VALID_STATE_TIME_2);
funcConfValidStateTime2->setDomain(true, (float)0, true, (float)LENGTH); //10
funcConfValidStateTime2->setKandD((float)0, (float)0, (float)LENGTH, (float)1);
confValidStateTime->addLinearFunction(funcConfValidStateTime2);
LinearFunction* funcConfValidStateTime3 = new LinearFunction(VALID_STATE_TIME_3);
funcConfValidStateTime3->setDomain(true, (float)LENGTH, false);
funcConfValidStateTime3->setKandD((float)0, (float)1);
confValidStateTime->addLinearFunction(funcConfValidStateTime3);
vec_of_linear_Function_Blocks.push_back(confValidStateTime);
delete c_name_of_current_func_block;
}
void create_invalid_state_time_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_INVALID_STATE_TIME.c_str());
LinearFunctionBlock* confInvalidStateTime = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* funcConfInvalidStateTime1 = new LinearFunction(INVALID_STATE_TIME_1);
funcConfInvalidStateTime1->setDomain(false, true, (float)0);
funcConfInvalidStateTime1->setKandD((float)0, (float)1);
confInvalidStateTime->addLinearFunction(funcConfInvalidStateTime1);
LinearFunction* funcConfInvalidStateTime2 = new LinearFunction(INVALID_STATE_TIME_2);
funcConfInvalidStateTime2->setDomain(true, (float)0, true, (float)LENGTH);
funcConfInvalidStateTime2->setKandD((float)0, (float)1, (float)LENGTH, (float)0);
confInvalidStateTime->addLinearFunction(funcConfInvalidStateTime2);
LinearFunction* funcConfInvalidStateTime3 = new LinearFunction(INVALID_STATE_TIME_3);
funcConfInvalidStateTime3->setDomain(true, (float)LENGTH, false);
funcConfInvalidStateTime3->setKandD((float)0, (float)0);
confInvalidStateTime->addLinearFunction(funcConfInvalidStateTime3);
vec_of_linear_Function_Blocks.push_back(confInvalidStateTime);
delete c_name_of_current_func_block;
}
void create_confidence_state_drift_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_CONFIDENCE_STATE_DRIFTS.c_str());
LinearFunctionBlock* confStateDrifts = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* functionConfidenceDriftDeviation1 = new LinearFunction(CONFIDENCE_DRIFT_DEVIATION_1);
functionConfidenceDriftDeviation1->setDomain(false, true, (float)-OUTTER_BOUND_DRIFT);
functionConfidenceDriftDeviation1->setKandD((float)0, (float)1);
confStateDrifts->addLinearFunction(functionConfidenceDriftDeviation1);
LinearFunction* functionConfidenceDriftDeviation2 = new LinearFunction(CONFIDENCE_DRIFT_DEVIATION_2);
functionConfidenceDriftDeviation2->setDomain(true, (float)-OUTTER_BOUND_DRIFT, true, (float)-INNER_BOUND_DRIFT);
functionConfidenceDriftDeviation2->setKandD((float)-INNER_BOUND_DRIFT, (float)1, (float)-INNER_BOUND_DRIFT, (float)0);
confStateDrifts->addLinearFunction(functionConfidenceDriftDeviation2);
LinearFunction* functionConfidenceDriftDeviation3 = new LinearFunction(CONFIDENCE_DRIFT_DEVIATION_3);
functionConfidenceDriftDeviation3->setDomain(true, (float)-INNER_BOUND_DRIFT, true, (float)INNER_BOUND_DRIFT);
functionConfidenceDriftDeviation3->setKandD((float)0, (float)0);
confStateDrifts->addLinearFunction(functionConfidenceDriftDeviation3);
LinearFunction* functionConfidenceDriftDeviation4 = new LinearFunction(CONFIDENCE_DRIFT_DEVIATION_4);
functionConfidenceDriftDeviation4->setDomain(true, (float)INNER_BOUND_DRIFT, true, (float)OUTTER_BOUND_DRIFT);
functionConfidenceDriftDeviation4->setKandD((float)INNER_BOUND_DRIFT, (float)0, (float)OUTTER_BOUND_DRIFT, (float)1);
confStateDrifts->addLinearFunction(functionConfidenceDriftDeviation4);
LinearFunction* functionConfidenceDriftDeviation5 = new LinearFunction(CONFIDENCE_DRIFT_DEVIATION_5);
functionConfidenceDriftDeviation5->setDomain(true, (float)OUTTER_BOUND_DRIFT, false);
functionConfidenceDriftDeviation5->setKandD((float)0, (float)1);
confStateDrifts->addLinearFunction(functionConfidenceDriftDeviation5);
vec_of_linear_Function_Blocks.push_back(confStateDrifts);
delete c_name_of_current_func_block;
}
void create_confidence_broken_function_block()
{
char* c_name_of_current_func_block = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_func_block, FUNC_BLOCK_NAME_CONFIDENCE_BROKEN.c_str());
LinearFunctionBlock* confBroken = new LinearFunctionBlock(c_name_of_current_func_block);
LinearFunction* functionConfidenceBroken1 = new LinearFunction(CONFIDENCE_BROKEN_1);
functionConfidenceBroken1->setDomain(false, true, (float)0);
functionConfidenceBroken1->setKandD((float)0, (float)0);
confBroken->addLinearFunction(functionConfidenceBroken1);
LinearFunction* functionConfidenceBroken2 = new LinearFunction(CONFIDENCE_BROKEN_2);
functionConfidenceBroken2->setDomain(true, (float)0, true, (float)BOUND_BROKEN);
functionConfidenceBroken2->setKandD((float)0, (float)0, (float)BOUND_BROKEN, (float)1);
confBroken->addLinearFunction(functionConfidenceBroken2);
LinearFunction* functionConfidenceBroken3 = new LinearFunction(CONFIDENCE_BROKEN_3);
functionConfidenceBroken3->setDomain(true, (float)BOUND_BROKEN, false);
functionConfidenceBroken3->setKandD((float)0, (float)1);
confBroken->addLinearFunction(functionConfidenceBroken3);
vec_of_linear_Function_Blocks.push_back(confBroken);
delete c_name_of_current_func_block;
}
/*
* mount the different function blocks to the viability monitor agent
*/
void mount_function_blocks_to_viability_monitor()
{
Agent* viability_Monitor;
LinearFunctionBlock* current_Linear_Function_Bock;
unsigned int size_of_vec_lin_func_block = vec_of_linear_Function_Blocks.size();
unsigned int index = 0;
//it is assumed that the viability monitor is at the last position of the vector of agents
viability_Monitor = vec_of_Agents[vec_of_Agents.size()-1];
for(index = 0; index < size_of_vec_lin_func_block; index++) {
current_Linear_Function_Bock = vec_of_linear_Function_Blocks[index];
//it is assumed that the function blocks are added into the vector in the following sequence
switch(index) {
case 0:
viability_Monitor->get_stateHandler()->FuncBlockConfSim2StateDev = current_Linear_Function_Bock;
break;
case 1:
viability_Monitor->get_stateHandler()->FuncBlockConfDif2StateDev = current_Linear_Function_Bock;
break;
case 2:
viability_Monitor->get_stateHandler()->FuncBlockConfSim2StateTime = current_Linear_Function_Bock;
break;
case 3:
viability_Monitor->get_stateHandler()->FuncBlockConfDif2StateTime = current_Linear_Function_Bock;
break;
case 4:
viability_Monitor->get_stateHandler()->FuncBlockConfValStateDev = current_Linear_Function_Bock;
break;
case 5:
viability_Monitor->get_stateHandler()->FuncBlockConfInvStateDev = current_Linear_Function_Bock;
break;
case 6:
viability_Monitor->get_stateHandler()->FuncBlockConfValStateTime = current_Linear_Function_Bock;
break;
case 7:
viability_Monitor->get_stateHandler()->FuncBlockConfInvStateTime = current_Linear_Function_Bock;
break;
case 8:
viability_Monitor->get_stateHandler()->DriftDeviation = current_Linear_Function_Bock;
break;
case 9:
viability_Monitor->get_stateHandler()->FuncBlockConfBrokenSamples = current_Linear_Function_Bock;
break;
}
}
}
void create_all_testbenches() {
char* c_name_of_current_testbench = new char[MAX_LENGTH_NAME];
strcpy(c_name_of_current_testbench, TEST_BENCH.c_str());
cout << "Creating test bench" << endl;
Testbench* tb = create_testbench(c_name_of_current_testbench);
create_and_register_all_Testbench_Configs(tb);
vec_of_test_benches.push_back(tb);
delete c_name_of_current_testbench;
}
void create_csvr_modules()
{
//sets the row in which the data starts, maybe row one contains the headers
unsigned int row = 2;
char* c_name_of_current_csv_module = new char[MAX_LENGTH_NAME];
string current_reader_path_and_file_name;
cout << "Creating CSV Reader Modules" << endl;
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, FIRST_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_PI6174 = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),2,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, SECOND_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_PI6184 = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),3,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, THIRD_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_FC6104 = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),4,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, FOURTH_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_FC6104_SP = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),5,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, FIFTH_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_FC6104_Y = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),6,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, SIXTH_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_FC6114CO = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),7,row);
-
- current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
- strcpy(c_name_of_current_csv_module, SEVENTH_MEASURED_DATA_CSV_NAME.c_str());
- CSVreaderModule* csvr_QI6154 = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),8,row);
-
- vec_of_csv_readers.push_back(csvr_PI6174);
- vec_of_csv_readers.push_back(csvr_PI6184);
- vec_of_csv_readers.push_back(csvr_FC6104);
- vec_of_csv_readers.push_back(csvr_FC6104_SP);
- vec_of_csv_readers.push_back(csvr_FC6104_Y);
- vec_of_csv_readers.push_back(csvr_FC6114CO);
- vec_of_csv_readers.push_back(csvr_QI6154);
-
+ for(unsigned int i = 0; i < NUM_DATA_POINTS; i++)
+ {
+ current_reader_path_and_file_name = PATH_TO_CSV_DATA_FILES + PATH_TO_DATE_OF_MEASUREMENT + PATH_TO_AN_MEASURMENT + FILE_NAME_OF_ENTIRE_DATA;
+ strcpy(c_name_of_current_csv_module, measured_data_csv_names[i].c_str());
+ CSVreaderModule* csvr = create_CSVreaderModule(c_name_of_current_csv_module,current_reader_path_and_file_name.c_str(),2+i,row);
+ vec_of_csv_readers.push_back(csvr);
+ }
delete c_name_of_current_csv_module;
}
/*
* all agents would be registered to all testbenches
*/
void register_agents_in_testbenches()
{
Testbench* current_tb;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
Agent* current_ag;
unsigned int size_of_vec_agents = vec_of_Agents.size();
unsigned int index_agents = 0;
cout << "registering agents in testbenches" << endl;
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++) {
current_tb = vec_of_test_benches[index_tb];
for(index_agents = 0; index_agents < size_of_vec_agents; index_agents++) {
current_ag = vec_of_Agents[index_agents];
register_agentInTestbench(current_tb, current_ag);
}
}
cout << size_of_vec_agents << " agents were registered in every of the " << size_of_vec_test_benches << " testbenches" << endl;
}
/*
* registering the sensors and the corresponding csv-readers in the testbenches
* it is assumed that the csv readers and the sensors are at the same index position
* in the vectors.
*/
void register_sensors_in_testbenches()
{
Testbench* current_tb;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
Sensor* current_se;
unsigned int size_of_vec_sensors = vec_of_Sensors.size();
unsigned int index_sensors = 0;
CSVreaderModule* current_csv_reader;
unsigned int size_of_vec_csv_reader = vec_of_csv_readers.size();
if(size_of_vec_csv_reader != size_of_vec_sensors) {
cout << "Error, in sequence of data processing";
cout << "Number of csv-readers should be equal to number of sensors" << endl;
}
else {
cout << "Registering sensors and their csv-readers in testbenches " << endl;
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++) {
current_tb = vec_of_test_benches[index_tb];
for(index_sensors = 0; index_sensors < size_of_vec_sensors; index_sensors++) {
current_se = vec_of_Sensors[index_sensors];
//it is assumed that the sensor and the corresponding csv-reader is stored
//at the same position in the two different vectors
current_csv_reader = vec_of_csv_readers[index_sensors];
register_sensorInTestbench(current_tb, current_se, current_csv_reader);
}
}
cout << size_of_vec_sensors << " Sensors and their csv-readers were registered to ";
cout << "every of the " << size_of_vec_test_benches << " testbenches" << endl;
}
}
void register_channels_in_testbenches()
{
register_channels_of_sensors_in_testbenches();
register_channels_of_actors_in_testbenches();
}
void register_channels_of_sensors_in_testbenches()
{
Testbench* current_tb;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
Channel* current_se_ch;
unsigned int size_of_vec_se_channel = vec_of_Channels_for_Sensors.size();
unsigned int index_se_ch = 0;
cout << "Registering channels of sensors in testbench" << endl;
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++) {
current_tb = vec_of_test_benches[index_tb];
for(index_se_ch = 0; index_se_ch < size_of_vec_se_channel; index_se_ch++) {
current_se_ch = vec_of_Channels_for_Sensors[index_se_ch];
register_channelInTestbench(current_tb, current_se_ch);
}
}
cout << size_of_vec_se_channel << " channels of sensors were registered in ";
cout << size_of_vec_test_benches << " testbenches." << endl;
}
void register_channels_of_actors_in_testbenches()
{
Testbench* current_tb;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
Channel* current_se_ch;
unsigned int size_of_vec_ag_channel = vec_of_Channels_for_Agents.size();
unsigned int index_se_ch = 0;
cout << "Registering channels of agents in testbench" << endl;
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++) {
current_tb = vec_of_test_benches[index_tb];
for(index_se_ch = 0; index_se_ch < size_of_vec_ag_channel; index_se_ch++) {
current_se_ch = vec_of_Channels_for_Agents[index_se_ch];
register_channelInTestbench(current_tb, current_se_ch);
}
}
cout << size_of_vec_ag_channel << " channels of agents were registered in ";
cout << size_of_vec_test_benches << " testbenches." << endl;
}
void run_simulation_of_all_testbenches()
{
string pressed_key;
Testbench* current_tb;
vector<Testbench_Config*> vec_tb_configs;
Testbench_Config* current_tb_config;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
unsigned int size_of_vec_test_bench_config;
unsigned int index_tb_cfg = 0;
unsigned int sim_rounds = 131;
const int start_row = 1;
cout << "Press any key to start the simulation of all testbenches." << endl;
getline(cin, pressed_key);
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++){
current_tb = vec_of_test_benches[index_tb];
index_tb_cfg = 0;
vec_tb_configs = current_tb->get_all_registered_testbench_configs();
size_of_vec_test_bench_config = vec_tb_configs.size();
for(index_tb_cfg = 0; index_tb_cfg < size_of_vec_test_bench_config; index_tb_cfg++){
current_tb_config = vec_tb_configs[index_tb_cfg];
current_tb->set_current_tb_config_index(index_tb_cfg);
current_tb->set_CSV_Writer_parameter();
current_tb->set_config_values_in_linear_functions();
//have to open new file first! with the CSV-Writer, for every round > 0
current_tb->simulate(sim_rounds);
if(index_tb_cfg < size_of_vec_test_bench_config - 1) {
current_tb->set_CSV_Reader_row(start_row);
current_tb->set_CSV_Reader_to_beginning();
current_tb->reset_States();
}
}
}
cout << "Simulation of " << size_of_vec_test_benches << " testbenches successfully finished" << endl;
}
void close_file_pointers()
{
CSVreaderModule* current_csv_reader;
unsigned int size_of_vec_csv_reader = vec_of_csv_readers.size();
unsigned int index_csv_reader;
for(index_csv_reader = 0; index_csv_reader < size_of_vec_csv_reader; index_csv_reader++) {
current_csv_reader = vec_of_csv_readers[index_csv_reader];
current_csv_reader->close_file();
}
}
void empty_static_vectors()
{
empty_vec_Agent();
empty_vec_Channel_Agent();
empty_vec_Channel_Sensor();
empty_vec_Sensors();
empty_vec_csv_raders();
empty_vec_linear_func_Blocks();
empty_vec_TestBench();
vec_of_Channels_for_Agents.clear();
vec_of_Channels_for_Sensors.clear();
vec_of_Sensors.clear();
vec_of_csv_readers.clear();
vec_of_linear_Function_Blocks.clear();
}
void empty_vec_Agent()
{
Agent* cur_Agent;
unsigned int size_of_vec_Agent = vec_of_Agents.size();
unsigned int index_Agent;
for(index_Agent = 0; index_Agent < size_of_vec_Agent; index_Agent++){
cur_Agent = vec_of_Agents[index_Agent];
delete cur_Agent;
}
vec_of_Agents.clear();
}
void empty_vec_Channel_Agent()
{
Channel* cur_Channel;
unsigned int size_of_vec_Chan_Agent = vec_of_Channels_for_Agents.size();
unsigned int index_Channel;
for(index_Channel = 0; index_Channel < size_of_vec_Chan_Agent; index_Channel++){
cur_Channel = vec_of_Channels_for_Agents[index_Channel];
//delete cur_Channel;
}
vec_of_Channels_for_Agents.clear();
}
void empty_vec_Channel_Sensor()
{
Channel* cur_Channel;
unsigned int size_of_vec_Chan_Sensor = vec_of_Channels_for_Sensors.size();
unsigned int index_Channel;
for(index_Channel = 0; index_Channel < size_of_vec_Chan_Sensor; index_Channel++){
cur_Channel = vec_of_Channels_for_Sensors[index_Channel];
delete cur_Channel;
}
vec_of_Channels_for_Sensors.clear();
}
void empty_vec_Sensors()
{
Sensor* cur_Sensor;
unsigned int size_of_vec_Chan_Sensor = vec_of_Sensors.size();
unsigned int index_Sensor;
for(index_Sensor = 0; index_Sensor < size_of_vec_Chan_Sensor; index_Sensor++){
cur_Sensor = vec_of_Sensors[index_Sensor];
delete cur_Sensor;
}
vec_of_Sensors.clear();
}
void empty_vec_csv_raders()
{
CSVreaderModule* cur_csv_reader;
unsigned int size_of_vec_csv_reader = vec_of_csv_readers.size();
unsigned int index_csv_reader;
for(index_csv_reader = 0; index_csv_reader < size_of_vec_csv_reader; index_csv_reader++){
cur_csv_reader = vec_of_csv_readers[index_csv_reader];
delete cur_csv_reader;
}
vec_of_csv_readers.clear();
}
void empty_vec_linear_func_Blocks()
{
LinearFunctionBlock* cur_lin_fun_block;
unsigned int size_of_vec_lin_fun_block= vec_of_linear_Function_Blocks.size();
unsigned int index_lin_fun_block;
for(index_lin_fun_block = 0; index_lin_fun_block < size_of_vec_lin_fun_block; index_lin_fun_block++){
cur_lin_fun_block = vec_of_linear_Function_Blocks[index_lin_fun_block];
delete cur_lin_fun_block;
}
vec_of_linear_Function_Blocks.clear();
}
void empty_vec_TestBench()
{
Testbench* current_tb;
unsigned int size_of_vec_test_benches = vec_of_test_benches.size();
unsigned int index_tb = 0;
for(index_tb = 0; index_tb < size_of_vec_test_benches; index_tb++){
current_tb = vec_of_test_benches[index_tb];
current_tb->free_resources();
delete current_tb;
}
vec_of_test_benches.clear();
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Mar 16, 5:13 AM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
129102
Default Alt Text
(56 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment