blob: d76899b6a17230f881ec27dd38de61a8e39ca062 [file] [log] [blame]
/*******************************************************************************
* 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 "modbustimedevent.h"
#include "../../core/iec61131_functions.h"
CModbusTimedEvent::CModbusTimedEvent(TForteUInt32 pa_nUpdateInterval)
: m_bIsStarted(false){
m_nUpdateInterval = pa_nUpdateInterval;
if(pa_nUpdateInterval == 0){
m_bSingleShotEvent = true;
activate();
}
else
m_bSingleShotEvent = false;
}
void CModbusTimedEvent::setUpdateInterval(TForteUInt32 pa_nUpdateInterval){
m_nUpdateInterval = pa_nUpdateInterval;
}
void CModbusTimedEvent::activate(){
m_nStartTime = NOW_MONOTONIC().getInMilliSeconds();
m_bIsStarted = true;
}
void CModbusTimedEvent::deactivate(){
m_bIsStarted = false;
}
bool CModbusTimedEvent::readyToExecute() const{
uint_fast64_t currentTime = NOW_MONOTONIC().getInMilliSeconds();
if (m_nUpdateInterval > currentTime) {
return false;
}
currentTime -= m_nUpdateInterval;
if(isStarted() && (currentTime > m_nStartTime || currentTime == m_nStartTime)){
return true;
}
return false;
}
void CModbusTimedEvent::restartTimer(){
activate();
}