void Iso11783IL_TIMOnFunctionValueRequested (
dword fctID,
dword requestedRawValue,
dword& calculatedRawValue,
dword& calculcatedExitReasonCode,
dword& calculcatedAutomationStatus)
{
switch (fctID)
{
case cRearPTO:
if ((calculatedRawValue >= 0x0001) && (calculatedRawValue <= 0x7D7F)) // speed counter-clockwise
{
if (calculatedRawValue < 0x1FC0)
{
calculatedRawValue = 0x1FC0; // -3000 1/min
calculcatedExitReasonCode = cReasonRemoteCommandOutOfRange;
calculcatedAutomationStatus = cActiveLimitedLow;
}
}
else if ((calculatedRawValue >= 0x7D81) && (calculatedRawValue <= 0xFAFF)) // speed clockwise
{
if (calculatedRawValue > 0xDB40) // 3000 1/min
{
calculatedRawValue = 0xDB40;
calculcatedExitReasonCode = cReasonRemoteCommandOutOfRange;
calculcatedAutomationStatus = cActiveLimitedHigh;
}
}
break;
case cVehicleSpeed:
if ((calculatedRawValue >= 0x0001) && (calculatedRawValue <= 0x7D7F)) // reverse speed
{
if (calculatedRawValue < 0x1BD8)
{
calculatedRawValue = 0x1BD8;
calculcatedExitReasonCode = cReasonRemoteCommandOutOfRange;
calculcatedAutomationStatus = cActiveLimitedLow;
}
}
else if ((calculatedRawValue >= 0x7D81) && (calculatedRawValue <= 0xFAFF)) // forward speed
{
if (calculatedRawValue > 0xDF25)
{
calculatedRawValue = 0xDF25; // 25 m/s
calculcatedExitReasonCode = cReasonRemoteCommandOutOfRange;
calculcatedAutomationStatus = cActiveLimitedHigh;
}
}
break;
default:
break;
}
}