
5. РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕР ДЛЯ КОНТРОЛЯ ТЕХНОЛОГИЧЕСКИХ ПРОЦЕССОВ НА АЭС
5.1. Постановка задачи и разработка алгоритма
При моделировании работы контроллера необходимо реализовать вывод данных и проанализировать полученную информацию с возможностью вывода сообщений по дальнейшей работе прибора.
Для программы, моделирующей работу технологического реактора АЭС мы выбрали 3 датчика это:
-датчика температуры (value1());
-датчика газа (value2());
-датчика давления (value3());
5.2.Формализация алгоритма
Ниже приведен код программы для контроля технологических процессов на АЭС:
#include "pch.h" #include <iostream> #include <ctime> #include <windows.h> void zaderjka()
{
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100);
printf(".");
Sleep(100); printf(".\n");
}
int vkl() { int zz;
setlocale(LC_ALL, "Rus"); printf("Получить данные от датчика\n");
43
std::cout << "0 - нет, 1 - да: "; std::cin >> zz;
return zz;
}
int random(int min, int max, int n) { if (n > 0) {
return min + rand() % (max - min);
}
else {
return NULL;
}
}
int value1()
{
printf("СЧИТЫВАНИЕ ДАННЫХ\n"); printf("\nСчитывание данных с датчика температуры"); zaderjka();
return random(280, 340, vkl());
}
int value2()
{
printf("\nСчитывание данных с датчика газа"); zaderjka();
return random(15, 60, vkl());
}
int value3()
{
printf("\nСчитывание данных с датчика давления"); zaderjka();
return random(12, 19, vkl());
}
int main()
{
setlocale(0, "rus"); printf("ПАРАМЕТРЫ РЕАКТОРА\n"); printf("Ядерный реактор ВВЭР-1300:\n");
printf("Нормальный температурный режим от 298 до 329 °C\n"); printf("Нормальный водородный режим от 20 до 50 см3/кг\n"); printf("Нормальный режим давления не привышающщий 16
МПа\n\n");
int arr[3] = { value1(), value2(), value3() }; int arr2[3] = { 0,0,0 };
44
asm
{
lea EBX, arr lea EDX, arr2 mov EDI, [EBX] cmp EDI, 0d
jz lab1
cmp EDI, 329d jc lable mov[EDX], 3d jmp lab1 lable :
cmp EDI, 298d jc labl mov[EDX], 2d jmp lab1
labl : mov[EDX], 1d lab1 :
mov EDI, [EBX + 4] cmp EDI, 0d
jz lab2
cmp EDI, 50d jc lable1
mov[EDX + 4], 3d jmp lab2
lable1 :
cmp EDI, 20d jc labl1
mov[EDX + 4], 2d jmp lab2
labl1 : mov[EDX + 4], 1d lab2 :
mov EDI, [EBX + 8] cmp EDI, 0d
jz end
cmp EDI, 16d jc lable2
mov[EDX + 8], 2d jmp end
lable2 : mov[EDX + 8], 1d end :
45
}
printf("\nОБРАБОТКА ДАННЫХ\n"); printf("\nДатчик температуры: %i°C\n", arr[0]); switch (arr2[0])
{
case 0: printf("ERROR!\nОшибка получения данных с датчика\n");
break;
case 1: printf("Показатели ниже среднего \nУвеличьте нагрев энергоблока\n"); break;
case 2: printf("Показатели в норме\n Оборудование работает в штатном режиме.\n"); break;
case 3: printf("Показатели выше среднего!\n Запустите систему охлаждения\n"); break;
default: break;
}
printf("\nДатчик газа: %i см3/кг\n", arr[1]); switch (arr2[1])
{
case 0: printf("ERROR!\nОшибка получения данных с датчика\n");
break;
case 1: printf("Показатели ниже среднего \nУвеличьте концентрацию водорода\n"); break;
case 2: printf("Показатели в норме\n Оборудование работает в штатном режиме.\n"); break;
case 3: printf("Показатели выше среднего!\n Запустите систему удаления водорода\n"); break;
default: break;
}
printf("\nДатчик давления: %i МПа\n", arr[2]); switch (arr2[2])
{
case 0: printf("ERROR!\nОшибка получения данных с датчика\n");
break;
case 1: printf("Показатели в норме\n Оборудование работает в штатном режиме.\n"); break;
case 2: printf("Показатели выше среднего!\n Запустите компенсатор давления\n"); break;
default: break; system("pause");
}
}
Демонстрация работы программы программы можно увидеть на рисунке 13 и 14.
46

Рисунок 13 – Демонстрация работы с ошибкой
Рисунок 14 – Демонстрация работы с получением данных
47