Page MenuHomePhorge

No OneTemporary

Size
56 KB
Referenced Files
None
Subscribers
None
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

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)

Event Timeline