User Tools

Site Tools


eeros_architecture:control_system:subsystem

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
eeros_architecture:control_system:subsystem [2017/12/19 07:45] – [Define a Subsystem] grafeeros_architecture:control_system:subsystem [2023/06/28 13:18] (current) – [Using Subio Block] ursgraf
Line 4: Line 4:
  
 ===== Define a  Subsystem ===== ===== Define a  Subsystem =====
-In order to create a subsystem you have to create a custom made block (see [[eeros_architecture:control_system:custom_blocks|]]) TODO. Define the necessary inner blocks in your custom class. In the constructor you create the inner blocks and connect them among each other. +In order to create a subsystem you can extend the available block ''Subio'' or you have to create a custom made block (see [[eeros_architecture:control_system:custom_blocks|]]). 
 + 
 +==== Using Subio Block ==== 
 + 
 +Define the number of inputs and outputs of your sysbsystem together with the necessary inner blocks in your custom class. In the constructor you create the inner blocks and connect them among each other. The run-method must call all the run-methods of the inner blocks. Set the outputs of your subsystem to suitable outputs of your inner blocks.
 <code cpp> <code cpp>
-class Observer : public eeros::control::Block +class Observer : public eeros::control::Subio<1,1,Vector2,Vector2> 
-public:  + public:  
-  Observer() : gain1(5.0) ... { +  Observer() : gain1({5.0, 2.2}) ... { 
-    sum1.negateInout(1); +    sum1.getIn(1).connect(sum2.getOut()); 
-    sum1.getIn(0).connect(sum2.getOut());+    sum1.negateInput(1)
 +    setOut(sum1.getOut());
     ...     ...
   }   }
-  virtual ~Observer() { }+
   virtual void run()  {   virtual void run()  {
     sum2.run();     sum2.run();
Line 21: Line 26:
   }   }
      
-  virtual eeros::control::Input<double>& getSum1In() {return sum1.getIn();+ private:  
-  virtual eeros::control::Input<double>& getSum2In() {return sum2.getIn();+  eeros::control::Gain<Vector2> gain1; 
-  virtual eeros::control::Output<double>& getGain1Out() {return gain1.getOut();}+  eeros::control::Sum<2, Vector2> sum1, sum2; 
 +  ... 
 +}; 
 +</code> 
 + 
 +The whole subsystem is now a block for itself. It can be added to a control system (or an outer subsystem). Its run-method will be called automatically as soon as it is added to a time domain which itself must be started by the executor. 
 + 
 +For an example study the tutorial at [[getting_started:tutorials:subsystem|]] . 
 + 
 +==== Using Custom Block ==== 
 +Define the necessary inner blocks in your custom class. In the constructor you create the inner blocks and connect them among each other. The run-method must call all the run-methods of the inner blocks. Write getter methods for all the inputs into and outputs out of the new subsystem 
 +<code cpp> 
 +class Observer : public eeros::control::Blockio<0,0>
 + public:  
 +  Observer() : gain1({5.0, 2.2}) ... { 
 +    sum1.getIn(1).connect(sum2.getOut()); 
 +    sum1.negateInput(1); 
 +    ... 
 +  } 
 + 
 +  virtual void run()  { 
 +    sum2.run(); 
 +    sum1.run(); 
 +    ... 
 +    gain1.run(); 
 +  } 
 +   
 +  virtual eeros::control::Input<Vector2>& getSum1In() {return sum1.getIn();
 +  virtual eeros::control::Input<Vector2>& getSum2In() {return sum2.getIn();
 +  virtual eeros::control::Output<Vector2>& getGain1Out() {return gain1.getOut();}
  
-private:  + private:  
-  eeros::control::Gain<double> gain1; +  eeros::control::Gain<Vector2> gain1; 
-  eeros::control::Sum<2, double> sum1, sum2;+  eeros::control::Sum<2, Vector2> sum1, sum2;
   ...   ...
 }; };
Line 33: Line 67:
  
 The whole subsystem is now a block for itself. It can be added to a control system (or an outer subsystem). Its run-method will be called automatically as soon as it is added to a time domain which itself must be started by the executor. The whole subsystem is now a block for itself. It can be added to a control system (or an outer subsystem). Its run-method will be called automatically as soon as it is added to a time domain which itself must be started by the executor.
 +
 +
 +===== Using Input Signals =====
 +Consider the following example
 +[{{ :eeros_architecture:control_system:subsystems2.png?300 |//An observer packed into a subsystem//}}]
 +
 +This subsystem has an input which is used by several blocks within the subsystem. In order to be able to connect these blocks to the input, you have to define the input as being of type ''InputSub'' instead of simply ''Input''
 +<code cpp>
 +InputSub<> in;  
 +</code>
 +The getter function for this input will be 
 +<code cpp>
 +virtual Input<>& getIn() {return in;}  
 +</code>
 +
 +See Tutorial for a example of using a subsystem.
 +
eeros_architecture/control_system/subsystem.1513665900.txt.gz · Last modified: 2017/12/19 07:45 by graf