Лампа "высокое" управляется по CAN

This commit is contained in:
Dimas 2025-08-04 17:29:00 +03:00
parent 111ec362b4
commit ca3ffe0d98
13 changed files with 1013 additions and 957 deletions

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
/Debug/
/UKSSTMS320F28335.CS_/
/Debug.lkf
/cc_build_Debug.log
/UKSSTMS320F28335.map
/UKSSTMS320F28335.paf2
/UKSSTMS320F28335.sbl

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@ PHYSICAL MEMORY PARAMETERS
BOOT LOADER PARAMETERS
Table Type: SERIAL PORT (SCI 8 bit Mode)
Entry Point: 0x0000b42a
Entry Point: 0x0000b4a9
OUTPUT TRANSLATION MAP
@ -21,9 +21,9 @@ OUTPUT TRANSLATION MAP
--------------------------------------------------------------------------------
OUTPUT FILES: D:\project2833\GIT\UKSS_23550_2\bin\UKSSTMS320F28335.bin [b0..b7]
CONTENTS: 00000000..000071df BOOT TABLE
.cinit : dest=0000b57f size=000001f2 width=00000002
.text : dest=00008000 size=0000357f width=00000002
CONTENTS: 00000000..000072df BOOT TABLE
.cinit : dest=0000b5fe size=000001f3 width=00000002
.text : dest=00008000 size=000035fe width=00000002
ramfuncs : dest=0000c13c size=0000002b width=00000002
.econst : dest=0000c000 size=00000111 width=00000002
.switch : dest=0000c168 size=00000028 width=00000002

Binary file not shown.

Binary file not shown.

View File

@ -112,7 +112,7 @@ AdcRegs.ADCREFSEL.bit.REF_SEL=1;
COUNT_DISCHARGE = ADC_FREQ/145; // 25;
COUNT_TRANSICIA = ADC_FREQ/25; // 150;
FILTER_CLIP = 200;
WAKE_TIME =3L * ADC_FREQ;
WAKE_TIME =5L * ADC_FREQ;
}
WAKE = WAKE_TIME;
@ -140,15 +140,20 @@ interrupt void adc_isr(void)
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
EINT;
if(WAKE) WAKE--;
if( WAKE)
{ WAKE--;
if(!WAKE) cCanReset = 1;
}
if(WAKE > WAKE_TIME - 10) goto fin;
if(Caliber_time)
{
if(!--Caliber_time)
{
cTermoCal = 0;
cSaveParam = 1;
cTermoCal = 0;
cSaveParam = 1;
cCanReset = 1;
} }
if(cownt_one_canal==COUNT_DISCHARGE)

View File

@ -6,10 +6,7 @@ interrupt void cpu_timer1_isr_SENS(void);
void Init_sensors(void);
void Init_packMask(void);
//void measure_all(void);
void Temper_count(int chan);
//void Current_count(int chan);
//void Power_count(int chan);
void calc_sensor_koef();
typedef union
@ -104,9 +101,8 @@ extern float tmpK[];
extern int sens_type[];
extern unsigned long LoneLeft,LoneRite;
extern unsigned long Caliber_time;
extern unsigned int CanPowse,CanGO;
extern unsigned int Caliber_time;
extern long WAKE;
#endif //_MEASURE

View File

@ -29,7 +29,6 @@ typedef struct
} CMD_TO_TMS;
extern int modbus[],archiv[],county[],espero[];
extern unsigned int Maska[][8];
void ReceiveCommandModbus3(RS_DATA *rs_arr);

View File

@ -69,7 +69,7 @@
#define sens_hi_edge (modbus+start_hi_edge)
#define sens_lo_edge (modbus+start_lo_edge)
#define keys 0x10
#define keys 0x10 // àäðåñ ïîâòîðàåìîé ïîñûëêè «keys»
#define Inputs Modbus[keys]
#define inputs modbus[keys]
@ -81,13 +81,14 @@
#define bTermoCal Buttons.bit.bit2
#define RSleng modbus[0x20] // äëèíà ïîñûëêè RS485
#define RScount modbus[0x21] // ďŕóçŕ ěĺćäó I ďîńűëęŕěč RS485
#define RSpack (modbus+0x22) // ńŕěîĺ ďîńűëęŕ RS485
#define RScount modbus[0x21] // ïàóçà ìåæäó ïîñûëêàìè RS485
#define RSpack (modbus+0x22) // íà÷àëî ïîñûëêè RS485
#define Cancount (modbus+0x60) // ďŕóçŕ ěĺćäó I ďîńűëęŕěč CAN
#define CanWait (modbus+0x62) // ěŕęńčěŕëüíŕŕ ďŕóçŕ
#define Cancount (modbus+0x60) // ïàóçà ìåæäó ïîñûëêàìè CAN
#define CanWait (modbus+0x62) // ïàóçà ïîñëå ïðîõîæäåíèà öèêëà
#define CanRestart (modbus+0x64) // ïåðåçàïóñê ïîñûëêè
#define CanRepeat modbus[0x66] // ńęîëüęî đŕç ďîâňîđŕňü íŕäî
#define CanRptVez modbus[0x66] // êîë-âî ïîâòîðåíèé ïîñûëêè «keys»
#define CanRptLen modbus[0x67] // äëèíà ïîâòîðàåìîé ïîñûëêè «keys»
#define Bright (modbus+0x68) // àðêîñòü ñèãíàëüíûõ ëàìïî÷åê
#define Brightness modbus[0x68] // àðêîñòü ñèãíàëüíîé ëàìïî÷êè
@ -107,8 +108,8 @@
#define K150_D TCaliber[1]
#define cancyclo 0x78 // åãî àäðåñ
#define CanCycle (modbus+0x78) // ń÷ĺň÷čę öčęëîâ CAN
#define CanRound (modbus+0x7A) // ń÷ĺň÷čę ĺůĺ áîëĺĺ ďîëíűő öčęëîâ CAN
#define CanCycle (modbus+0x78) // ñ÷åò÷èê ïðîõîæäåíèé öèêëîâ CAN
#define CanRound (modbus+0x7A) // ñ÷åò÷èê îòîñëàííûõ ìàññèâîâ
#define Protokol modbus[125]
#define LastMode modbus[126]
@ -123,6 +124,8 @@
#define cSecretBt Modbus[127].bit.bit6
#define cCanReset Modbus[127].bit.bit7
#define cRawMeat Modbus[127].bit.bit8
#define cLiteFire Modbus[127].bit.bit9
#define cHighVolt Modbus[127].bit.bitA
#define cReset Modbus[127].bit.bitF

View File

@ -37,27 +37,27 @@ void timer_Init()
IER |= M_INT13;
}
int Isit(int num, int i)
int Isit(int num, int i, int z)
{
int res, pls;
if((num<0)||(num>=0x80)) return 0;
res = Maska[0][num/0x10]; if(i)
res|= Maska[1][num/0x10];
res = Maska[i][num/0x10];
res &= (1<<(num&0x0F));
pls = (espero[num]>CanRestart[i]/3);
pls = pls || county[num];
res = res && pls;
if(z) // äàííûå ðåàëüíî èçìåíèëèñ
{
pls = (espero[num]>CanRestart[i]/2);
pls = pls || county[num];
res = res && pls;
}
return res;
}
void main()
{
int i,j,n,mask,qua;
int i,j,n,z,mask,qua;
static int rscount, cancount[2]={1,2},cancell[2]={0,0},candid[2]={0,0};
static unsigned int masca[8], presbyt;
@ -115,6 +115,8 @@ void main()
LastMode = Mode;
Protokol = PROTOKOL;
for(i=0;i<0x80;i++)
county[i]=1;
for(i=0;i<8;i++)
masca[i]=0;
for(i=0;i<2;i++)
@ -144,6 +146,7 @@ void main()
for(i=0;i<2;i++)
if(cancount[i]) cancount[i]--;
else cancell[i] = 0;
}
for(i=0;i<2;i++)
@ -152,14 +155,15 @@ void main()
{
while(1)
{
if( cancell[i]>= 0x80)
{ cancell[i]=0;
if( candid[i])
{ candid[i]=0;
CanCycle[i]++;
cancount[i] = CanWait[i];
continue;
cancount[i] += CanWait[i];
goto Next;
} }
mask = Maska[i][cancell[i]/0x10] >> (cancell[i]&0x0F);
@ -173,23 +177,33 @@ void main()
break;
} }
z=1;
if(espero[cancell[i]]>CanRestart[i])
county[cancell[i]]=1;
{
county[cancell[i]]=1;
z=0;
}
n=1;
if( (Desk==dsk_COMM)||(Desk==dsk_BKSD) )
if(cancell[i]>=start_data)
if(cancell[i]<=start_hi_edge)
if(sens_type[cancell[i]-start_data]>=TERMO_AD)
n=5;
if(abs(modbus[cancell[i]]-archiv[cancell[i]])>=n)
county[cancell[i]] = (cancell[i]==keys) ? CanRepeat:1;
{
if(cancell[i]==keys)
for(j=0;j<CanRptLen;j++)
county[cancell[i]+j] = CanRptVez;
else
county[cancell[i]] = 1;
}
if (county[cancell[i]])
{
for(j= 3; j>0 && !Isit(cancell[i]+j,i); j--);
for(n=j-3; n<0 && !Isit(cancell[i]+n,i); n++);
for(j= 3; j>0 && !Isit(cancell[i]+j,i,z); j--);
for(n=j-3; n<0 && !Isit(cancell[i]+n,i,1); n++);
qua = 1 + j - n;
cancell[i]+= n;
@ -197,8 +211,9 @@ void main()
for(j=0;j<qua;j++)
{
n=cancell[i]+j;
archiv[n]= modbus[n];
espero[n]=0;
archiv[n]= modbus[n]; espero[n]= 0;
if( county[n])
{ county[n]--;
if(!county[n] && n != cancyclo+i) candid[i]=1;
@ -219,12 +234,15 @@ void main()
CanRound[i]++;
}
if( Cancount[i]>1)
if(!cancount[!i])
cancount[!i]=1; // ÷òîáû íå ñðàçó
}
else cancell[i]++;
else cancell[i]++;
}
Next:
get_Buttons();
if(cDefParam)
@ -251,8 +269,11 @@ void main()
calc_sensor_koef();
}
if(WAKE) bTermoCal=0;
if(!bTermoCal & presbyt) cSaveParam=1;
if(!bTermoCal & presbyt)
{
cSaveParam = 1;
cCanReset = 1;
}
presbyt = bTermoCal;
if(cCanReset)

View File

@ -31,7 +31,7 @@ FILTERBAT adc_filter[ADC_MAX];
float out_filter[ADC_MAX];
unsigned int CanPowse=CANPOWSE,CanGO=0;
unsigned int Caliber_time=0;
unsigned long Caliber_time=0;
int GOOD[0x10];
int ZERO[0x10];
@ -91,10 +91,9 @@ interrupt void cpu_timer1_isr_SENS()
}
if(!TST)
if(count_bright == Brightness)
{
clear_LED_OUT_2();
clear_LED_OUT_1();
if(count_bright == Bright[0]) clear_LED_OUT_1();
if(count_bright == Bright[1]) clear_LED_OUT_2();
}
if(TST & !preTest)
@ -116,11 +115,21 @@ interrupt void cpu_timer1_isr_SENS()
work_lamp = blink_over;
}
else
if(cLiteFire)
{
if(sig.bit.Error) work_lamp = blink_over;
else work_lamp = 1;
heat_lamp = 1;
work_lamp = 1;
}
else
{
if(Desk==dsk_BKSD)
{
if(sig.bit.Error) work_lamp = blink_over;
else work_lamp = 1;
if(bSecretBt|cSecretBt) work_lamp = blink_alarm;
if(bSecretBt|cSecretBt) work_lamp = blink_alarm;
}
else work_lamp = cHighVolt;
if(sig.bit.OverHeat) heat_lamp = 1;
else if(sig.bit.SubHeat) heat_lamp = blink_over;
@ -150,7 +159,10 @@ void Init_sensors()
}
for(i=0;i<ADC_MAX;i++)
{
adc_filter[i] = def_FILTERBAT;
out_filter[i] = 0;
}
if(Desk==dsk_COMM)
{
@ -172,8 +184,6 @@ void Init_sensors()
MesPerSec = MesPerSec*3/cans; // òèïà, òðè ñåêóíäû
}
void Init_packMask()
{
int i,j;
@ -203,7 +213,7 @@ void Init_packMask()
for(i=0;i<3; i++)
Maska[m_SLOW][i+3] = Maska[m_FAST][i]; // Óñòàâêè
Maska[m_SLOW][6]|=0x0100; // ßðêîñòü ëàìï
Maska[m_SLOW][6]|=0x0300; // ßðêîñòü 2 ëàìï
if(Desk == dsk_BKSD)
Maska[m_SLOW][7]|=0x0003; // Êàëèáð òåðìîäàò÷èêîâ
@ -222,9 +232,9 @@ void Init_packMask()
} }
Maska[m_FAST][1]|= 0x0003; // Äèñêðåòíûå kíîïêè
Maska[m_SLOW][6]|= 0x00FF; // Ïåðèîäû ïîñûëîê
Maska[m_FAST][7]|= 0x0100; // Ñ÷åò÷èê ïîñûëîê
Maska[m_SLOW][7]|= 0x0E00; // Ñ÷åò÷èê ïîñûëîê
Maska[m_SLOW][6]|= 0x007F; // Ïåðèîäû ïîñûëîê
Maska[m_SLOW][7]|= 0xE000; // Ïðîòîêîë, àäðåñ, êîìàíäû
}

View File

@ -40,6 +40,9 @@ void Default_params()
if(Desk == dsk_PULT)
{
for(i=0;i<7;i++)
Bright[i] = bright[Mode-adr_PLT1][i];
Cancount[m_FAST] = 2; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
Cancount[m_SLOW] = 100; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
@ -49,20 +52,22 @@ void Default_params()
CanRestart[m_FAST] = 500; // * 10msec, ïåðåçàïóñê ïîñûëêè
CanRestart[m_SLOW] = 1000; // * 10msec, ïåðåçàïóñê ïîñûëêè
CanRepeat = 5; // ñêîëüêî ðàç ïîâòîðàòü íàäî
CanRptVez = 5; // кол-во повторений посылки «keys»
CanRptLen = 1; // длина повтораемой посылки «keys»
}
else
{
Cancount[m_FAST] = 20; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
Cancount[m_SLOW] = 100; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
CanWait[m_FAST] = 100; // * 10msec, ïàóçà ïîñëå öèêëà
CanWait[m_FAST] = 1; // * 10msec, пауза после цикла
CanWait[m_SLOW] = 1; // * 10msec, ïàóçà ïîñëå öèêëà
CanRestart[m_FAST] = 500; // * 10msec, ïåðåçàïóñê ïîñûëêè
CanRestart[m_SLOW] = 1000; // * 10msec, ïåðåçàïóñê ïîñûëêè
CanRepeat = 1; // ñêîëüêî ðàç ïîâòîðàòü íàäî
CanRptVez = 1; // кол-во повторений посылки «keys»
CanRptLen = 1; // длина повтораемой посылки «keys»
}
if(Mode == adr_PLT1)
@ -71,13 +76,11 @@ void Default_params()
RScount = 25; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè RS485
}
if(Desk==dsk_PULT) for(i=0;i<7;i++)
Bright[i] = bright[Mode-adr_PLT1][i];
if(Desk==dsk_SHKF) Brightness = 10;
if(Desk==dsk_BKSD) Brightness = 8;
if(Desk == dsk_COMM)
{
Bright[0] = 10;
Bright[1] = 6;
K300_1 = 1900;
K300_2 = 1900;
K400_1 = 2500;
@ -92,6 +95,9 @@ void Default_params()
if(Desk==dsk_BKSD)
{
Bright[0] = 8;
Bright[1] = 8;
K100_D = 700;
K150_D = 2500;
@ -136,7 +142,7 @@ void Load_params()
if(TermoSW)
{
cTermoCal = 1;
Caliber_time = 0xFFFF;
Caliber_time = 25L * ADC_FREQ;
} } }