?? pulse_src.c
字號:
/***************************************************************************
* This code and information is provided "as is" without warranty of any *
* kind, either expressed or implied, including but not limited to the *
* implied warranties of merchantability and/or fitness for a particular *
* purpose. *
* *
* Copyright (C) 2005 Teridian SemiConductor, Corporation.
* All Rights Reserved.
* *
***************************************************************************/
//**************************************************************************
// DESCRIPTION: 71M65xx POWER METER - Pulse Source support.
//
// AUTHOR: MTF
//
// HISTORY: See end of file
//**************************************************************************
// File: PULSE_SRC.C
//
#include "options.h"
#if PULSE_SOURCE
#include "meter.h"
#include "mmath.h" // labs()
#include "pulse_src.h"
#include "psoft.h"
#define ZERO 0L
// Functions that will fetch or calculate the pulse sources for the LEDs.
static const int32_t (* code PulseSrcfunc[]) (void) =
{
WSum_src, W0_src, W1_src, W2_src,
VARSum_src, VAR0_src, VAR1_src, VAR2_src,
VASum_src, VA0_src, VA1_src, VA2_src,
Insq_src, I0sq_src, I1sq_src, I2sq_src,
V0sq_src, V1sq_src, V2sq_src,
WSum_Isrc, W0_Isrc, W1_Isrc, W2_Isrc,
VARSum_Isrc, VAR0_Isrc, VAR1_Isrc, VAR2_Isrc,
VASum_Isrc, VA0_Isrc, VA1_Isrc, VA2_Isrc,
WSum_Esrc, W0_Esrc, W1_Esrc, W2_Esrc,
VARSum_Esrc, VAR0_Esrc, VAR1_Esrc, VAR2_Esrc,
VASum_Esrc, VA0_Esrc, VA1_Esrc, VA2_Esrc
};
#define INTERNAL (sizeof (PulseSrcfunc) / 2)
/*** Private functions declared within this module ***/
// generic pulse source; depends on type of meter...
static int32_t PulseSrcG (int32i_t isqsum, int32_t sum) small reentrant;
#if EXPORT
static int32_t PulseSrcE (int32i_t isqsum, int32_t sum) small reentrant;
#endif
#if IMPORT
static int32_t PulseSrcI (int32i_t isqsum, int32_t sum) small reentrant;
#endif
//===========================================================================//
void SelectPulses (void)
{
if (PulseWSource < INTERNAL) // Fetch the correct pulse data.
memset_ce (&apulsew, (*PulseSrcfunc[ PulseWSource ]) ());
if (PulseRSource < INTERNAL)
memset_ce (&apulser, (*PulseSrcfunc[ PulseRSource ]) ());
#if PULSE_SOFT // Fetch the correct pulse data.
psoft_update((*PulseSrcfunc[ Pulse3Source ]) (),
(*PulseSrcfunc[ Pulse4Source ]) ());
#endif
}
//===========================================================================//
// These are the routines that fetch values for pulsing an LED.
int32_t WSum_src (void) // Net power pulse sources.
{
#if WATT_ELEMENT
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcG (i0sqsum, w0sum) : PulseSrcG (i1sqsum, w1sum));
#else
return (
PulseSrcG (i0sqsum, w0sum)
#if PHASE_B_PRESENT
+ PulseSrcG (i1sqsum, w1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcG (i2sqsum, w2sum)
#endif
);
#endif
#else
return (ZERO);
#endif
}
int32_t W0_src (void)
{
#if WATT_ELEMENT
return (PulseSrcG (i0sqsum, w0sum));
#else
return (ZERO);
#endif
}
int32_t W1_src (void)
{
#if WATT_ELEMENT && PHASE_B_PRESENT
return (PulseSrcG (i1sqsum, w1sum));
#else
return (ZERO);
#endif
}
int32_t W2_src (void)
{
#if WATT_ELEMENT && PHASE_C_PRESENT
return (PulseSrcG (i2sqsum, w2sum));
#else
return (ZERO);
#endif
}
//---------------------------------------------------------------------------//
int32_t VARSum_src(void)
{
#if VAR_ELEMENT
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcG (i0sqsum, var0sum) : PulseSrcG (i1sqsum, var1sum));
#else
return (
PulseSrcG (i0sqsum, var0sum)
#if PHASE_B_PRESENT
+ PulseSrcG (i1sqsum, var1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcG (i2sqsum, var2sum)
#endif
);
#endif
#else
return (ZERO);
#endif
}
int32_t VAR0_src (void)
{
#if VAR_ELEMENT
return ( PulseSrcG (i0sqsum, var0sum));
#else
return (ZERO);
#endif
}
int32_t VAR1_src (void)
{
#if VAR_ELEMENT && PHASE_B_PRESENT
return ( PulseSrcG (i1sqsum, var1sum));
#else
return (ZERO);
#endif
}
int32_t VAR2_src (void)
{
#if VAR_ELEMENT && PHASE_C_PRESENT
return ( PulseSrcG (i2sqsum, var2sum));
#else
return (ZERO);
#endif
}
//---------------------------------------------------------------------------//
int32_t VASum_src (void)
{
#if VA_ELEMENT
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcG (i0sqsum, va0sum) : PulseSrcG (i1sqsum, va1sum));
#else
return (
PulseSrcG (i0sqsum, va0sum)
#if PHASE_B_PRESENT
+ PulseSrcG (i1sqsum, va1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcG (i2sqsum, va2sum)
#endif
);
#endif
#else
return (ZERO);
#endif
}
int32_t VA0_src (void)
{
#if VA_ELEMENT
return ( PulseSrcG (i0sqsum, va0sum));
#else
return (ZERO);
#endif
}
int32_t VA1_src (void)
{
#if VA_ELEMENT && PHASE_B_PRESENT
return ( PulseSrcG (i1sqsum, va1sum));
#else
return (ZERO);
#endif
}
int32_t VA2_src (void)
{
#if VA_ELEMENT && PHASE_C_PRESENT
return ( PulseSrcG (i2sqsum, va2sum));
#else
return (ZERO);
#endif
}
//===========================================================================//
// Net power pulse sources.
int32_t WSum_Isrc (void)
{
#if IMPORT && WATT_SUMS
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcI (i0sqsum, w0sum) : PulseSrcI (i1sqsum, w1sum));
#else
return (
PulseSrcI (i0sqsum, w0sum)
#if PHASE_B_PRESENT
+ PulseSrcI (i1sqsum, w1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcI (i2sqsum, w2sum)
#endif
);
#endif
#else
return (ZERO);
#endif // WATT_SUMS & IMPORT.
}
int32_t W0_Isrc (void)
{
#if IMPORT && WATT_ELEMENT
return (PulseSrcI (i0sqsum, w0sum));
#else
return (ZERO);
#endif
}
int32_t W1_Isrc (void)
{
#if IMPORT && WATT_ELEMENT && PHASE_B_PRESENT
return (PulseSrcI (i1sqsum, w1sum));
#else
return (ZERO);
#endif
}
int32_t W2_Isrc (void)
{
#if IMPORT && WATT_ELEMENT && PHASE_C_PRESENT
return (PulseSrcI (i2sqsum, w2sum));
#else
return (ZERO);
#endif
}
//---------------------------------------------------------------------------//
int32_t VARSum_Isrc(void)
{
#if IMPORT && VAR_SUMS
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcI (i0sqsum, var0sum) : PulseSrcI (i1sqsum, var1sum));
#else
return (
PulseSrcI (i0sqsum, var0sum)
#if PHASE_B_PRESENT
+ PulseSrcI (i1sqsum, var1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcI (i2sqsum, var2sum)
#endif
);
#endif
#else
return (ZERO);
#endif
}
int32_t VAR0_Isrc (void)
{
#if IMPORT && VAR_ELEMENT
return (PulseSrcI (i0sqsum, var0sum));
#else
return (ZERO);
#endif
}
int32_t VAR1_Isrc (void)
{
#if IMPORT && VAR_ELEMENT && PHASE_B_PRESENT
return (PulseSrcI (i1sqsum, var1sum));
#else
return (ZERO);
#endif
}
int32_t VAR2_Isrc (void)
{
#if IMPORT && VAR_ELEMENT && PHASE_C_PRESENT
return (PulseSrcI (i2sqsum, var2sum));
#else
return (ZERO);
#endif
}
//---------------------------------------------------------------------------//
int32_t VASum_Isrc (void)
{
#if IMPORT && VA_SUMS
#if EQUATION == _1ELEMENT_2WIRE
return ((i0sqsum > i1sqsum)
? PulseSrcI (i0sqsum, va0sum) : PulseSrcI (i1sqsum, va1sum));
#else
return (
PulseSrcI (i0sqsum, va0sum)
#if PHASE_B_PRESENT
+ PulseSrcI (i1sqsum, va1sum)
#endif
#if PHASE_C_PRESENT
+ PulseSrcI (i2sqsum, va2sum)
#endif
);
#endif
#else
return (ZERO);
#endif
}
int32_t VA0_Isrc (void)
{
#if IMPORT && VA_ELEMENT
return (PulseSrcI (i0sqsum, va0sum));
#else
return (ZERO);
#endif
}
int32_t VA1_Isrc (void)
{
#if IMPORT && VA_ELEMENT && PHASE_B_PRESENT
return (PulseSrcI (i1sqsum, va1sum));
#else
return (ZERO);
#endif
}
int32_t VA2_Isrc (void)
{
#if IMPORT && VA_ELEMENT && PHASE_C_PRESENT
return (PulseSrcI (i2sqsum, va2sum));
#else
return (ZERO);
#endif
}
//===========================================================================//
// Export power pulse sources.
int32_t WSum_Esrc (void)
{
#if EXPORT && WATT_SUMS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -