уставки*10
This commit is contained in:
302
Source/Internal/measure.c
Normal file
302
Source/Internal/measure.c
Normal file
@@ -0,0 +1,302 @@
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
#include "filter_bat2.h"
|
||||
#include "package.h"
|
||||
|
||||
#include "measure.h"
|
||||
#include "package.h"
|
||||
|
||||
#include "peripher.h"
|
||||
#include "ADC.h"
|
||||
|
||||
#include "RS485.h"
|
||||
#include "message.h"
|
||||
#include "log_to_mem.h"
|
||||
|
||||
#include <math.h> // Ýòî ÷òîáû ìåðèòü àìïëèòóäó! sqrt áåç ýòîãî áóäåò êðèâ!!!
|
||||
|
||||
unsigned int CanPowse,CanGO;
|
||||
|
||||
unsigned int Maska[2][8];
|
||||
|
||||
int MAX_TPL_CANAL=0; // Êîëè÷åñòâî òåìïåðàòóðíûõ êàíàëîâ
|
||||
int period_blink;
|
||||
|
||||
FLAG chk,sig;
|
||||
long time_1_5sec, time_5msec, time_5sec;
|
||||
|
||||
int sens_type[24];
|
||||
int sens_pair[24];
|
||||
|
||||
int adc0[24];
|
||||
int tmp0[24];
|
||||
float tmpK[24];
|
||||
|
||||
FILTERBAT def_FILTERBAT = DEF_FILTERBAT;
|
||||
FILTERBAT filter[40];
|
||||
|
||||
interrupt void cpu_timer1_isr_SENS(void);
|
||||
|
||||
/********************************************************************/
|
||||
/* Ðàñ÷åò ìîäóëà òîêà èç ïîêàçàíèé äâóõ ôàç */
|
||||
/********************************************************************/
|
||||
float im_calc(float ia,float ib)
|
||||
{
|
||||
float isa,isb;
|
||||
|
||||
isa = - 1.5 * (ia + ib);
|
||||
isb = COSPi6 * (ia - ib);
|
||||
return (2*sqrt(isa*isa+isb*isb)/3);
|
||||
}
|
||||
|
||||
|
||||
interrupt void cpu_timer1_isr_SENS(void)
|
||||
{
|
||||
static unsigned int
|
||||
count_blink=0, count_bright=0, count_mode,
|
||||
blink_over, blink_alarm, work_lamp, heat_lamp, errr_lamp;
|
||||
static int preTest;
|
||||
|
||||
EALLOW;
|
||||
CpuTimer1.InterruptCount++;
|
||||
IER |= M_INT13; // Set "global" priority
|
||||
IER &= MINT13; // Set "global" priority
|
||||
EINT;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
if(!cReset) ServiceDog();
|
||||
|
||||
if(Read_Log) return;
|
||||
|
||||
if(++CanPowse >= CANPOWSE)
|
||||
{
|
||||
CanPowse = 0;
|
||||
CanGO = 1;
|
||||
}
|
||||
|
||||
if((!sig.bit.Error)|(cTestLamp)) toggle_READY();
|
||||
else set_READY();
|
||||
|
||||
if(++count_bright >= maximum_bright)
|
||||
{
|
||||
count_bright = 0 ;
|
||||
|
||||
if(work_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO60=1;
|
||||
else GpioDataRegs.GPBSET.bit.GPIO60=1;
|
||||
if(heat_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO58=1;
|
||||
else GpioDataRegs.GPBSET.bit.GPIO58=1;
|
||||
if(errr_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO62=1;
|
||||
else GpioDataRegs.GPBSET.bit.GPIO62=1;
|
||||
}
|
||||
|
||||
if(count_bright == Brightness)
|
||||
if(!cTestLamp)
|
||||
{
|
||||
GpioDataRegs.GPBSET.bit.GPIO60=1;
|
||||
GpioDataRegs.GPBSET.bit.GPIO58=1;
|
||||
GpioDataRegs.GPBSET.bit.GPIO62=1;
|
||||
}
|
||||
|
||||
if(cTestLamp & !preTest)
|
||||
{
|
||||
count_blink = period_blink;
|
||||
count_mode = 0;
|
||||
}
|
||||
preTest = cTestLamp;
|
||||
|
||||
if(++count_blink >= period_blink)
|
||||
{
|
||||
count_blink=0;
|
||||
count_mode++;
|
||||
blink_over = (count_mode & 1)?1:0;
|
||||
blink_alarm = (count_mode & 7)?1:0;
|
||||
|
||||
GpioDataRegs.GPBTOGGLE.bit.GPIO63=1;
|
||||
|
||||
/* ýòî ÷òîá äîñêó òåñòèòü
|
||||
if(cTestLamp)
|
||||
{GpioDataRegs.GPBTOGGLE.bit.GPIO49=1;
|
||||
toggle_READY();
|
||||
GpioDataRegs.GPBTOGGLE.bit.GPIO52=1;}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
if(cExtLamp)
|
||||
{
|
||||
work_lamp = cExtLite;
|
||||
heat_lamp = cExtLite;
|
||||
errr_lamp = cExtLite;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(cTestLamp)
|
||||
{
|
||||
work_lamp = blink_over;
|
||||
heat_lamp = blink_over;
|
||||
errr_lamp = blink_over;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(sig.bit.Error) work_lamp = 0;//blink_over;
|
||||
// else if(sig.bit.Alarm) work_lamp = blink_alarm;
|
||||
else work_lamp = 1;
|
||||
|
||||
if(sig.bit.OverHeat) heat_lamp = 1;
|
||||
else if(sig.bit.SubHeat) heat_lamp = blink_over;
|
||||
else if(sig.bit.OutHeat) heat_lamp = !blink_alarm;
|
||||
else heat_lamp = 0;
|
||||
} } }
|
||||
|
||||
|
||||
void Init_sensors()
|
||||
{
|
||||
int i;
|
||||
|
||||
period_blink = READY_FREQ;
|
||||
|
||||
time_1_5sec = (3 * ADC_FREQ) / 2;
|
||||
time_5msec = (5 * ADC_FREQ) / 1000;
|
||||
time_5sec = (5 * ADC_FREQ);
|
||||
|
||||
for(i=0;i<24;i++)
|
||||
{
|
||||
sens_type[i]=0;
|
||||
sens_pair[i]=i;
|
||||
}
|
||||
|
||||
for(i=0;i<12;i++)
|
||||
sens_type[i]=TERMO_AD;
|
||||
|
||||
for(i=0;i<40;i++) filter[i] = def_FILTERBAT;
|
||||
|
||||
for(i=0;i<24;i++) modbus[i] &= NOER;
|
||||
|
||||
MAX_TPL_CANAL = 12;
|
||||
}
|
||||
|
||||
void Init_packMask()
|
||||
{
|
||||
int i,j;
|
||||
|
||||
for(i=0;i<2;i++)
|
||||
for(j=0;j<8;j++) { Maska[i][j]=0; }
|
||||
|
||||
for(i=0;i<24;i++)
|
||||
if(sens_type[i])
|
||||
{
|
||||
Maska[m_FAST][ i /16]|=(1<<( i %16));
|
||||
Maska[m_FAST][(i+24)/16]|=(1<<((i+24)%16));
|
||||
}
|
||||
|
||||
for(i=0;i<3; i++)
|
||||
Maska[m_SLOW][i+3] = Maska[m_FAST][i]; // Óñòàâêè
|
||||
|
||||
Maska[m_FAST][1]|=0x0080; // Äèñêðåòíûå âõîäû
|
||||
|
||||
Maska[m_SLOW][6] = 0x0070; // ßðêîñòü ëàìï, ïåðèîä ïîñûëîê
|
||||
|
||||
Maska[m_SLOW][7]|= 0xE000; // Àäðåñ, êîìàíäû, è ÷òîá íå âûëàçèëî
|
||||
}
|
||||
|
||||
int er_anal(int term, long * count, int edge, int pre)
|
||||
{
|
||||
if (term)
|
||||
{
|
||||
if((*count)>=edge) return 1;
|
||||
(*count)++; return pre;
|
||||
}
|
||||
if( (*count) == 0 ) return 0;
|
||||
(*count)--; return pre;
|
||||
}
|
||||
|
||||
void reset_errs(int sens, ERROR er)
|
||||
{
|
||||
unsigned int set;
|
||||
ERROR err;
|
||||
|
||||
err=er;
|
||||
|
||||
if(!sens_error[sens].bit.Latch)
|
||||
{
|
||||
set = sens_error[sens].all & NOER;
|
||||
sens_error[sens].all = err.all | set;
|
||||
}
|
||||
else
|
||||
{
|
||||
sens_error[sens].all |= err.all;
|
||||
}
|
||||
sens_error[sens].bit.Ready = !(err.bit.Stop && (!sens_error[sens].bit.Ignor));
|
||||
chk.bit.Error|= !(sens_error[sens].bit.Ready);
|
||||
}
|
||||
|
||||
void Temper_count(int chan)
|
||||
{
|
||||
float Numb;
|
||||
int Temper;
|
||||
int no_ignor;
|
||||
ERROR error;
|
||||
|
||||
if(!chan)
|
||||
{
|
||||
sig.all = chk.all;
|
||||
chk.all = 0;
|
||||
}
|
||||
|
||||
if(chan<MAX_TPL_CANAL*2)
|
||||
if(sens_error[chan].bit.Bypas)
|
||||
{
|
||||
sens_error[chan].all = 0;
|
||||
sens_error[chan].bit.Bypas = 1;
|
||||
sens_data[chan] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
Numb = ADC_table[chan];
|
||||
|
||||
if(cTermoCal)
|
||||
{
|
||||
sens_data[chan] = Numb;
|
||||
return; // øòîáû ñòðóêòóðà îøèáîê íå âëåçàëà â äàííûå
|
||||
}
|
||||
|
||||
error.all = 0;
|
||||
no_ignor = !sens_error[chan].bit.Ignor;
|
||||
|
||||
Numb = (Numb-adc0[chan])*tmpK[chan]+tmp0[chan]-273;
|
||||
|
||||
if(Numb < -20) Numb = -20;
|
||||
if(Numb > 200) Numb = 200;
|
||||
|
||||
Temper = sens_data[chan] = calres[chan] = (int)(Numb*10);
|
||||
|
||||
// Îáðûâ èëè íåèñïðàâíîñòü
|
||||
if(Temper<=-200 || Temper>=2000)
|
||||
{
|
||||
error.bit.Tear = 1;
|
||||
chk.bit.OutHeat = no_ignor;
|
||||
}
|
||||
|
||||
if(!error.bit.Tear)
|
||||
{
|
||||
if(((Temper>sens_hi_edge[chan]-Cooling) && (sens_error[chan].bit.Hyper)) ||
|
||||
(Temper>sens_hi_edge[chan]) )
|
||||
{
|
||||
error.bit.Hyper = 1;
|
||||
error.bit.Stop = no_ignor;
|
||||
chk.bit.OverHeat= no_ignor;
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
// Ïðåäóïðåæäåíèå ïî òåìïåðàòóðå
|
||||
|
||||
if(Temper>sens_lo_edge[chan])
|
||||
{
|
||||
error.bit.Over = 1;
|
||||
chk.bit.SubHeat = no_ignor;
|
||||
} }
|
||||
|
||||
reset_errs(chan,error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user