Програма «FICMAC» аналогічно програмі «SICMAC» виробляє керуючі команди для алгоритмічної перебудови МКУ.
Програма «FORDIN», використовуючи інформаційні масиви програм: «SICMAC» і «FICMAC», а також масив IC, формує масив вихідних керуючих сигналів «DIN», що обробляється програмою «DIOUT».
Програми контролю забезпечують підвищення надійності функціонування ЕЧСР, здійснюючи тестування ЕОМ і супутнього УСО.
Контроль здійснюється з використанням програмно-апаратних засобів системи ЕЧСР.
В ЕОМ контролюється працездатність ОЗП плат ПМВ01, МВ01 шляхом запису, зчитування і порівняння визначених кодів.
Для перевірки плати ПСВ01 встановлюється визначений режим плати (множення) і контролюється результат. Названі операції проводяться програмою «TEST», що включається в програмний блок початкового пуску, і блок програм нерегламентованого циклу.
Крім того здійснюється контроль плат АВВ01 і ПСВ01 за максимальним часом виконання операцій. Для АВВ01 – це час зчитування інформації з одного каналу, для ПСВ01 час виконання операції множення чи ділення. Реалізується часовий контроль програмою (ТМР), що обслуговує таймер 5, який ініциалізує переривання по 3-му рівні контролера переривань при перевищенні встановленого часу виконання операцій, а також часу роботи програм БКУ і МКУ.
Програма ТМР сполучена з програмним файлом «TEST». При порушенні тимчасового циклу відбувається переключення на резервну ЕОМ, а несправна система переходить у режим діагностики «d». У цьому режимі функціонує тільки програма «USOCON», що забезпечує вивід інформації про тип відмовлення на індикатори пульта ЕОМ.
У системі задіяні також формовані в ЕОМ сигнали контролю по парності і помилці звертання.
Програма контролю вхідних аналогових сигналів забезпечує виявлення несправного каналу і перехід на зчитування інформації зі справного каналу, для дубльованих каналів, і відключення каналу для одинарних. Виявлення несправності супроводжується відповідною індикацією і записом в інформаційний масив.
Програма контролю вхідних дискретних сигналів, використовуючи міжмашину магістраль обміну інформацією, виявляє канал, що відмовив, фіксує його стан в інформаційному масиві.
Програма контролю вихідних аналогових сигналів «CONTR» здійснює порівняння числових кодів відповідних вихідних сигналів з кодами контрольного масиву (DAN02) аналогової інформації для тих же сигналів. У результаті порівняння виявляється місце відмовлення: у системі ЦАП чи в субблоках САР і СТП. Інформація про несправність заноситься в масив.
Програма контролю вихідних дискретних сигналів сполучена з програмним файлом «DIOUT» і дозволяє фіксувати стан контактів усіх вихідних реле. Програмою виробляється порівняння інформації на виході ЕОМ і інформації, що вводиться через мультиплексор СРЛ, про стан контактів СКР. Результати керування фіксуються в інформаційному масиві.
Програма «USOCON» узагальнює інформацію всіх програм контролю і формує команди на зміну алгоритму керування в залежності від стану системи, а також готує дані по діагностиці для виводу на пульт ЕОМ і субблок контролю СКС. При цьому програмою фіксуються відмовлення, як у системі УСО, та к і в вузлах мікро-ЕОМ. По факту відмовлення в системі власного УСО ЕОМ або у вузлах самої ЕОМ забезпечується переключення на резервну мікроЕОМ через СКС і переведення ЕОМ у режим діагностики. У режимі діагностики в цикл включена тільки програма «PULT» і програма виводу на пульт індикації на пульт ЕОМ «INOCON». Вивід інформації на пульт здійснюється по факту установки оператором з пульта прапорадіагностики (FLAG+36H=0FFH).
Сервісні програми зібрані у файлі «PULT» і обслуговують діалоговий режим «оператор-ЕОМ». Введення команд і індикація здійснюються за допомогою пульта мікро-ЕОМ. При цьому реалізуються наступні режими:
1) індикація і зміна вмісту пам'яті ЕОМ;
2) індикація і зміна стану портів ЕОМ;
3) індикація параметрів обчислювального процесу у відсотках і абсолютних одиницях;
4) запис перехідних процесів двох параметрів в ОЗП ЕОМ;
5) переміщення і порівняння масивів в ОЗП й ін.
Блок програм нерегламентованого циклу.
Блок складають програми, що не вимагають високої швидкодії. Ці програми організовані в цикл, що перериваються всіма, описаними вище програмними блоками.
Програма введення настроєчних коефіцієнтів забезпечує обслуговуючому персоналу можливість робити підстроювання коефіцієнтів системи регулювання за допомогою кнопкового пульта, розміщеного в субблоці перемикачів СП.
Програма «TEST» і її призначення розглянуті вище.
Програми контролю теплового стану турбіни «POKZPR» і «NAGSPR» забезпечують контроль температурних напружень турбіни й обчислення припустимого діапазону зміни потужності турбоагрегату.
Бібліотека підпрограм складається з програм, що реалізують найбільш часто повторювані функції.
5. Розробка програмного субмодуля контролю струму ЕГП
5.1 Розробка алгоритму контролю струму ЕГП
Програмний модуль контролю струму ЕГП входить до складу програмного забезпечення швидкодіючого контуру керування. Його призначенням є безупинний контроль значення струму ЕГП. Оскільки струм ЕГП є вихідним аналоговим сигналом, то для його контролю необхідно реалізувати схему зворотного зв'язку між виходом каналу ЕГП і обчислювальною машиною.
Рис. 5.1 Блок-схема алгоритму контролю струму ЕГП
Алгоритм контролю струму ЕГП повинен забезпечувати відключення каналу при появі струму, непідтвердженого вхідними вимогами, такими як спрацювання каналу релейного форсування, диференціатора, попереднього захисту блоку (команда РТА 3).
Алгоритм контролю струму ЕГП складається з наступних кроків:
1. Виробляється перевірка контрольного струму ЕГП на знак. Значення знаку струму ЕГП зберігається в інформаційному масиві «DUOTC», порядковий номер комірки в масиві – «3», тобто адреса комірки позначається як «DOUTC+3». У випадку позитивного знака в дану комірку буде записаний код «00H», у випадку негативного знака буде записаний код «0FFH».
2. Якщо знак струму ЕГП позитивний, то порівнюємо його з уставкою «+75 МА», у випадку негативного знака робимо порівняння з уставкою «-75 МА». Значення струму ЕГП зберігається в інформаційному масиві «DUOTC» за адресою «DOUTC+2».
3. У випадку перевищення струмом значення уставки, виробляється перевірка чим викликана поява струму ЕГП. Перевірка виробляється зчитуванням з інформаційних масивів кодів, що сигналізують про спрацювання команд РФ, ДИФ, РТА3. Коди для релейного форсування і диференціатора зберігаються в інформаційному масиві «IC», по адресах «IC+84» для «РФ» і «IC+12» для «ДИФ» відповідно. Код для команди «РТА3» зберігається у інформаційному масиві «SEC» за адресою «SEC+12». Ознакою спрацьовування каналу є код «0FFH», у противному випадку в комірці буде знаходитися код «00H».
Перевірка виробляється в наступному порядку:
а) перевіряється спрацювання каналу «релейної форсировки»;
б) перевіряється поява режиму «РОТА3»;
в) перевіряється спрацьовування каналу «диференціатора».
4. Якщо спрацював, який-небудь з каналів, то виробляється запис у масив найважливіших параметрів турбіни, таких як потужність турбіни, частота обертання, тиск свіжої пари в головному паровому колекторі і т.д. При цьому також визначається величина неузгодженості (розбіжності) між струмом ЕГП і контрольним струмом ЕГП. У випадку розбіжності вище визначеного значення, відключається канал ЕГП (якщо машина ведуча).
5. Якщо поява струму ЕГП не викликана спрацьовуванням РФ, ДИФ, РТА3, то відключається канал ЕГП записом в інформаційний масив «IC» коду «0FFH» за адресою «IC+132».
Програма написана мовою асемблера, тому що дана мова програмування дозволяє генерувати високоефективний код при мінімальному його розмірі.
5.2 Лістінг програми контролю струму ЕГП
На основі вище приведеного алгоритму розроблена блок-схема самої програми (рис. 5.2).
Рисунок 5.2 Блок-схема програми контролю струму ЕГП
Лістінг програми контролю струму ЕГП приведений в таблиці 5.1
Таблиця 5.1 Лістінг програми контролю струму ЕГП
Мітка | Оператор | Операнд | Коментар |
CONTMP: | LDA | DOUTC+3 | Зчитуємо знак струму ЕГП |
RAL | Перевіряємо чи позитивний знак струму ЕГП | ||
LC | M1 | Якщо негативний, то переходимо до порівняння струму з уставкою «-50 МА» | |
LHLD | DOUTC+2 | Завантажуємо в реєстрову пару «HL» значення контрольного струму ЕГП | |
LXI | D, 20H | Завантажуємо в реєстрову пару «HL» значення уставки рівне «+50 МА» | |
CALL | RAZN2F | Порівнюємо значення контрольного струму з уставкою, викликом підпрограми порівняння | |
JNC | M2 | Якщо значення струму більше уставки, то переходимо до аналізу причини появи струму | |
JMP | M3 | Інакше переходимо до підпрограми підготовки масиву для запису параметрів | |
M1: | LHLD | DOUTC+2 | Завантажуємо в реєстрову пару «HL» значення контрольного струму ЕГП |
LXI | D, 0FFE0H | Завантажуємо в реєстрову пару «HL» значення уставки рівне «-50 МА» | |
CALL | RAZN2F | Порівнюємо значення контрольного струму з уставкою, викликом підпрограми порівняння | |
JC | M2 | Якщо значення струму більше уставки, то переходимо до аналізу причини появи струму | |
JMP | M3 | Інакше переходимо до підпрограми підготовки масиву для запису параметрів | |
M2; | LDA | IC+84 | Перевірка роботи каналу РФ |
CPI | 0FFH | ||
JZ | 01F5AH | Якщо РФ, то переходимо до підпрограми запису параметрів в масив | |
LDA | SEC+12 | Перевірка роботи каналу РТА3 | |
CPI | 0FFH | ||
JZ | 01F5AH | Якщо РТА3, то переходимо до підпрограми запису параметрів в масив | |
LD | IC+12 | Перевірка роботи каналу ДИФ | |
CPI | 0FFH | ||
JZ | 01F5AH | Якщо ДИФ, то переходимо до підпрограми запису параметрів в масив | |
JMP | 01F4DH | Інакше переходимо до підпрограми відключення каналу ЕГП | |
M4: | LDA | FLAGMP | Завантажуємо в регістр «А» лічильник циклу запису параметрів в масив |
CPI | 05H | Перевіряємо, чи досяг лічильник значення «5» | |
JC | M5 | Якщо досяг, то переходимо до підготовки масиву для запису параметрів | |
LHLD | ADRTEK | Запам'ятовуємо в пам'яті адрес масиву параметрів | |
LDA | DAN02+0 | Зчитуємо значення потужності турбіни з масиву «DAN02» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN02+1 | Зчитуємо значення потужності турбіни з масиву «DAN02» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DANOUT+4 | Зчитуємо значення частоти турбіни з масиву «DANOUT» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DANOUT+5 | Зчитуємо значення частоти турбіни з масиву «DANOUT» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN01+0 | Зчитуємо значення тиску свіжої пари в ЦПК із масиву «DAN01» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN01+1 | Зчитуємо значення тиску свіжої пари в ЦПК із масиву «DAN01» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN01+36 | Зчитуємо значення тиску керуючого масла з масиву «DAN01» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN01+37 | Зчитуємо значення тиску керуючого масла з масиву «DAN01» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DOUTC+2 | Зчитуємо значення струму ЕГП з масиву «DOUTC» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DOUTC+3 | Зчитуємо значення струму ЕГП з масиву «DOUTC» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN02+2 | Зчитуємо значення контрольного струму ЕГП з масиву «DAN02» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | DAN02+3 | Зчитуємо значення контрольного струму ЕГП з масиву «DAN02» | |
MOV | M, A | Заносимо в «наш» масив | |
INX | H | Збільшуємо адресу масиву на одиницю | |
INX | H | Збільшуємо адресу масиву на одиницю | |
INX | H | Збільшуємо адресу масиву на одиницю | |
LDA | IC+84 | Зчитуємо з масиву «IC» ознаку спрацювання релейної форсировки | |
ANI | 01 | Виділяємо нульовий біт шляхом логічного множення | |
MOV | B, A | Зберігаємо число в регістрі «B» | |
LDA | SEC+12 | Зчитуємо з масиву «SEC» ознаку спрацювання РТА3 | |
ANI | 02 | Виділяємо перший біт шляхом логічного множення | |
ORA | B | Логічно сумуємо з регістром B | |
MOV | B, A | Зберігаємо число в регістрі «B» | |
LDA | DIN+13 | Зчитуємо з масиву «DIN» ознаку спрацювання диференціатора | |
ANI | 04 | Виділяємо другий біт шляхом логічного множення | |
ORA | B | Логічно сумуємо з регістром B | |
MOV | M, A | Записуємо в масив зборку дискретних команд (РФ, РТА3, ДИФ) | |
INX | H | Збільшуємо адресу масиву на одиницю | |
INX | H | Збільшуємо адресу масиву на одиницю | |
SHLD | ADRTEK | Запам'ятовуємо поточний адрес (індекс) масиву в комірці пам'яті | |
XRA | A | Обнуляємо лічильник числа циклів запису параметрів в масив | |
STA | FLAGMP | Зберігаємо його в комірці пам'яті | |
JMP | M6 | Переходимо до визначення ведучої ЕОМ і обчислення неузгодженості між контрольним струмом і струмом ЕГП | |
M5: | LXI | H, FLAGMP | Заносимо в реєстрову пару «HL» адрес лічильника числа повторень циклу запису параметрів у масив |
INR | M | Збільшуємо значення лічильника по цій адресі | |
LHLD | ADRTEK | Зчитуємо поточний адрес індексування масиву параметрів | |
LXI | D, 0AC00H | Заносимо в реєстрову пару «DE» адресу закінчення масиву параметрів | |
CALL | RAZN2F | Перевіряємо, чи досягнутий індекс кінця масиву | |
JC | M6 | Якщо так, то переходимо до обчислення значення неузгодженості, інакше | |
XRA | A | обнуляємо лічильник числа повторень циклу запису параметрів у масив | |
STA | FLAGMP | запам'ятовуємо його в комірці пам'яті | |
JMP | M6 | і переходимо до обчислення значення неузгодженості | |
M3: | MVI | A, 5 | Заносимо число в лічильник числа повторень циклу запису параметрів |
STA | FLAGMP | Запам'ятовуємо його в пам'яті | |
LXI | H, 0A800H | Заносимо в реєстрову пару «HL» адресу початку масиву параметрів | |
JMP | 01F68H | Переходимо до запису параметрів | |
M6: | IN | 0B8H | Перевіряємо чи є дана ЕОМ ведучою (основною) |
RAR | Якщо резервна, | ||
RNC | то виходимо в основну програму, інакше переходимо до обчислення значення неузгодженості | ||
LHLD | DOUTC+2 | Завантажуємо в реєстрову пару «HL» значення струму ЕГП | |
XCHG | Змінюємо місцями вміст регістрів «HL» і «DE» | ||
LHLD | DAN02+2 | Завантажуємо в реєстрову пару «HL» значення контрольного струму ЕГП | |
DAD | H | Обчислюємо | |
DAD | H | величину | |
DAD | D | неузгодженості | |
MOV | A, H | Перевіряємо | |
RAL | «характер» неузгодженості | ||
JNC | M7 | Якщо неузгодженість позитивна, то безпосередньо переходимо до порівняння величини неузгодженості, інакше | |
CALL | INVERC | приводимо значення неузгодженості до позитивного числа, перетворенням коду в додатковий за допомогою виклику підпрограми перетворення в додатковий код | |
M7: | MOV | A, H | Перевіряємо чи неузгоджені між собою значення струму ЕГП і контрольного струму ЕГП |
CPI | 00 | Якщо так, | |
JNZ | M8 | то викликаємо підпрограму відключення каналу ЕГП | |
MOV | A, L | Якщо ні, | |
CPI | 40H | то | |
JC | M10 | переходимо до підпрограми обнулення лічильника числа входжень у програму | |
M8: | LDA | FLAG+20 | Завантажуємо в регістр «А» лічильник числа входжень у програму |
CPI | 6 | Якщо число входжень у програму менше ніж «6», то | |
JC | M9 | переходимо до підпрограми збільшення лічильника числа входжень у програму на «1» | |
MVI | A, 0FFH | Заносимо в регістр «А» код відключення каналу ЕГП | |
STA | IC+132 | Записуємо в масив код для відключення каналу ЕГП | |
RET | Повертаємося в основну програму | ||
M9: | INR | A | Збільшуємо на одиницю лічильник числа входжень в програму |
STA | FLAG+20H | Запам'ятовуємо лічильник у масиві | |
RET | Повертаємося в основну програму | ||
M10: | XRA | A | Обнуляємо лічильник числа входжень в програму |
STA | FLAG+20H | Запам'ятовуємо лічильник у масиві | |
RET | Повертаємося в основну програму | ||
PUBLIC | CONTP | Кінець | |
END | основної програми | ||
NAME | RAZN2F | Підпрограма вирахування двобайтних чисел і їхнє порівняння з виробленням ознак.Входи: HL – зменшуване;DE – від'ємник.Виходи: HL – різниця (HL – DE);PSW – ознаки (HL=DE Z=1)(HL>DE Carry=0)(HL<DE Carry=1) | |
CSEG | |||
RAZN2F: | MOV | A, D | Заносимо в регістр «А» старший байт «зменшуваного» |
CMA | Обчислюємо «зворотній код» | ||
MOV | D, A | Повертаємо в регістр «D» старший байт від'ємника в «зворотному коді» | |
MOV | A, E | Заносимо в регістр «А» молодший байт «зменшуваного» | |
CMA | Обчислюємо «зворотній код» | ||
MOV | E, A | Повертаємо в регістр «E» молодший байт «віднімається» у «зворотному коді» | |
INX | D | Збільшуємо «від'ємник» на «1», одержуючи в такий спосіб «додатковий код» від'ємника | |
DAD | D | Підсумовуємо «зменшуване» з «відємником» в «додатковому коді», що рівносильно їх відніманню у прямому коді.Результат віднімання в регістрі «HL» | |
MOV | A, H | Заносимо в регістр «А» старший байт результату і логічно підсумовуємо | |
ORA | L | з молодшим байтом результату.Якщо результат був «0» (два числа рівні), то прапор «Z» (прапор «нуля») встановиться в «1» | |
MOV | A, H | Заносимо в регістр «А» старший байт результату | |
RAL | і зсуваємо на один розряд уліво.Якщо «зменшуване» було більше від'ємника, то прапор «Carry» (прапор «переносу») встановиться в «0», інакше встановиться в «1» | ||
RET | Повертаємося в точку виклику підпрограми | ||
PUBLIC | RAZN2F | Кінець | |
END | підпрограми | ||
NAME | INVERC | Підпрограма представлення двобайтного числа в додатковому кодіВходи: HL – число;Виходи: HL – число в додатковому коді | |
CSEG | |||
RAZN2F: | MOV | A, H | Заносимо в регістр «А» старший байт числа |
CMA | Обчислюємо «зворотній код» | ||
MOV | H, A | Повертаємо в регістр «H» старший байт числа в «зворотному коді» | |
MOV | A, L | Заносимо в регістр «А» молодший байт числа | |
CMA | Обчислюємо «зворотній код» | ||
MOV | L, A | Повертаємо в регістр «L» молодший байт числа в «зворотному коді» | |
INX | H | Збільшуємо число в «зворотному коді» на «1», одержуючи в такий спосіб «додатковий код» від'ємника | |
RET | Повертаємося в точку виклику підпрограми | ||
PUBLIC | INVERC | Кінець | |
END | Підпрограми |
Відповідно до правил технічної експлуатації електричних станцій і мереж одним з основних техніко-економічних показників електричної станції є кількість виробленої електроенергії і відпущеного тепла.