Skip to content
Snippets Groups Projects
demoApp.cc 3.1 KiB
Newer Older
/*
 * demoApp.cc
 *
 *  Created on: Jun 9, 2016
 *      Author: Martin Hierholzer
 */

#include <iostream>

class AutomationModule : public ctk::ApplicationModule {
    SCALAR_INPUT(double, operatorSetpoint, "MV/m", ctk::UpdateMode::poll);
    SCALAR_OUTPUT(double, loopSetpoint, "MV/m");
      loopSetpoint = 0;
      loopSetpoint.write();
        operatorSetpoint.read();
        if(operatorSetpoint > loopSetpoint) loopSetpoint++;
        if(operatorSetpoint < loopSetpoint) loopSetpoint--;
        std::cout << "AutomationModule: operatorSetpoint = " << operatorSetpoint << std::endl;
        std::cout << "AutomationModule: loopSetpoint = " << loopSetpoint << std::endl;
        loopSetpoint.write();
class ControlLoopModule : public ctk::ApplicationModule {
    SCALAR_INPUT(double, setpoint, "MV/m", ctk::UpdateMode::push);
    SCALAR_INPUT(double, readback, "MV/m", ctk::UpdateMode::push);
    SCALAR_OUTPUT(double, actuator, "MV/m");
        readback.read();
        setpoint.read();
        actuator = 10.*(setpoint-readback);
        std::cout << "ControlLoopModule: setpoint = " << setpoint << std::endl;
        std::cout << "ControlLoopModule: readback = " << readback << std::endl;
        std::cout << "ControlLoopModule: actuator = " << actuator << std::endl;
        actuator.write();
class SimulatorModule : public ctk::ApplicationModule {
  public:

    SCALAR_INPUT(double, actuator, "MV/m", ctk::UpdateMode::push);
    SCALAR_OUTPUT(double, readback, "MV/m");

    double lastValue{0};

    void mainLoop() {

      while(true) {
        actuator.read();
        readback = (100*lastValue + actuator)/100.;
        lastValue = readback;
        std::cout << "SimulatorModule: actuator = " << actuator << std::endl;
        std::cout << "SimulatorModule: readback = " << readback << std::endl;
        readback.write();
        usleep(200000);
      }

    }
};

    AutomationModule automation;
    ControlLoopModule controlLoop;
    SimulatorModule simulator;
      mtca4u::BackendFactory::getInstance().setDMapFilePath("dummy.dmap");

      ctrlVar("MyLocation/setpoint") >> automation.operatorSetpoint;
      automation.loopSetpoint >> controlLoop.setpoint >> cs("setpoint_automation");
      controlLoop.actuator >> dev("Variable") >> cs("actuatorLoop");
      dev("Variable") [ controlLoop.actuator ] >> simulator.actuator >> cs("actuatorSimulator");
      dev("Variable", typeid(double)) [ controlLoop.actuator ] >> cs("actuatorSimulator_direct");
      simulator.readback >> controlLoop.readback >> cs("readback") >> cs("readback_another_time");