#define IDVAR_IS_TYPE_AND_OFFSET
typedef struct StrConvIdVarName
{
char * StringBaseVarName;
int iTypeVar;
int iIdVar;
int iSize1;
int iSize2;
int iSize3;
int iFirstVal1;
int iFirstVal2;
int iFirstVal3;
char cReadWriteAccess;
}StrConvIdVarName;
StrConvIdVarName TableConvIdVarName[] = {
{ "B%d", VAR_MEM_BIT, 0, NBR_BITS_DEF, -1, -1, 0, 0, 0, TRUE },
#ifdef OLD_TIMERS_MONOS_SUPPORT
{ "T%d.D", VAR_TIMER_DONE, 0, NBR_TIMERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "T%d.R", VAR_TIMER_RUNNING, 0, NBR_TIMERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "T%d.P", VAR_TIMER_PRESET, 0, NBR_TIMERS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "T%d.V", VAR_TIMER_VALUE, 0, NBR_TIMERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "M%d.R", VAR_MONOSTABLE_RUNNING, 0, NBR_MONOSTABLES_DEF, -1, -1, 0, 0, 0, FALSE },
{ "M%d.P", VAR_MONOSTABLE_PRESET, 0, NBR_MONOSTABLES_DEF, -1, -1, 0, 0, 0, TRUE },
{ "M%d.V", VAR_MONOSTABLE_VALUE, 0, NBR_MONOSTABLES_DEF, -1, -1, 0, 0, 0, FALSE },
#endif
{ "C%d.D", VAR_COUNTER_DONE, 0, NBR_COUNTERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "C%d.E", VAR_COUNTER_EMPTY, 0, NBR_COUNTERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "C%d.F", VAR_COUNTER_FULL, 0, NBR_COUNTERS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "C%d.P", VAR_COUNTER_PRESET, 0, NBR_COUNTERS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "C%d.V", VAR_COUNTER_VALUE, 0, NBR_COUNTERS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "TM%d.Q", VAR_TIMER_IEC_DONE, 0, NBR_TIMERS_IEC_DEF, -1, -1, 0, 0, 0, FALSE },
{ "TM%d.P", VAR_TIMER_IEC_PRESET, 0, NBR_TIMERS_IEC_DEF, -1, -1, 0, 0, 0, TRUE },
{ "TM%d.V", VAR_TIMER_IEC_VALUE, 0, NBR_TIMERS_IEC_DEF, -1, -1, 0, 0, 0, FALSE },
{ "I%d", VAR_PHYS_INPUT, 0, NBR_PHYS_INPUTS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "Q%d", VAR_PHYS_OUTPUT, 0, NBR_PHYS_OUTPUTS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "W%d", VAR_MEM_WORD, 0, NBR_WORDS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "IW%d", VAR_PHYS_WORD_INPUT, 0, NBR_PHYS_WORDS_INPUTS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "QW%d", VAR_PHYS_WORD_OUTPUT, 0, NBR_PHYS_WORDS_OUTPUTS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "IF%d", VAR_PHYS_FLOAT_INPUT, 0, NBR_PHYS_FLOAT_INPUTS_DEF, -1, -1, 0, 0, 0, FALSE },
{ "QF%d", VAR_PHYS_FLOAT_OUTPUT, 0, NBR_PHYS_FLOAT_OUTPUTS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "E%d", VAR_ERROR_BIT, 0, NBR_ERROR_BITS_DEF, -1, -1, 0, 0, 0, TRUE },
{ "X%d.V", VAR_STEP_TIME, 0, NBR_STEPS, -1, -1, 0, 0, 0, FALSE },
{ "X%d", VAR_STEP_ACTIVITY, 0, NBR_STEPS, -1, -1, 0, 0, 0, FALSE },
{ NULL, 0, 0, 0, 0, 0, 0, 0, 0, FALSE } };
void UpdateSizesOfConvVarNameTable( void )
{
int ScanTable = 0;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_BITS;
#ifdef OLD_TIMERS_MONOS_SUPPORT
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_MONOSTABLES;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_MONOSTABLES;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_MONOSTABLES;
#endif
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_COUNTERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_COUNTERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_COUNTERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_COUNTERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_COUNTERS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS_IEC;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS_IEC;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_TIMERS_IEC;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_INPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_OUTPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_WORDS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_WORDS_INPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_WORDS_OUTPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_FLOAT_INPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_PHYS_FLOAT_OUTPUTS;
TableConvIdVarName[ ScanTable++ ].iSize1 = NBR_ERROR_BITS;
ScanTable++; ScanTable++;
}