/******************************************************************************* | |
* Copyright (c) 2012 AIT | |
* 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: | |
* Filip Andren - initial API and implementation and/or initial documentation | |
*******************************************************************************/ | |
#include "opcprocessvar.h" | |
#include "OPCGroup.h" | |
#include "OPCItem.h" | |
COpcProcessVar::COpcProcessVar(const char* pa_acItemGroupName, const char* pa_acItemName, EOpcProcessVarFunctions pa_eFunction) : | |
m_pOpcItem(0), m_acItemGroupName(pa_acItemGroupName), m_acItemName(pa_acItemName), m_bActive(false), m_eFunction(pa_eFunction){ | |
m_oCurrentValue.set<SHORT>(0); | |
} | |
void COpcProcessVar::sendItemData(){ | |
try{ | |
if(getIsActive()) { | |
m_pOpcItem->writeSync(updateValue()); | |
} | |
} catch (OPCException &e){ | |
setIsActive(false); | |
} | |
} | |
void COpcProcessVar::setNewValue(Variant pa_oNewValue){ | |
m_oSync.lock(); | |
m_lNewValueQueue.pushBack(pa_oNewValue); | |
m_oSync.unlock(); | |
} | |
Variant COpcProcessVar::peekNewValue(){ | |
Variant retVal; | |
m_oSync.lock(); | |
TVariantList::Iterator itBegin = m_lNewValueQueue.begin(); | |
if(itBegin != m_lNewValueQueue.end()){ | |
retVal = (*itBegin); | |
} else { | |
retVal = m_oCurrentValue; | |
} | |
m_oSync.unlock(); | |
return retVal; | |
} | |
Variant COpcProcessVar::updateValue(){ | |
Variant retVal; | |
m_oSync.lock(); | |
TVariantList::Iterator itBegin = m_lNewValueQueue.begin(); | |
TVariantList::Iterator itEnd = m_lNewValueQueue.end(); | |
if(itBegin != m_lNewValueQueue.end()){ | |
m_oCurrentValue = retVal = (*itBegin); | |
m_lNewValueQueue.popFront(); | |
} else { | |
retVal = m_oCurrentValue; | |
} | |
m_oSync.unlock(); | |
return retVal; | |
} |