Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
27.11.2024
Размер:
705.79 Кб
Скачать

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

Соседние файлы в папке Работы