Исправлена автокалибровка

This commit is contained in:
Dimas 2025-10-23 15:21:59 +03:00
parent a9c42feb81
commit 3f5e355783
10 changed files with 775 additions and 776 deletions

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: 0x0000b576
Entry Point: 0x0000b589
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..00007481 BOOT TABLE
.cinit : dest=0000b6cb size=000001f7 width=00000002
.text : dest=00008000 size=000036cb width=00000002
CONTENTS: 00000000..000074a7 BOOT TABLE
.cinit : dest=0000b6de size=000001f7 width=00000002
.text : dest=00008000 size=000036de 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

@ -56,9 +56,9 @@ void setup_adc()
if(Desk==dsk_COMM)
{
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0001; // Setup 2 conv's on SEQ1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // ñíà÷àëà òîæå áóäóò òåìïåðàòóðû
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x4; // Setup ADCINA2 as 2nd SEQ1 conv.
/* À íàïðàæåíèé íàì òóò è íå íàäî
/* <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD>
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x7; // Setup ADCINA2 as 2nd SEQ1 conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x3; // Setup ADCINA2 as 2nd SEQ1 conv.
@ -163,7 +163,7 @@ interrupt void adc_isr(void)
if(TermoAD)
{
if(cownt_cans == TPL_CANS ) code_tpl_canal = TERMOPAIR-1;
if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // ïîòîìó ÷òî 300 è 400 íàîáîðîò
if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 300 <20> 400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
select_tpl_canal(code_tpl_canal);
}
@ -181,12 +181,11 @@ interrupt void adc_isr(void)
if(ok|!prev_ok[n])
{
if(WAKE) ADC_table[n] = Temper;
else
{
Filter = filterbat(&adc_filter[n],Temper);
ADC_table[n] = Filter;
} } }
Filter = filterbat(&adc_filter[n],Temper);
if(WAKE)ADC_table[n] = Temper;
else ADC_table[n] = Filter;
} }
if(++cownt_one_canal>=COUNT_ONE_CANAL)
{ cownt_one_canal=0;
@ -214,7 +213,7 @@ modbus[0x2F]=Log.Adres;
{
cownt_cans = 0;
Test_mem_limit(TermoSW*(TPL_CANS+2));
Test_mem_limit(2*TermoSW*(TPL_CANS+1));
if(cWriteLog)no_write=1;
} }

View File

@ -112,27 +112,25 @@
#define CanCycle (modbus+0x78) // ñ÷åò÷èê ïðîõîæäåíèé öèêëîâ CAN
#define CanRound (modbus+0x7A) // ñ÷åò÷èê îòîñëàííûõ ìàññèâîâ
#define komanda modbus[124]
#define Protokol modbus[125]
#define LastMode modbus[126]
#define Commands modbus[127]
#define comand modbus[128]
#define bit_comand Modbus[128]
#define bit_kom Modbus[124]
#define cTestLamp bit_comand.bit.bit0
#define cDefParam bit_comand.bit.bit1
#define cSaveParam bit_comand.bit.bit2
#define cLoadParam bit_comand.bit.bit3
#define cTermoCal bit_comand.bit.bit4
#define cKoefCalc bit_comand.bit.bit5
#define cSecretBt bit_comand.bit.bit6
#define cCanReset bit_comand.bit.bit7
#define cRawMeat bit_comand.bit.bit8
#define cLiteFire bit_comand.bit.bit9
#define cHighVolt bit_comand.bit.bitA
#define cTestLamp bit_kom.bit.bit0
#define cDefParam bit_kom.bit.bit1
#define cSaveParam bit_kom.bit.bit2
#define cLoadParam bit_kom.bit.bit3
#define cTermoCal bit_kom.bit.bit4
#define cKoefCalc bit_kom.bit.bit5
#define cSecretBt bit_kom.bit.bit6
#define cCanReset bit_kom.bit.bit7
#define cRawMeat bit_kom.bit.bit8
#define cWriteLog bit_comand.bit.bitE
#define cReset bit_comand.bit.bitF
#define cWriteLog bit_kom.bit.bitE
#define cReset bit_kom.bit.bitF
#endif //PACKAGE

View File

@ -115,6 +115,7 @@ void main()
LastMode = Mode;
Protokol = PROTOKOL;
precom = Commands;
for(i=0;i<0x80;i++)
county[i]=1;
@ -124,8 +125,6 @@ void main()
CanRound[i]=
CanCycle[i]=0;
comand=0;
EALLOW;
SysCtrlRegs.WDCR= 0x2F;
EDIS;
@ -249,13 +248,14 @@ void main()
get_Buttons();
if(Commands!=precom)
comand = Commands & (~precom|comand);
komanda = Commands & (~precom|komanda);
precom = Commands;
if(cDefParam)
{
cDefParam=0;
Default_params();
Commands=precom;
}
if(cSaveParam)
@ -268,6 +268,7 @@ void main()
{
cLoadParam=0;
Load_params();
Commands=precom;
}
if(cKoefCalc)

View File

@ -242,7 +242,7 @@ void Init_packMask()
Maska[m_FAST][7]|= 0x0100; // Ñ÷åò÷èê ïîñûëîê
Maska[m_SLOW][7]|= 0x0E00; // Ñ÷åò÷èê ïîñûëîê
Maska[m_SLOW][7]|= 0x6000; // Ïðîòîêîë, àäðåñ
Maska[m_FAST][7]|= 0x8000; // Êîìàíäû
Maska[m_FAST][7]|= 0x9000; // Êîìàíäû
}
int er_anal(int term, long * count, int edge, int pre)
@ -316,7 +316,8 @@ void Temper_count(int chan)
}
if(WAKE)out_filter[chan] = Numb;
else out_filter[chan]+=(Numb-out_filter[chan])/MesPerSec;
out_filter[chan]+=(Numb-out_filter[chan])/MesPerSec;
Numb = out_filter[chan];
kun = chan - cal_addr;

View File

@ -43,37 +43,37 @@ void Default_params()
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
Cancount[m_FAST] = 2; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN
Cancount[m_SLOW] = 100; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN
CanWait[m_FAST] = 1; // * 10msec, пауза после цикла
CanWait[m_SLOW] = 1; // * 10msec, пауза после цикла
CanWait[m_FAST] = 1; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
CanWait[m_SLOW] = 1; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
CanRestart[m_FAST] = 500; // * 10msec, перезапуск посылки
CanRestart[m_SLOW] = 1000; // * 10msec, перезапуск посылки
CanRestart[m_FAST] = 500; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CanRestart[m_SLOW] = 1000; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CanRptVez = 5; // кол-во повторений посылки «keys»
CanRptLen = 1; // длина повтораемой посылки «keys»
CanRptVez = 5; // <EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>keys<79>
CanRptLen = 1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>keys<79>
}
else
{
Cancount[m_FAST] = 20; // * 10msec, пауза между посылками CAN
Cancount[m_SLOW] = 100; // * 10msec, пауза между посылками CAN
Cancount[m_FAST] = 20; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN
Cancount[m_SLOW] = 100; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN
CanWait[m_FAST] = 1; // * 10msec, пауза после цикла
CanWait[m_SLOW] = 1; // * 10msec, пауза после цикла
CanWait[m_FAST] = 1; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
CanWait[m_SLOW] = 1; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
CanRestart[m_FAST] = 500; // * 10msec, перезапуск посылки
CanRestart[m_SLOW] = 1000; // * 10msec, перезапуск посылки
CanRestart[m_FAST] = 500; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CanRestart[m_SLOW] = 1000; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CanRptVez = 1; // кол-во повторений посылки «keys»
CanRptLen = 1; // длина повтораемой посылки «keys»
CanRptVez = 1; // <EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>keys<79>
CanRptLen = 1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>keys<79>
}
if(Mode == adr_PLT1)
{
RSleng = 9; // длина посылки RS485
RScount = 25; // * 10msec, пауза между посылками RS485
RSleng = 9; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RS485
RScount = 25; // * 10msec, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RS485
}
if(Desk == dsk_COMM)
@ -141,15 +141,14 @@ void Load_params()
Save_params();
if(TermoSW)
{
cTermoCal = 1;
Caliber_time = 25L * ADC_FREQ;
cTermoCal = 1;
} } }
void Save_params()
{
unsigned int i,dif=0;
for(i=0;i<ANSWER_LEN;i++)
if(param[i] != (unsigned int)modbus[i])
{
@ -160,13 +159,12 @@ void Save_params()
{
param[ANSWER_LEN] = get_crc16(param,ANSWER_LEN);
Seeprom_write(0x3FFF-(ANSWER_LEN+1),param,(ANSWER_LEN+1)*2);
}
}
} }
/***************************************************************/
/***************************************************************/
/* Передача данных по протоколу ModBus - команда 3
Чтение ачеек данных */
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ModBus - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/***************************************************************/
/***************************************************************/
@ -174,15 +172,15 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
{
unsigned int crc, Address_MB, Length_MB, cal, i;
// получили начальный адрес чтениа
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Address_MB =/*(rs_arr->RS_Header[2] << 8) |*/ rs_arr->RS_Header[3];
// получили количество слов данных
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
/////////////////////////////////////////////////
// Отсылка
/* Посчитали контрольную сумму перед самой посылкой */
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
rs_arr->buffer[0] = CNTRL_ADDR;
rs_arr->buffer[1] = CMD_MODBUS_3;
@ -232,17 +230,17 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr)
unsigned int Address_MB, Data_MB, i;
/////////////////////////////////////////////////
// Отсылка
/* Отправлаем назад то же самое */
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */
for (i=0;i<8;i++)
rs_arr->buffer[i] = rs_arr->RS_Header[i];
// получили начальный адрес записи
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]);
// получили слово данных
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
modbus[Address_MB] = Data_MB;