diff --git a/src/modules/utils/FB_RANDOM_fbt.cpp b/src/modules/utils/FB_RANDOM_fbt.cpp index 163594b5f..d58479908 100644 --- a/src/modules/utils/FB_RANDOM_fbt.cpp +++ b/src/modules/utils/FB_RANDOM_fbt.cpp @@ -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 @@ -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" @@ -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, @@ -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), @@ -178,9 +186,6 @@ void FORTE_FB_RANDOM::alg_INIT(void) { } } - void FORTE_FB_RANDOM::alg_REQ(void) { var_VAL = CIEC_REAL(mDistribution(mRandomGenerator)); } - - diff --git a/src/modules/utils/FB_RANDOM_fbt.h b/src/modules/utils/FB_RANDOM_fbt.h index 609f74821..271c1bd10 100644 --- a/src/modules/utils/FB_RANDOM_fbt.h +++ b/src/modules/utils/FB_RANDOM_fbt.h @@ -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 +#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 @@ -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); + } }; -