Лабораторна робота №3
Тема: Дослідження алгоритму визначення міжцифрового інтервалу GetNum().
Мета роботи: Засвоєння роботи другого етапу обслуговування абонентів – прийому набору номера.
Теоретичні відомості.
Алгоритм GetNum() – друга складова алгоритму прийому номера, яка забезпечує виконання наступніх дій: визначення міжцифрового інтервалу; прийому та накопичення цифр набору номера; визначення кінця набору номера; визначення відбою абонента під час набору номера. Період запуску алгоритму 120 мс, що з гарантованим запасом перевищує період слідування імпульсів набору.
Суть алгоритму заключається в контролі станів кількості виявлених імпульсів у регістрі імпульсів – imp_cur, через кожні 120 мс. Якщо на протязі даного періоду часу виникли зміни в їх кількості, то це розглядається як продовження набору цифри номера. Якщо змін не виявлено, то важається, що настав міжцифровий інтервал. Для здійснення процедури визначення змін у кількості імпульсів, в РВ необхідно мати контрольний регістр імпульсів – imp_old – для зберігання попереднього стану кількості імпульсів. Період запуску алгоритма вибирається виходячи з умови гарантованого визначення міжцифрового інтервалу в найгіршому випадку моментів запуску алгоритма по відношенню до стану абонентського шлейфу, який перевіряється.
Блок схема алгоритму визначення міжцифрового інтервала набору номера приведена на рис. 3.1.
Після запуску алгоритма диспетчером, його робота починається з аналізу черги заявок на прийом номера. Якщо заявки відсутні, тобто відсутні абоненти, які здійснюють набір, то алгоритм закінчує свою роботу переходом у вихідний стан.
Якщо хоча б одна заявка присутня в черзі, то починає роботу головна частина алгоритму, яка заключається в наступному:
1. по номеру АК визначається номер РВ, який закріплений за даним АК;
2. формуються координати АК, (номер групи – g_abn, положення в групі – n_abn);
3. у випадку виявлення високого рівня абонентського шлейфу визначається кількість накопичених імпульсів (imp_cur=0?), якщо рівна нулю – означає, що триває міжцифрова пауза; в протилежному випадку за допомогою порівняння кількості попередніх імпульсів з текучою їх кількістю визначається:
а) міжцифрова пауза, при рівності порівняння значень (imp_cur=imp_old?);
б) продовження набору номера, у протиленому випадку (imp_cur!=imp_old?);
4. при виявленні міжцифрової паузи зберігається кількість накопичених імпульсів, як наступна цифра номеру (destin_number[numptr++]=imp_cur, numptr++), підготовлюються лічильники імпульсів до набору наступних значень, тобто обнулюються (imp_cur=imp_old=0);
5. при виявленні інтервалу продовження набору номера зберігається нова кількість імпульсів (imp_old=imp_cur);
6. у випадку низького рівня абонентського шлейфу (SHLF[g_abn]&m_abn=0), тобто запуск алгоритму попав на один зі проміжків чи низького стану за рахунок наступного імпульсу, чи за рахунок відбою абонента під час набору номера; вирішити це питання дає змогу стан лінійного реле:
а) високий рівень ЛР (R1[g_abn]&m_abn!=0) свідчить про те, що алгоритм попав на імпульс набору номера;
б) низький рівень ЛР (R1[g_abn]&m_abn=0) свідчить про відбій абонента під час набору номера; при цьому необхідно зняти абонента з черги на прийом набору номера, звільнити регістр виклику та відмітити абонента як вільний та доступний іншим абонентам системи.
ні
ні
ні
ні
ні
так
так
так
так
так
Сигнал запуску від диспетчера
Вихідний стан
Кінець перегляду черги?
Вихідний стан
Визначення номера РВ для наступного виклику
Формування координат АК джерельного абонента
Стан абонентського шлейфа
Кількість накопичених імпульсів
Міжцифрова пауза:
imp_cur=imp_old
Збереження визначеного номера
destin_number[numptr]=imp_cur
Обнулення лічильників
imp_cur=imp_old=0
Збереження нової кількості імпульсів
Абонент поставив трубку?
Зняти з черги на прийом номера
Звільнити РВ
Відмітити абонента вільним
Рис. 3.1. Блок схема алгоритму визначення міжцифрового інтервала набору номера.
На рис. 3.2 зображено вікно виклику функції GetNum(), де:
R – номер регістра виклику, який виділений для даного абонента;
SHLF – лінійний номер АК джерельного абонента А;
io – кількість прийнятих цифр при попередньому опитуванні;
ic – кількість прийнятих цифр на теперішній момент часу;
Nptr – вказівник на прийом текучої цифри номеру, ця змінна вказує на прийомі якої цифри знаходиться алгоритм.
NUM – визначений системою номер, який надійшов зі сторони джерельного абонента А;
iptr – вказівник на останній елемент у вхідній черзі;
qi – вхідна черга.
EMBED PBrush
Рис. 3.2. Вікно виклику функції GetNum().
Хід роботи.
1. Ознайомитись з теоретичними відомостями;
2. Запустити програму main.exe;
3. Відкрити для виконання файл 3_1;
4. Натискаючи клавішу F5 слідкувати за зміною значень в вікні функції.
5. Після закінчення програми, переписати в звіт значення з головного вікна Registers;
Контрольні запитання.
1. Як зміниться робота алгоритму при зменшенні чи збільшенні періоду запуска алгоритма?
2. Через які змінні взаємодіють між собою алгоритми прийому номера?