смена кодировки
This commit is contained in:
parent
d6c3e5d7be
commit
a7d6faca8b
170
Core/Src/main.c
170
Core/Src/main.c
@ -151,216 +151,216 @@ for(i=0;i<10;i++)
|
|||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
//=== БЛОК ПРИНУДИТЕЛЬНОЙ ПАУЗЫ ===//
|
//=== БЛОК ПРИНУДИТЕЛЬНОЙ ПАУЗЫ ===//
|
||||||
if (flag.force_pause)
|
if (flag.force_pause)
|
||||||
{
|
{
|
||||||
__disable_irq(); // Отключаем все прерывания
|
__disable_irq(); // Отключаем все прерывания
|
||||||
for(int i = 0; i < flag.pause; i++); // Пустой цикл для задержки
|
for(int i = 0; i < flag.pause; i++); // Пустой цикл для задержки
|
||||||
__enable_irq(); // Включаем прерывания обратно
|
__enable_irq(); // Включаем прерывания обратно
|
||||||
}
|
}
|
||||||
|
|
||||||
//=== ОБРАБОТКА CAN-ШИНЫ ===//
|
//=== ОБРАБОТКА CAN-ШИНЫ ===//
|
||||||
if (CanGO) // Флаг разрешения работы с CAN-шиной
|
if (CanGO) // Флаг разрешения работы с CAN-шиной
|
||||||
{
|
{
|
||||||
CanGO = 0; // Сбрасываем флаг
|
CanGO = 0; // Сбрасываем флаг
|
||||||
|
|
||||||
// Увеличиваем счетчики ожидания для всех элементов (ограничение 30000)
|
// Увеличиваем счетчики ожидания для всех элементов (ограничение 30000)
|
||||||
for(i = 0; i < 0x80; i++)
|
for(i = 0; i < 0x80; i++)
|
||||||
if(espero[i] < 30000)
|
if(espero[i] < 30000)
|
||||||
espero[i]++;
|
espero[i]++;
|
||||||
|
|
||||||
// Уменьшаем счетчики задержки для двух CAN-каналов
|
// Уменьшаем счетчики задержки для двух CAN-каналов
|
||||||
for(i = 0; i < 2; i++)
|
for(i = 0; i < 2; i++)
|
||||||
if(cancount[i])
|
if(cancount[i])
|
||||||
cancount[i]--;
|
cancount[i]--;
|
||||||
else
|
else
|
||||||
cancell[i] = 0; // Сброс позиции, если счетчик обнулился
|
cancell[i] = 0; // Сброс позиции, если счетчик обнулился
|
||||||
}
|
}
|
||||||
|
|
||||||
//=== ОБРАБОТКА КАНАЛОВ CAN ===//
|
//=== ОБРАБОТКА КАНАЛОВ CAN ===//
|
||||||
for(i = 0; i < 2; i++) // Для каждого из двух CAN-каналов
|
for(i = 0; i < 2; i++) // Для каждого из двух CAN-каналов
|
||||||
{
|
{
|
||||||
if (Cancount[i] && !cancount[i]) // Если есть задержка и счетчик обнулился
|
if (Cancount[i] && !cancount[i]) // Если есть задержка и счетчик обнулился
|
||||||
{
|
{
|
||||||
// Поиск следующего элемента для обработки
|
// Поиск следующего элемента для обработки
|
||||||
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]; // Устанавливаем задержку
|
||||||
goto Next; // Переход к следующей итерации
|
goto Next; // Переход к следующей итерации
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка маски для определения активных элементов
|
// Проверка маски для определения активных элементов
|
||||||
mask = Maska[i][cancell[i] / 0x10] >> (cancell[i] & 0x0F);
|
mask = Maska[i][cancell[i] / 0x10] >> (cancell[i] & 0x0F);
|
||||||
if (!mask) // Если маска пустая
|
if (!mask) // Если маска пустая
|
||||||
cancell[i] = (cancell[i] + 0x10) & 0xFFF0; // Переход к следующей группе
|
cancell[i] = (cancell[i] + 0x10) & 0xFFF0; // Переход к следующей группе
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Поиск первого установленного бита в маске
|
// Поиск первого установленного бита в маске
|
||||||
while (!(mask & 1))
|
while (!(mask & 1))
|
||||||
{
|
{
|
||||||
cancell[i]++;
|
cancell[i]++;
|
||||||
mask >>= 1;
|
mask >>= 1;
|
||||||
}
|
}
|
||||||
break; // Найден активный элемент
|
break; // Найден активный элемент
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
z = 1; // Флаг нормального состояния
|
z = 1; // Флаг нормального состояния
|
||||||
// Проверка превышения времени ожидания
|
// Проверка превышения времени ожидания
|
||||||
if (espero[cancell[i]] > CanRestart[i])
|
if (espero[cancell[i]] > CanRestart[i])
|
||||||
{
|
{
|
||||||
county[cancell[i]] = 1; // Установка флага необходимости отправки
|
county[cancell[i]] = 1; // Установка флага необходимости отправки
|
||||||
z = 0; // Флаг аварийного состояния
|
z = 0; // Флаг аварийного состояния
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка изменения данных для отправки
|
// Проверка изменения данных для отправки
|
||||||
if (modbus[cancell[i]] != archiv[cancell[i]])
|
if (modbus[cancell[i]] != archiv[cancell[i]])
|
||||||
{
|
{
|
||||||
if (cancell[i] == keys) // Если это ключевой элемент
|
if (cancell[i] == keys) // Если это ключевой элемент
|
||||||
{
|
{
|
||||||
// Установка флагов для группы элементов
|
// Установка флагов для группы элементов
|
||||||
for(j = 0; j < CanRptLen; j++)
|
for(j = 0; j < CanRptLen; j++)
|
||||||
county[cancell[i] + j] = CanRptVez;
|
county[cancell[i] + j] = CanRptVez;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
county[cancell[i]] = 1; // Установка флага для одиночного элемента
|
county[cancell[i]] = 1; // Установка флага для одиночного элемента
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обработка элементов, требующих отправки
|
// Обработка элементов, требующих отправки
|
||||||
if (county[cancell[i]])
|
if (county[cancell[i]])
|
||||||
{
|
{
|
||||||
// Поиск границ группы измененных элементов
|
// Поиск границ группы измененных элементов
|
||||||
for(j = 3; j > 0 && !Isit(cancell[i] + j, i, z); j--);
|
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++);
|
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; // Корректировка позиции
|
||||||
|
|
||||||
// Обработка каждого элемента в группе
|
// Обработка каждого элемента в группе
|
||||||
for(j = 0; j < qua; j++)
|
for(j = 0; j < qua; j++)
|
||||||
{
|
{
|
||||||
n = cancell[i] + j;
|
n = cancell[i] + j;
|
||||||
archiv[n] = modbus[n]; // Сохранение текущего значения
|
archiv[n] = modbus[n]; // Сохранение текущего значения
|
||||||
espero[n] = 0; // Сброс счетчика ожидания
|
espero[n] = 0; // Сброс счетчика ожидания
|
||||||
|
|
||||||
if (county[n]) // Если элемент требует обработки
|
if (county[n]) // Если элемент требует обработки
|
||||||
{
|
{
|
||||||
county[n]--; // Уменьшение счетчика
|
county[n]--; // Уменьшение счетчика
|
||||||
// Если счетчик обнулился и это не циклический элемент
|
// Если счетчик обнулился и это не циклический элемент
|
||||||
if (!county[n] && n != cancyclo + i)
|
if (!county[n] && n != cancyclo + i)
|
||||||
candid[i] = 1; // Установка флага кандидата
|
candid[i] = 1; // Установка флага кандидата
|
||||||
}
|
}
|
||||||
// Обновление маски активных элементов
|
// Обновление маски активных элементов
|
||||||
if (!county[n])
|
if (!county[n])
|
||||||
masca[n / 0x10] |= (1 << (n & 0x0F));
|
masca[n / 0x10] |= (1 << (n & 0x0F));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Отправка данных через CAN-шину
|
// Отправка данных через CAN-шину
|
||||||
CAN_send(archiv, cancell[i], qua);
|
CAN_send(archiv, cancell[i], qua);
|
||||||
|
|
||||||
cancount[i] = Cancount[i]; // Установка задержки
|
cancount[i] = Cancount[i]; // Установка задержки
|
||||||
cancell[i] += qua; // Переход к следующей позиции
|
cancell[i] += qua; // Переход к следующей позиции
|
||||||
|
|
||||||
// Проверка завершения обработки всех элементов
|
// Проверка завершения обработки всех элементов
|
||||||
for(j = 0; j < 8; j++)
|
for(j = 0; j < 8; j++)
|
||||||
if ((masca[j] & Maska[i][j]) != Maska[i][j])
|
if ((masca[j] & Maska[i][j]) != Maska[i][j])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (j == 8) // Если все элементы обработаны
|
if (j == 8) // Если все элементы обработаны
|
||||||
{
|
{
|
||||||
// Сброс соответствующих битов маски
|
// Сброс соответствующих битов маски
|
||||||
for(j = 0; j < 8; j++)
|
for(j = 0; j < 8; j++)
|
||||||
masca[j] &= ~Maska[i][j];
|
masca[j] &= ~Maska[i][j];
|
||||||
CanRound[i]++; // Увеличение счетчика раундов
|
CanRound[i]++; // Увеличение счетчика раундов
|
||||||
}
|
}
|
||||||
|
|
||||||
// Управление параллельной обработкой каналов
|
// Управление параллельной обработкой каналов
|
||||||
if (Cancount[i] > 1 && !cancount[!i])
|
if (Cancount[i] > 1 && !cancount[!i])
|
||||||
cancount[!i] = 1; // Запуск другого канала
|
cancount[!i] = 1; // Запуск другого канала
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cancell[i]++; // Переход к следующему элементу
|
cancell[i]++; // Переход к следующему элементу
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Next: // Метка для перехода к следующей части цикла
|
Next: // Метка для перехода к следующей части цикла
|
||||||
|
|
||||||
//=== ЧТЕНИЕ ВХОДНЫХ СИГНАЛОВ ===//
|
//=== ЧТЕНИЕ ВХОДНЫХ СИГНАЛОВ ===//
|
||||||
ReadEnteres(); // Функция чтения дискретных входов
|
ReadEnteres(); // Функция чтения дискретных входов
|
||||||
|
|
||||||
//=== УПРАВЛЕНИЕ ВЫХОДНЫМИ СИГНАЛАМИ ===//
|
//=== УПРАВЛЕНИЕ ВЫХОДНЫМИ СИГНАЛАМИ ===//
|
||||||
if (Errors.all | Alarms.all)
|
if (Errors.all | Alarms.all)
|
||||||
Pvt4_OFF; // Выключение сигнала "Система ВЭП в норме"
|
Pvt4_OFF; // Выключение сигнала "Система ВЭП в норме"
|
||||||
else
|
else
|
||||||
Pvt4_ON; // Включение сигнала "Система ВЭП в норме"
|
Pvt4_ON; // Включение сигнала "Система ВЭП в норме"
|
||||||
|
|
||||||
if (Errors.all)
|
if (Errors.all)
|
||||||
Pvt3_ON; // Включение сигнала "Авария системы ВЭП"
|
Pvt3_ON; // Включение сигнала "Авария системы ВЭП"
|
||||||
else
|
else
|
||||||
Pvt3_OFF; // Выключение сигнала "Авария системы ВЭП"
|
Pvt3_OFF; // Выключение сигнала "Авария системы ВЭП"
|
||||||
|
|
||||||
if (Falling_asleep)
|
if (Falling_asleep)
|
||||||
Pvt2_ON; // Включение сигнала управления
|
Pvt2_ON; // Включение сигнала управления
|
||||||
else
|
else
|
||||||
Pvt2_OFF; // Выключение сигнала управления
|
Pvt2_OFF; // Выключение сигнала управления
|
||||||
|
|
||||||
//=== ОБРАБОТКА КОМАНД ===//
|
//=== ОБРАБОТКА КОМАНД ===//
|
||||||
if (Commands != precom) // Если команды изменились
|
if (Commands != precom) // Если команды изменились
|
||||||
{
|
{
|
||||||
command = (~precom | command) & Commands; // Обновление активных команд
|
command = (~precom | command) & Commands; // Обновление активных команд
|
||||||
}
|
}
|
||||||
precom = Commands; // Сохранение текущих команд для следующей итерации
|
precom = Commands; // Сохранение текущих команд для следующей итерации
|
||||||
|
|
||||||
//=== ОБРАБОТКА СИСТЕМНЫХ КОМАНД ===//
|
//=== ОБРАБОТКА СИСТЕМНЫХ КОМАНД ===//
|
||||||
if (cDefParam) // Команда сброса параметров по умолчанию
|
if (cDefParam) // Команда сброса параметров по умолчанию
|
||||||
{
|
{
|
||||||
cDefParam = 0;
|
cDefParam = 0;
|
||||||
Default_params(); // Вызов функции сброса параметров
|
Default_params(); // Вызов функции сброса параметров
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cSaveParam) // Команда сохранения параметров
|
if (cSaveParam) // Команда сохранения параметров
|
||||||
{
|
{
|
||||||
cSaveParam = 0;
|
cSaveParam = 0;
|
||||||
Save_params(); // Вызов функции сохранения параметров
|
Save_params(); // Вызов функции сохранения параметров
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cLoadParam) // Команда загрузки параметров
|
if (cLoadParam) // Команда загрузки параметров
|
||||||
{
|
{
|
||||||
cLoadParam = 0;
|
cLoadParam = 0;
|
||||||
Load_params(); // Вызов функции загрузки параметров
|
Load_params(); // Вызов функции загрузки параметров
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cCanReset) // Команда сброса CAN-системы
|
if (cCanReset) // Команда сброса CAN-системы
|
||||||
{
|
{
|
||||||
cCanReset = 0;
|
cCanReset = 0;
|
||||||
|
|
||||||
// Сброс всех счетчиков и состояний CAN-системы
|
// Сброс всех счетчиков и состояний CAN-системы
|
||||||
for(i = 0; i < 0x80; i++)
|
for(i = 0; i < 0x80; i++)
|
||||||
county[i] = 1; // Установка флагов отправки для всех элементов
|
county[i] = 1; // Установка флагов отправки для всех элементов
|
||||||
|
|
||||||
for(i = 0; i < 2; i++)
|
for(i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
CanCycle[i] = 0; // Сброс счетчиков циклов
|
CanCycle[i] = 0; // Сброс счетчиков циклов
|
||||||
CanRound[i] = 0; // Сброс счетчиков раундов
|
CanRound[i] = 0; // Сброс счетчиков раундов
|
||||||
cancount[i] = 0; // Сброс счетчиков задержки
|
cancount[i] = 0; // Сброс счетчиков задержки
|
||||||
cancell[i] = 0; // Сброс позиций
|
cancell[i] = 0; // Сброс позиций
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < 8; i++)
|
for(i = 0; i < 8; i++)
|
||||||
masca[i] = 0; // Сброс масок
|
masca[i] = 0; // Сброс масок
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user