133 lines
3.1 KiB
C
133 lines
3.1 KiB
C
#include "stm32f1xx_hal.h"
|
||
|
||
#include "struc.h"
|
||
#include "crc16.h"
|
||
#include "package.h"
|
||
#include "message.h"
|
||
#include "eeprom.h"
|
||
|
||
uint16_t params[Modbus_LEN+1],
|
||
modbus[Modbus_LEN],
|
||
archiv[Modbus_LEN],
|
||
county[Modbus_LEN],
|
||
espero[Modbus_LEN];
|
||
|
||
uint16_t Mode;
|
||
|
||
LONGE* outputs;
|
||
|
||
void Init_packMask(void);
|
||
|
||
uint16_t Maska[2][8];
|
||
|
||
void Default_params()
|
||
{
|
||
unsigned int i;
|
||
|
||
for(i=0;i<Modbus_LEN;i++)
|
||
{
|
||
modbus[i] = 0;
|
||
}
|
||
|
||
Alarm_mask.all = 0x3FFF;
|
||
Alarm_mask.bit.bit7 = 0; // Заряд накопителя
|
||
Alarm_mask.bit.bitC = 0; // резерв
|
||
|
||
Error_mask.all = 0;
|
||
Error_mask.bit.bit9 = 1; // Авария в сети 24 В
|
||
|
||
for(i=0;i<4;i++)
|
||
Squazh_L[i] = 90;
|
||
|
||
LastMode = Mode;
|
||
|
||
Sleep_time = 60; // минута чтобы отклюиться
|
||
|
||
Cancount[m_FAST] = 5; // * 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 = 3; // сколько раз повторять надо
|
||
|
||
Brightness = 9;
|
||
|
||
Protokol = PROTOKOL;
|
||
}
|
||
|
||
void Load_params()
|
||
{
|
||
unsigned int i,crc;
|
||
unsigned int adr = FLASH_EEPROM_BASE;
|
||
|
||
for(int j=0; j<Modbus_LEN+1; j+=1)
|
||
{
|
||
params[j] = watInTheFlash(adr) & 0xFFFF;
|
||
adr += 0x2;
|
||
}
|
||
crc = get_crc16(params,Modbus_LEN);
|
||
if( (crc==params[Modbus_LEN]) &&
|
||
(crc !=0xFFFF) &&
|
||
(Mode == params[126]))
|
||
{
|
||
for(i=0;i<Modbus_LEN;i++) modbus[i] = params[i];
|
||
Commands=0;
|
||
}
|
||
else
|
||
{
|
||
Default_params();
|
||
Save_params();
|
||
}
|
||
|
||
Init_packMask();
|
||
}
|
||
|
||
void Save_params()
|
||
{
|
||
unsigned int i,dif=0;
|
||
|
||
for(i=0;i<Modbus_LEN;i++)
|
||
if(params[i] != modbus[i])
|
||
{
|
||
params[i] = modbus[i];
|
||
dif=1;
|
||
}
|
||
if(dif)
|
||
{
|
||
params[Modbus_LEN] = get_crc16(params,Modbus_LEN);
|
||
putIntoEeprom(Modbus_LEN+1, params);
|
||
} }
|
||
|
||
void Init_packMask()
|
||
{
|
||
int i;
|
||
|
||
for(i=0;i<8;i++)
|
||
{
|
||
Maska[m_FAST][i] = 0;
|
||
Maska[m_SLOW][i] = 0;
|
||
}
|
||
|
||
Maska[m_FAST][0]|= 0x0007; // Дискретные входы, неисправности и аварии
|
||
|
||
Maska[m_SLOW][0]|= 0x0300; // Маски на неисправности и аварии
|
||
Maska[m_SLOW][1]|= 0x0003; // Состояние джамперов
|
||
Maska[m_SLOW][2]|= 0x000F; // Скважность датчика напряжения
|
||
Maska[m_SLOW][3]|= 0x000F; // Аварийная уставка скважности
|
||
Maska[m_SLOW][4]|= 0x0100; // Время автоматического отключения
|
||
|
||
Maska[m_SLOW][6]|= 0x0007; // Яркость ламп и периоды посылок
|
||
Maska[m_SLOW][7]|= 0xE000; // Адрес, команды, и чтоб не вылазило
|
||
|
||
Maska[m_SLOW][6]|= 0x017F; // Яркость лампы и периоды посылок
|
||
Maska[m_FAST][7]|= 0x0100; // Счетчик посылок
|
||
Maska[m_SLOW][7]|= 0x0E00; // Счетчик посылок
|
||
Maska[m_SLOW][7]|= 0xE000; // Протокол, адрес, команды
|
||
}
|
||
|
||
|