Начало
This commit is contained in:
274
Source/Internal/message.c
Normal file
274
Source/Internal/message.c
Normal file
@@ -0,0 +1,274 @@
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
#include "package.h"
|
||||
#include "RS485.h"
|
||||
#include "crc16.h"
|
||||
#include "cntrl_adr.h"
|
||||
#include "bios_dsp.h"
|
||||
#include "message.h"
|
||||
#include "filter_bat2.h"
|
||||
#include "measure.h"
|
||||
|
||||
#include "ADC.h"
|
||||
#include "peripher.h"
|
||||
|
||||
#include "ecan.h"
|
||||
#include "pulto.h"
|
||||
#include "spise2p.h"
|
||||
#include "i2c.h"
|
||||
|
||||
int modbus[ANSWER_LEN+1];
|
||||
unsigned int param[ANSWER_LEN+1];
|
||||
|
||||
int archiv[ANSWER_LEN+1];
|
||||
int county[ANSWER_LEN+1];
|
||||
int espero[ANSWER_LEN+1];
|
||||
|
||||
unsigned int Maska[2][8];
|
||||
|
||||
void Default_params()
|
||||
{
|
||||
unsigned int i;
|
||||
int bright[][7] = {8,8,10,8,8,8,6, 10,8,8,8,0,0,0};
|
||||
|
||||
for(i=0;i<ANSWER_LEN;i++)
|
||||
{
|
||||
modbus[i] = 0;
|
||||
}
|
||||
|
||||
LastMode = 0x255; // ÷òîá âûçâàòü àâòîêàëèáðîâêó
|
||||
Protokol = PROTOKOL;
|
||||
|
||||
if(Desk == dsk_PULT)
|
||||
{
|
||||
Cancount[m_FAST] = 2; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
|
||||
Cancount[m_SLOW] = 100; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
|
||||
|
||||
CanWait[m_FAST] = 1; // * 10msec, ïàóçà ïîñëå öèêëà
|
||||
CanWait[m_SLOW] = 1; // * 10msec, ïàóçà ïîñëå öèêëà
|
||||
|
||||
CanRestart[m_FAST] = 500; // * 10msec, ïåðåçàïóñê ïîñûëêè
|
||||
CanRestart[m_SLOW] = 1000; // * 10msec, ïåðåçàïóñê ïîñûëêè
|
||||
|
||||
CanRepeat = 5; // ñêîëüêî ðàç ïîâòîðàòü íàäî
|
||||
}
|
||||
else
|
||||
{
|
||||
Cancount[m_FAST] = 20; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
|
||||
Cancount[m_SLOW] = 100; // * 10msec, ïàóçà ìåæäó ïîñûëêàìè CAN
|
||||
|
||||
CanWait[m_FAST] = 100; // * 10msec, ïàóçà ïîñëå öèêëà
|
||||
CanWait[m_SLOW] = 1; // * 10msec, ïàóçà ïîñëå öèêëà
|
||||
|
||||
CanRestart[m_FAST] = 500; // * 10msec, ïåðåçàïóñê ïîñûëêè
|
||||
CanRestart[m_SLOW] = 1000; // * 10msec, ïåðåçàïóñê ïîñûëêè
|
||||
|
||||
CanRepeat = 1; // ñêîëüêî ðàç ïîâòîðàòü íàäî
|
||||
}
|
||||
|
||||
if(Mode == adr_PLT1)
|
||||
{
|
||||
RSleng = 9; // äëèíà ïîñûëêè 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)
|
||||
{
|
||||
K300_1 = 1900;
|
||||
K300_2 = 1900;
|
||||
K400_1 = 2500;
|
||||
K400_2 = 2500;
|
||||
|
||||
for(i=0;i<start_data;i++)
|
||||
if(sens_type[i] == TERMO_AD)
|
||||
{
|
||||
sens_hi_edge[i] = 70;
|
||||
sens_lo_edge[i] = 60;
|
||||
} }
|
||||
|
||||
if(Desk==dsk_BKSD)
|
||||
{
|
||||
K100_D = 700;
|
||||
K150_D = 2500;
|
||||
|
||||
for(i=0;i<6;i++)
|
||||
{
|
||||
sens_hi_edge[i] = 170;
|
||||
sens_lo_edge[i] = 150;
|
||||
}
|
||||
for(i=6;i<8;i++)
|
||||
{
|
||||
sens_hi_edge[i] = 115;
|
||||
sens_lo_edge[i] = 105;
|
||||
} } }
|
||||
|
||||
void Load_params()
|
||||
{
|
||||
unsigned int i,crc;
|
||||
|
||||
for(i=0;i<ANSWER_LEN;i++)
|
||||
{
|
||||
archiv[i] = espero[i] = 0;
|
||||
county[i] = 1;
|
||||
}
|
||||
|
||||
Seeprom_read(0x3FFF-(ANSWER_LEN+1), param, (ANSWER_LEN+1)*2);
|
||||
crc = get_crc16(param,ANSWER_LEN);
|
||||
if( (crc==param[ANSWER_LEN]) &&
|
||||
(crc !=0xFFFF) &&
|
||||
(Mode == param[126]) )
|
||||
{
|
||||
for(i=0;i<ANSWER_LEN;i++) modbus[i] = param[i];
|
||||
calc_sensor_koef();
|
||||
Protokol = PROTOKOL;
|
||||
Commands=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Default_params();
|
||||
calc_sensor_koef();
|
||||
LastMode = Mode;
|
||||
Save_params();
|
||||
if(TermoSW)
|
||||
{
|
||||
cTermoCal = 1;
|
||||
Caliber_time = 0xFFFF;
|
||||
} } }
|
||||
|
||||
|
||||
void Save_params()
|
||||
{
|
||||
unsigned int i,dif=0;
|
||||
|
||||
for(i=0;i<ANSWER_LEN;i++)
|
||||
if(param[i] != (unsigned int)modbus[i])
|
||||
{
|
||||
param[i] = modbus[i];
|
||||
dif=1;
|
||||
}
|
||||
if(dif)
|
||||
{
|
||||
param[ANSWER_LEN] = get_crc16(param,ANSWER_LEN);
|
||||
Seeprom_write(0x3FFF-(ANSWER_LEN+1),param,(ANSWER_LEN+1)*2);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/***************************************************************/
|
||||
/* Ïåðåäà÷à äàííûõ ïî ïðîòîêîëó ModBus - êîìàíäà 3
|
||||
×òåíèå à÷ååê äàííûõ */
|
||||
/***************************************************************/
|
||||
/***************************************************************/
|
||||
|
||||
void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned int crc, Address_MB, Length_MB, cal, i;
|
||||
|
||||
// ïîëó÷èëè íà÷àëüíûé àäðåñ ÷òåíèà
|
||||
Address_MB =/*(rs_arr->RS_Header[2] << 8) |*/ rs_arr->RS_Header[3];
|
||||
|
||||
// ïîëó÷èëè êîëè÷åñòâî ñëîâ äàííûõ
|
||||
Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Îòñûëêà
|
||||
/* Ïîñ÷èòàëè êîíòðîëüíóþ ñóììó ïåðåä ñàìîé ïîñûëêîé */
|
||||
|
||||
rs_arr->buffer[0] = CNTRL_ADDR;
|
||||
rs_arr->buffer[1] = CMD_MODBUS_3;
|
||||
rs_arr->buffer[2] = Length_MB*2;
|
||||
|
||||
cal = rs_arr->RS_Header[2];
|
||||
|
||||
for (i=0;i<Length_MB;i++)
|
||||
{
|
||||
if(cal)
|
||||
{
|
||||
if(Address_MB+i-start_data < 16)
|
||||
{
|
||||
rs_arr->buffer[3+i*2 ]=HIBYTE(ADC_table[Address_MB+i-start_data]);
|
||||
rs_arr->buffer[3+i*2+1]=LOBYTE(ADC_table[Address_MB+i-start_data]);
|
||||
}
|
||||
else
|
||||
{
|
||||
rs_arr->buffer[3+i*2 ]=(Modbus[Address_MB+i-16].byt.byte_hi);
|
||||
rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i-16].byt.byte_lo);
|
||||
} }
|
||||
else
|
||||
{
|
||||
rs_arr->buffer[3+i*2 ]=(Modbus[Address_MB+i].byt.byte_hi);
|
||||
rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i].byt.byte_lo);
|
||||
} }
|
||||
|
||||
crc = 0xffff;
|
||||
crc = get_crc_16(crc, rs_arr->buffer, Length_MB*2+3);
|
||||
|
||||
rs_arr->buffer[Length_MB*2+3] = LOBYTE(crc);
|
||||
rs_arr->buffer[Length_MB*2+4] = HIBYTE(crc);
|
||||
|
||||
rs_arr->buffer[Length_MB*2+5] = 0;
|
||||
rs_arr->buffer[Length_MB*2+6] = 0;
|
||||
rs_arr->buffer[Length_MB*2+7] = 0;
|
||||
rs_arr->buffer[Length_MB*2+8] = 0;
|
||||
|
||||
rs_arr->flag_TIMEOUT_to_Send=true;
|
||||
RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void ReceiveCommandModbus6(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned int Address_MB, Data_MB, i;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Îòñûëêà
|
||||
/* Îòïðàâëàåì íàçàä òî æå ñàìîå */
|
||||
|
||||
for (i=0;i<8;i++)
|
||||
rs_arr->buffer[i] = rs_arr->RS_Header[i];
|
||||
|
||||
|
||||
// ïîëó÷èëè íà÷àëüíûé àäðåñ çàïèñè
|
||||
Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]);
|
||||
|
||||
// ïîëó÷èëè ñëîâî äàííûõ
|
||||
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
||||
|
||||
modbus[Address_MB] = Data_MB;
|
||||
|
||||
rs_arr->flag_TIMEOUT_to_Send=true;
|
||||
RS_Send(rs_arr, rs_arr->buffer, 10);
|
||||
}
|
||||
|
||||
void SendCorreoRS(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned int Data, CRC, i;
|
||||
|
||||
if(!RSleng) return;
|
||||
|
||||
rs_arr->buffer[0] = 0xAA;
|
||||
rs_arr->buffer[1] = 0x55;
|
||||
|
||||
CRC = 0xAA + 0x55;
|
||||
|
||||
for (i=0;i<RSleng*2-1;i++)
|
||||
{
|
||||
Data = (RSpack[i/2]>>8*(i&1)) & 0xFF;
|
||||
rs_arr->buffer[i+2] = Data;
|
||||
CRC+=Data;
|
||||
}
|
||||
|
||||
rs_arr->buffer[RSleng*2+1] = ~CRC & 0xFF;
|
||||
|
||||
rs_arr->flag_TIMEOUT_to_Send=true;
|
||||
RS_Send(rs_arr, rs_arr->buffer, RSleng*2+2);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
Reference in New Issue
Block a user