blob: 5ede19c997bd5d38ad2194affb6e943b70f0265e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 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:
* Jose Cabral - initial API and implementation and/or initial documentation
*******************************************************************************/
#include "plc01a1_config_fb.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "plc01a1_config_fb_gen.cpp"
#endif
#include "plc01a1_controller.h"
DEFINE_FIRMWARE_FB(PLC01A1ConfigFB, g_nStringIdPLC01A1)
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anDataInputNames[] = { g_nStringIdQI, g_nStringIdIN1, g_nStringIdIN2, g_nStringIdIN3, g_nStringIdIN4,
g_nStringIdIN5, g_nStringIdIN6, g_nStringIdIN7, g_nStringIdIN8, g_nStringIdOUT1, g_nStringIdOUT2, g_nStringIdOUT3, g_nStringIdOUT4, g_nStringIdOUT5,
g_nStringIdOUT6, g_nStringIdOUT7, g_nStringIdOUT8, g_nStringIdUpdateInterval };
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anDataInputTypeIds[] = { g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING,
g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING,
g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdUINT };
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anDataOutputNames[] = { g_nStringIdQO, g_nStringIdSTATUS };
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anDataOutputTypeIds[] = { g_nStringIdBOOL, g_nStringIdWSTRING };
const TForteInt16 PLC01A1ConfigFB::scm_anEIWithIndexes[] = { 0 };
const TDataIOID PLC01A1ConfigFB::scm_anEIWith[] = { 0, 17, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 255 };
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anEventInputNames[] = { g_nStringIdINIT };
const TDataIOID PLC01A1ConfigFB::scm_anEOWith[] = { 0, 1, 255, 0, 1, 255 };
const TForteInt16 PLC01A1ConfigFB::scm_anEOWithIndexes[] = { 0, 3, -1 };
const CStringDictionary::TStringId PLC01A1ConfigFB::scm_anEventOutputNames[] = { g_nStringIdINITO, g_nStringIdIND };
const SFBInterfaceSpec PLC01A1ConfigFB::scm_stFBInterfaceSpec = {
1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 18, scm_anDataInputNames, scm_anDataInputTypeIds,
2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
0, 0
};
void PLC01A1ConfigFB::setInitialValues() {
UpdateInterval() = 25;
}
forte::core::io::IODeviceController* PLC01A1ConfigFB::createDeviceController(CDeviceExecution &paDeviceExecution) {
return new PLC01A1Controller(paDeviceExecution);
}
void PLC01A1ConfigFB::setConfig() {
PLC01A1Controller::Config config;
config.mUpdateInterval = UpdateInterval();
getDeviceController()->setConfig(&config);
}
void PLC01A1ConfigFB::onStartup() {
// Initialize handles
size_t initialDIOffset = 1;
size_t numberOfInputs = 8;
size_t numberOfOutputs = 8;
for(size_t i = 0; i < numberOfInputs; i++) {
PLC01A1Controller::HandleDescriptor desc = PLC01A1Controller::HandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(initialDIOffset + i)),
forte::core::io::IOMapper::In,
0 /*offset is always 0 */,
static_cast<uint8_t>(i));
initHandle(&desc);
}
for(size_t i = 0; i < numberOfOutputs; i++) {
PLC01A1Controller::HandleDescriptor
desc = PLC01A1Controller::HandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(initialDIOffset + numberOfInputs + i)),
forte::core::io::IOMapper::Out, 0 /*offset is always 0 */, static_cast<uint8_t>(numberOfOutputs - i - 1));
initHandle(&desc);
}
started();
}