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