Skip to content

Commit

Permalink
Generated FB_RANDOM from IDE to also use EInit
Browse files Browse the repository at this point in the history
readd fortiss Gmbh to copyright header and added Version for fortiss Gmbh

remove tabs

add contribution comment from old file state
  • Loading branch information
MoritzO02 committed Feb 23, 2025
1 parent e8b3291 commit 77b775a
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 92 deletions.
39 changes: 22 additions & 17 deletions src/modules/utils/FB_RANDOM_fbt.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
/*******************************************************************************
* Copyright (c) 2012, 20113, 2015 Profactor GmbH, fortiss GmbH
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer, Alois Zoitl
* - initial API and implementation and/or initial documentation
*******************************************************************************/
/*************************************************************************
*** Copyright (c) 2012, 2015 Profactor GmbH, fortiss GmbH
***
*** This program and the accompanying materials are made
*** available under the terms of the Eclipse Public License 2.0
*** which is available at https://www.eclipse.org/legal/epl-2.0/
***
*** SPDX-License-Identifier: EPL-2.0
***
*** FORTE Library Element
***
*** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG!
***
*** Name: FB_RANDOM
*** Description: Generate a REAL Randomly
*** Version:
*** 1.0: 2012-05-31/Gerhard Ebenhofer - Profactor GmbH - initial API and implementation and/or initial documentation
*** 1.1: 2015-01-01/Alois Zoitl - fortiss GmbH -
*************************************************************************/

#include "FB_RANDOM_fbt.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
Expand All @@ -18,8 +25,8 @@

#include "criticalregion.h"
#include "resource.h"
#include "forte_uint.h"
#include "forte_bool.h"
#include "forte_uint.h"
#include "iec61131_functions.h"
#include "forte_array_common.h"
#include "forte_array.h"
Expand All @@ -39,7 +46,7 @@ const CStringDictionary::TStringId FORTE_FB_RANDOM::scmEventInputTypeIds[] = {g_
const TDataIOID FORTE_FB_RANDOM::scmEOWith[] = {0, scmWithListDelimiter};
const TForteInt16 FORTE_FB_RANDOM::scmEOWithIndexes[] = {-1, 0};
const CStringDictionary::TStringId FORTE_FB_RANDOM::scmEventOutputNames[] = {g_nStringIdINITO, g_nStringIdCNF};
const CStringDictionary::TStringId FORTE_FB_RANDOM::scmEventOutputTypeIds[] = {g_nStringIdEvent, g_nStringIdEvent};
const CStringDictionary::TStringId FORTE_FB_RANDOM::scmEventOutputTypeIds[] = {g_nStringIdEInit, g_nStringIdEvent};
const SFBInterfaceSpec FORTE_FB_RANDOM::scmFBInterfaceSpec = {
2, scmEventInputNames, scmEventInputTypeIds, scmEIWith, scmEIWithIndexes,
2, scmEventOutputNames, scmEventOutputTypeIds, scmEOWith, scmEOWithIndexes,
Expand All @@ -52,6 +59,7 @@ const SFBInterfaceSpec FORTE_FB_RANDOM::scmFBInterfaceSpec = {
FORTE_FB_RANDOM::FORTE_FB_RANDOM(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) :
CBasicFB(paContainer, scmFBInterfaceSpec, paInstanceNameId, nullptr),
var_SEED(0_UINT),
var_VAL(0_REAL),
var_conn_VAL(var_VAL),
conn_INITO(this, 0),
conn_CNF(this, 1),
Expand Down Expand Up @@ -178,9 +186,6 @@ void FORTE_FB_RANDOM::alg_INIT(void) {
}
}


void FORTE_FB_RANDOM::alg_REQ(void) {
var_VAL = CIEC_REAL(mDistribution(mRandomGenerator));
}


157 changes: 82 additions & 75 deletions src/modules/utils/FB_RANDOM_fbt.h
Original file line number Diff line number Diff line change
@@ -1,69 +1,77 @@
/*******************************************************************************
* Copyright (c) 2012 Profactor GmbH
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer - initial API and implementation and/or initial documentation
*******************************************************************************/
/*************************************************************************
*** Copyright (c) 2012, 2015 Profactor GmbH, fortiss GmbH
***
*** This program and the accompanying materials are made
*** available under the terms of the Eclipse Public License 2.0
*** which is available at https://www.eclipse.org/legal/epl-2.0/
***
*** SPDX-License-Identifier: EPL-2.0
***
*** FORTE Library Element
***
*** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG!
***
*** Name: FB_RANDOM
*** Description: Generate a REAL Randomly
*** Version:
*** 1.0: 2012-05-31/Gerhard Ebenhofer - Profactor GmbH - initial API and implementation and/or initial documentation
*** 1.1: 2015-01-01/Alois Zoitl - fortiss GmbH -
*************************************************************************/

#pragma once

#include "basicfb.h"
#include "forte_uint.h"
#include "forte_real.h"
#include "forte_uint.h"
#include "iec61131_functions.h"
#include "forte_array_common.h"
#include "forte_array.h"
#include "forte_array_fixed.h"
#include "forte_array_variable.h"
#include <random>
#include "random"


class FORTE_FB_RANDOM final : public CBasicFB {
DECLARE_FIRMWARE_FB(FORTE_FB_RANDOM)

private:
static const CStringDictionary::TStringId scmDataInputNames[];
static const CStringDictionary::TStringId scmDataInputTypeIds[];
static const CStringDictionary::TStringId scmDataOutputNames[];
static const CStringDictionary::TStringId scmDataOutputTypeIds[];
static const TEventID scmEventINITID = 0;
static const TEventID scmEventREQID = 1;
static const TDataIOID scmEIWith[];
static const TForteInt16 scmEIWithIndexes[];
static const CStringDictionary::TStringId scmEventInputNames[];
static const CStringDictionary::TStringId scmEventInputTypeIds[];
static const TEventID scmEventINITOID = 0;
static const TEventID scmEventCNFID = 1;
static const TDataIOID scmEOWith[];
static const TForteInt16 scmEOWithIndexes[];
static const CStringDictionary::TStringId scmEventOutputNames[];
static const CStringDictionary::TStringId scmEventOutputTypeIds[];

static const SFBInterfaceSpec scmFBInterfaceSpec;

CIEC_ANY *getVarInternal(size_t) override;

void alg_INIT(void);
void alg_REQ(void);

static const TForteInt16 scmStateSTART = 0;
static const TForteInt16 scmStateREQ = 1;
static const TForteInt16 scmStateState = 2;

void enterStateSTART(CEventChainExecutionThread *const paECET);
void enterStateREQ(CEventChainExecutionThread *const paECET);
void enterStateState(CEventChainExecutionThread *const paECET);

void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override;

void readInputData(TEventID paEIID) override;
void writeOutputData(TEventID paEIID) override;
void setInitialValues() override;
private:
static const CStringDictionary::TStringId scmDataInputNames[];
static const CStringDictionary::TStringId scmDataInputTypeIds[];
static const CStringDictionary::TStringId scmDataOutputNames[];
static const CStringDictionary::TStringId scmDataOutputTypeIds[];
static const TEventID scmEventINITID = 0;
static const TEventID scmEventREQID = 1;
static const TDataIOID scmEIWith[];
static const TForteInt16 scmEIWithIndexes[];
static const CStringDictionary::TStringId scmEventInputNames[];
static const CStringDictionary::TStringId scmEventInputTypeIds[];
static const TEventID scmEventINITOID = 0;
static const TEventID scmEventCNFID = 1;
static const TDataIOID scmEOWith[];
static const TForteInt16 scmEOWithIndexes[];
static const CStringDictionary::TStringId scmEventOutputNames[];
static const CStringDictionary::TStringId scmEventOutputTypeIds[];

static const SFBInterfaceSpec scmFBInterfaceSpec;

CIEC_ANY *getVarInternal(size_t) override;

void alg_INIT(void);
void alg_REQ(void);

static const TForteInt16 scmStateSTART = 0;
static const TForteInt16 scmStateREQ = 1;
static const TForteInt16 scmStateState = 2;

void enterStateSTART(CEventChainExecutionThread *const paECET);
void enterStateREQ(CEventChainExecutionThread *const paECET);
void enterStateState(CEventChainExecutionThread *const paECET);

void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override;

void readInputData(TEventID paEIID) override;
void writeOutputData(TEventID paEIID) override;
void setInitialValues() override;

std::random_device mRandomDevice; // Will be used to obtain a seed for the random number engine
std::mt19937 mRandomGenerator; // Standard mersenne_twister_engine
Expand All @@ -72,40 +80,39 @@ class FORTE_FB_RANDOM final : public CBasicFB {
public:
FORTE_FB_RANDOM(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer);

CIEC_UINT var_SEED;
CIEC_UINT var_SEED;

CIEC_REAL var_VAL;
CIEC_REAL var_VAL;

CIEC_REAL var_conn_VAL;
CIEC_REAL var_conn_VAL;

CEventConnection conn_INITO;
CEventConnection conn_CNF;
CEventConnection conn_INITO;
CEventConnection conn_CNF;

CDataConnection *conn_SEED;
CDataConnection *conn_SEED;

CDataConnection conn_VAL;
CDataConnection conn_VAL;

CIEC_ANY *getDI(size_t) override;
CIEC_ANY *getDO(size_t) override;
CEventConnection *getEOConUnchecked(TPortId) override;
CDataConnection **getDIConUnchecked(TPortId) override;
CDataConnection *getDOConUnchecked(TPortId) override;
CIEC_ANY *getDI(size_t) override;
CIEC_ANY *getDO(size_t) override;
CEventConnection *getEOConUnchecked(TPortId) override;
CDataConnection **getDIConUnchecked(TPortId) override;
CDataConnection *getDOConUnchecked(TPortId) override;

void evt_INIT(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
var_SEED = paSEED;
void evt_INIT(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
var_SEED = paSEED;
receiveInputEvent(scmEventINITID, nullptr);
paVAL = var_VAL;
}
paVAL = var_VAL;
}

void evt_REQ(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
var_SEED = paSEED;
void evt_REQ(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
var_SEED = paSEED;
receiveInputEvent(scmEventREQID, nullptr);
paVAL = var_VAL;
}
paVAL = var_VAL;
}

void operator()(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
evt_INIT(paSEED, paVAL);
}
void operator()(const CIEC_UINT &paSEED, CIEC_REAL &paVAL) {
evt_INIT(paSEED, paVAL);
}
};


0 comments on commit 77b775a

Please sign in to comment.