Лампа "высокое" управляется по 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 BOOT LOADER PARAMETERS
Table Type: SERIAL PORT (SCI 8 bit Mode) Table Type: SERIAL PORT (SCI 8 bit Mode)
Entry Point: 0x0000b42a Entry Point: 0x0000b4a9
OUTPUT TRANSLATION MAP OUTPUT TRANSLATION MAP
@ -21,9 +21,9 @@ OUTPUT TRANSLATION MAP
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
OUTPUT FILES: D:\project2833\GIT\UKSS_23550_2\bin\UKSSTMS320F28335.bin [b0..b7] OUTPUT FILES: D:\project2833\GIT\UKSS_23550_2\bin\UKSSTMS320F28335.bin [b0..b7]
CONTENTS: 00000000..000071df BOOT TABLE CONTENTS: 00000000..000072df BOOT TABLE
.cinit : dest=0000b57f size=000001f2 width=00000002 .cinit : dest=0000b5fe size=000001f3 width=00000002
.text : dest=00008000 size=0000357f width=00000002 .text : dest=00008000 size=000035fe width=00000002
ramfuncs : dest=0000c13c size=0000002b width=00000002 ramfuncs : dest=0000c13c size=0000002b width=00000002
.econst : dest=0000c000 size=00000111 width=00000002 .econst : dest=0000c000 size=00000111 width=00000002
.switch : dest=0000c168 size=00000028 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_DISCHARGE = ADC_FREQ/145; // 25;
COUNT_TRANSICIA = ADC_FREQ/25; // 150; COUNT_TRANSICIA = ADC_FREQ/25; // 150;
FILTER_CLIP = 200; FILTER_CLIP = 200;
WAKE_TIME =3L * ADC_FREQ; WAKE_TIME =5L * ADC_FREQ;
} }
WAKE = WAKE_TIME; WAKE = WAKE_TIME;
@ -140,15 +140,20 @@ interrupt void adc_isr(void)
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
EINT; EINT;
if(WAKE) WAKE--; if( WAKE)
{ WAKE--;
if(!WAKE) cCanReset = 1;
}
if(WAKE > WAKE_TIME - 10) goto fin; if(WAKE > WAKE_TIME - 10) goto fin;
if(Caliber_time) if(Caliber_time)
{ {
if(!--Caliber_time) if(!--Caliber_time)
{ {
cTermoCal = 0; cTermoCal = 0;
cSaveParam = 1; cSaveParam = 1;
cCanReset = 1;
} } } }
if(cownt_one_canal==COUNT_DISCHARGE) 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_sensors(void);
void Init_packMask(void); void Init_packMask(void);
//void measure_all(void);
void Temper_count(int chan); void Temper_count(int chan);
//void Current_count(int chan);
//void Power_count(int chan);
void calc_sensor_koef(); void calc_sensor_koef();
typedef union typedef union
@ -104,9 +101,8 @@ extern float tmpK[];
extern int sens_type[]; extern int sens_type[];
extern unsigned long LoneLeft,LoneRite; extern unsigned long LoneLeft,LoneRite;
extern unsigned long Caliber_time;
extern unsigned int CanPowse,CanGO; extern unsigned int CanPowse,CanGO;
extern unsigned int Caliber_time;
extern long WAKE; extern long WAKE;
#endif //_MEASURE #endif //_MEASURE

View File

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

View File

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

View File

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

View File

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

View File

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