Якщо з`єднання встановлено, відбувається запит й отримання даних центральним вузлом, де вони фіксуються. В списку КВ робиться відмітка, що кінцевий вузол опитаний успішно, сеанс зв’язку з КВ вважається закінченим і відбувається роз`єднання.
Якщо з`єднання не встановлено або дані від КВ не отримані за час Т2, то відмітка в списку КВ не робиться і визначається наявність інших неопитаних вузлів. Якщо в списку кінцевих станцій є ще неопитані, то переходимо до опитування наступного, тобто процедура повторюється. Якщо неопитаних вузлів не залишилось, то опитування по черзі закінчується й система переходить в вихідний стан, а на екран оператору виводиться повідомлення „Опитування по черзі закінчено” (№ 1). У випадку, коли неможливо встановити зв`язок або отримати дані, оператору на екран виводиться повідомлення “Неможливість встановлення з`єднання або отримання даних з і-го вузла” (№ 2).
В тому випадку, коли виникає необхідність переговорів по телефону або з клавіатури, або термінове отримання даних, починається відлік тайм-ауту Т2, в кінцевий вузол посилається запит на з`єднання й відбувається спроба на встановлення з`єднання. Якщо з`єднання не встановлюється за час Т2, в центральний вузол поступає повідомлення “З`єднання не встановлене” і виводиться відповідна інформація на екран (Повідомлення № 3). Запит при необхідності повторюється.
Якщо з`єднання встановлено, починається відлік тайм-ауту Т3, це час, що відведений на переговори, і відбуваються переговори з клавіатури або по телефону, або запит і отримання даних. Після закінчення переговорів або передачі даних в центральний вузол, або в випадку закінчення часу Т3 сеанс вважається закінченим і програма переходить в стан „Роз’єднання”. В цьому стані в модем надсилається команда „Роз’єднання”, він відключається від лінії, і програма переходить в „Вихідний стан”, а на екран монітору оператору видається повідомлення “Сеанс закінчений” (Повідомлення № 4).
Коли в ЦВ поступає вхідний виклик, в модем поступає команда
“відповісти на вхідний виклик і встановити з`єднання”. Встановлюється тайм-аут
Т2. Якщо з`єднання не встановлено за час Т2, в ЦВ поступає повідомлення про те,
що з`єднання не встановлено (повідомлення № 3). У випадку встановлення
з`єднання відбуваються переговори по телефону або з клавіатури. Сеанс
закінчений може бути по ініціативі викликаючої або викликаємої сторони. Якщо
центральний вузол закінчує переговори, то модему подається команда на
роз`єднання і відбувається процедура роз`єднання. Якщо ініціатором виступає
викликаєма сторона, модем центрального вузла приймає роз`єднання і система
переходить в вихідний стан.
4. РОЗРОБКА АЛГОРИТМУ КАНАЛЬНОГО РІВНЯ
В середовищі програмування Delphi використовується мова Pascal, найбільш вдосконалена в порівнянні з іншими мовами програмування та затверджена в якості стандартної в 1979р.
Вона ефективна, проста, логічна. Внаслідок цього вона отримала розповсюдження по всьому світі. В даний час майже всі ЕОМ і особливо мікроЕОМ, можуть працювати на цій мові. Тексти програм легко перевіряється на правильність, тому що їх зміст простий і очевидний стилю програмування.
Мова Pascal орієнтована на принципи сучасної технології програмування та надійні засоби обробки даних. Це основні її переваги. Ефективність роботи трансляторів дозволила реалізувати її на багатьох ЕОМ, що привело до широкого розповсюдження мови.
Всі конструкції мови будуються на базі символів алфавіту. До останніх відносяться літери, цифри, знаки та зарезервовані слова.
В мові Pascal, як і в будь якій мові є стандартні функції. Також треба пам’ятати, що будь яка реалізація мови на ЕОМ може вводити додаткові функції.
Мова Pascal дозволяє на рівні програми з невеликими складностями створювати структурні підпрограми складнооб’ємних і складних обчислень. Щоб користувач при створенні програм не допускав помилок або міг віднайти їх і виправити, у мові передбачено попередні вказівки типів даних, приймаючих участь в програмі, і обов’язкова інформація про всі елементи програми, таких, як позначки операторів, константи, змінні, підпрограми. Число різних операторів зведено до мінімуму. Мова дозволяє вдосконалити робочий процес програмування, поступово уточнюючи різні частини програми.
Мова Pascal зручна у використанні, і легко усвоюється в
роботі. Вона має всі засоби для зручного і ефективного створення програм, які
виконують різноманітні за значенням задачі. Однією з позитивних сторін є те, що
після компіляції вона перетворюється в програму, яка складається безпосередньо
з машинних кодів і для запуску не потрібно транслятора. Тому в даній роботі ми
робимо розробку програмного забезпечення на мові Pascal.
Програмне забезпечення ЦВ і КВ призначене для роботи під керуванням операційної системи Windows. Ця операційна система є багатозадачною, тобто має можливість одночасно виконувати, крім системних задач, декілька користованих програм, а також при цьому весь час обробляють події, викликані діями оператора, наприклад, події від “мишки” та клавіатури. Операційна система надає можливість всім користувацьким програмам по черзі виконувати свої команди. Якщо користувацькі програми виконують завдання, жорстко не регламентовані часом, то затримки, що вносяться необхідністю виконання декількох програм, не важливі. Але якщо користувацька програма взаємодіє з зовнішніми пристроями, часто виконання якихось частин програми регламентоване тайм-аутами, і затримки, що вносяться операційною системою, можуть привести до некоректних дій програми із-за перевищення тайм-аутів. Тому для роботи користувацьких програм у реальному масштабі часу ці програми повинні мати певну структуру.
При розробці в середовищі Pascal програма, в задачі якої входить взаємодія з модемом через послідовний порт комп’ютера, складається з трьох частин: основної програми, що має розширення “.exe”, додатку або бібліотеки, що має розширення “.dll” і файлу низького рівня, що для Windows-98 має розширення “.vxd”, а для Windows-2000 має розширення “.sys”. В основному файлі є процедура реєстрації всіх функцій і процедур бібліотеки, а в бібліотеці є спеціальні процедури і функції для зв’язку з файлом низького рівня (активізація його в операційній системі на час роботи основної програми та деактивізація при закінченні роботи програми, прийом від низького рівня та передача йому порцій даних) і з основною програмою, в якій реалізовані процедури і функції вищих рівнів. При такій структурі програми користувацька програма працює коректно, і операційна система слідкує за виконанням завдання з найменшими затримками.
Для спілкування файлів низького рівня і прикладань операційна система використовує повідомлення (message). Це повідомлення про деяку подію, що мала місце, Windows надсилає за адресою прикладання. Повідомлення являє собою деякий запис, який Windows передає прикладанню. Цей запис містить відомості про те, що сталося (в нашому випадку повідомлення про прийняту порцію даних), а також додаткову інформацію, що залежить від типу події (наприклад, номер буфера даних і його розмір). Повідомлення повинно мати ідентифікатор в діапазоні від WM_USER+100 до $7FFFF (цей діапазон Windows резервує для повідомлень користувачів). Ідентифікатор повідомлення стає відомим операційній системі при роботі прикладання.
Функції сеансового рівня даної корпоративної мережі
виконуються процедурами і функціями бібліотеки “knet.dll”.
На початку підпрограми здійснюється установка всіх прапорців і лічильників в стан, необхідний для правильного відпрацювання канального рівня для передачі і прийому інформації для сеансового рівня.
Після цього треба перевірити активність фізичного рівня, тобто наявність встановленого модемами каналу зв’язку. Якщо канал не встановлений, немає можливості передавати і приймати інформацію, і підпрограма другого рівня закінчує роботу. Якщо ж канал встановлений, може бути два варіанти. Якщо підпрограма сеансового рівня викликала підпрограму канального рівня для прийому інформації, про що свідчить неактивний стан прапорця наявності інформації для передачі FRG52. В цьому випадку канальний рівень кінцевого пункту повинен включити тайм-аут Т22 очікування прийому команди від ЦВ і чекати команду.
Якщо підпрограма сеансового рівня викликала підпрограму канального рівня для передачі інформації, про що свідчить активний стан прапорця наявності інформації для передачі FRG52. В цьому випадку канальний рівень кінцевого пункту повинен передати канальному рівню центрального пункту команду „запит на захват каналу” (ENQ). Після передачі команди ENQ запускається тайм-аут Т21 очікування відповіді від центрального пункту. Якщо за час Т21 не надійшла позитивна відповідь (АСК) на нашу вимогу ENQ, виставляємо в активний стан прапорець помилки FО25 і завершуємо роботі канального рівня. Якщо отримана згода (АСК) від канального рівня центрального вузла на прийом інформації, приступаємо до передачі. Для цього ставимо в активний стан прапорець FA2, в неактивний стан прапорець „кінець передачі” (FETX), запам’ятовуємо кількість байт інформації для передачі в лічильнику SBPD і викликаємо підпрограму формування блоку для передачі FormBlock.
Сформований блок передається за допомогою підпрограми PdBlock. Оскільки в мережі використовується вирішуючий зворотній зв’язок з очікуванням, то під час передачі блоку або відразу після передачі всього блоку від канального рівня центрального вузла може бути отримано DLE, що означає порушення порядку прийому блоків згідно номерів блоків, тобто втрату блоку. В цьому випадку передачу всього кадру треба розпочинати спочатку. Може надійти від канального рівня центрального вузла повідомлення про те, що блок був прийнятий з помилкою „заперечення правильності прийому блоку” (NAK). Це може бути у двох випадках - неправильний формат блоку або неправильна контрольна сума блоку. В такому випадку враховується спроба передачі блоку в лічильнику SSPDB, який при формування блоку був встановлений в 3, і якщо лічильник спроб ще не дорівнює 0, виконується передача цього блоку ще раз. Якщо за три спроби передачі цього блоку позитивний результат не отриманий, виставляється в активний стан прапорець помилки для сеансового рівня, і підпрограма канального рівня закінчує роботу. Ще може надійти від канального рівня центрального вузла повідомлення про те, що блок був прийнятий без помилки - „підтвердження правильності прийому блоку” (АСК). В такому випадку якщо не всі блоки кадру передані, про що свідчить неактивний стан прапорця FETX, то переходимо до формування і передачі наступного блоку. Якщо передача закінчена, виставляється в неактивний стан прапорець наявності інформації для передачі FRG52, передається канальному рівню центрального вузла повідомлення „кінець передачі” (ЕОТ), ставиться в неактивний стан прапорець FA2, включається тайм-аут Т22 очікування прийому від ЦВ і очікуємо команду від ЦВ.
Якщо за час Т22 від ЦВ не надходить команда „запит на захват каналу” (ENQ), підпрограма канального рівня закінчує роботу.
У випадку надходження команди ENQ треба надіслати позитивну відповідь (АСК), тобто згоду на прийом, встановити в активний стан прапорець FA2, приготувати лічильник прийнятої інформації SRG25 (записати в нього 0), встановити в неактивний стан прапорець FRG25 наявності прийнятої канальним рівнем для сеансового рівня інформації і встановити в неактивний стан прапорець FETX, який означає, що прийнятий останній блок кадру. Також для запобігання зациклювання програми необхідно запустити тайм-аут Т21 очікування знаку від канального рівня ЦВ.
Канальний рівень ЦВ, після прийому від КВ АСК буде надсилати інформаційні блоки. Ознакою початку інформаційного блоку є перший байт блоку STX („початок тексту”). Якщо за час Т21 не отримано STX, треба встановити в неактивний стан прапорець FA2 і вийти з підпрограми другого рівня. Якщо STX є, викликаємо підпрограму прийому блоку PmBlock. Ця підпрограма перевіряє правильність блоку, ознаку кінця кадру і виставляє відповідні прапорці. При неправильному форматі блоку або неправильній контрольній сумі блоку (активний прапорець FNAK) треба передати канальному рівню ЦВ „заперечення правильності прийому блоку” (NAK) і перейти до повторного прийому блоку.
При неправильному номері блоку (активний прапорець FDLE) треба передати канальному рівню ЦВ „передати кадр спочатку” (DLE) і перейти на початок прийому кадру.
При правильному форматі блоку і номера блоку, а також правильній контрольній сумі блоку (активний прапорець FACK) треба передати канальному рівню ЦВ „підтвердження правильності прийому блоку” (АСК) і перевірити, чи активний прапорець FETX („кінець тексту”). Якщо блок не останній, приступаємо до прийому наступного блоку.
Якщо був прийнятий останній блок кадру для сеансового рівня,
за час Т21 повинна надійти команда ЕОТ. В цьому випадку встановлюються
прапорці: FA2 в неактивний стан, FRG25 в активний стан, передається ЕОТ і
підпрограма канального рівня закінчує роботу.
На рисунку 4.1 представлений алгоритм канального рівня кінцевого вузла інформаційної мережі.
На початку підпрограми здійснюється установка всіх прапорців і лічильників в стан, необхідний для правильного відпрацювання канального рівня для передачі і прийому інформації для сеансового рівня.
Після цього треба перевірити активність фізичного рівня, тобто наявність встановленого модемами каналу зв’язку. Якщо канал не встановлений, немає можливості передавати і приймати інформацію, і підпрограма другого рівня закінчує роботу. Якщо ж канал встановлений, може бути два варіанти: Підпрограма сеансового рівня викликала підпрограму канального рівня для передачі інформації, про що свідчить активний стан прапорця наявності інформації для передачі FRG52. В цьому випадку канальний рівень кінцевого пункту повинен передати канальному рівню центрального пункту команду „запит на захват каналу” (ENQ). Після передачі команди ENQ запускається тайм-аут Т21 очікування відповіді від центрального пункту. Якщо за час Т21 не надійшла позитивна відповідь (АСК) на нашу вимогу ENQ, виставляємо в активний стан прапорець помилки FО25 і завершуємо роботі канального рівня. Якщо отримана згода (АСК) від канального рівня центрального вузла на прийом інформації, приступаємо до передачі. Для цього ставимо в активний стан прапорець FA2, в неактивний стан прапорець „кінець передачі” (FETX), встановлюємо покажчик чергового байту для передачі в регістрі RG52 (j) та номер блоку для передачі (NBlockPd) в 0, і викликаємо підпрограму формування блоку для передачі FormBlock.
Сформований блок передається за допомогою підпрограми PdBlock. Оскільки в мережі використовується вирішуючий зворотній зв’язок з очікуванням, то під час передачі блоку або відразу після передачі всього блоку від канального рівня центрального вузла може бути отримано DLE, що означає порушення порядку прийому блоків згідно номерів блоків, тобто втрату блоку. В цьому випадку передачу всього кадру треба розпочинати спочатку. Може надійти від канального рівня центрального вузла повідомлення про те, що блок був прийнятий з помилкою „заперечення правильності прийому блоку” (NAK).
Це може бути у двох випадках - неправильний формат блоку або неправильна контрольна сума блоку. В такому випадку враховується спроба передачі блоку в лічильнику SSPDB, який при формування блоку був встановлений в 3, і якщо лічильник спроб ще не дорівнює 0, виконується передача цього блоку ще раз. Якщо за три спроби передачі цього блоку позитивний результат не отриманий, виставляється в активний стан прапорець помилки для сеансового рівня, і підпрограма канального рівня закінчує роботу. Ще може надійти від канального рівня центрального вузла повідомлення про те, що блок був прийнятий без помилки - „підтвердження правильності прийому блоку” (АСК). В такому випадку якщо не всі блоки кадру передані, про що свідчить неактивний стан прапорця FETX, то переходимо до формування і передачі наступного блоку. Якщо передача закінчена, виставляється в неактивний стан прапорець наявності інформації для передачі FRG52, передається канальному рівню центрального вузла повідомлення „кінець передачі” (ЕОТ), ставиться в неактивний стан прапорець FA2, включається тайм-аут Т22 очікування прийому від ЦВ і очікуємо команду від ЦВ.
) Підпрограма сеансового рівня викликала підпрограму канального рівня для прийому інформації, про що свідчить неактивний стан прапорця наявності інформації для передачі FRG52. В цьому випадку канальний рівень кінцевого пункту повинен включити тайм-аут Т22 очікування прийому команди від ЦВ і чекати команду.
Якщо за час Т22 від ЦВ не надходить команда „запит на захват каналу” (ENQ), підпрограма канального рівня закінчує роботу.
У випадку надходження команди ENQ треба надіслати позитивну відповідь (АСК), тобто згоду на прийом, встановити в активний стан прапорець FA2, приготувати лічильник прийнятої інформації SRG25 (записати в нього 0), встановити в неактивний стан прапорець FRG25 наявності прийнятої канальним рівнем для сеансового рівня інформації і встановити в неактивний стан прапорець FETX, який означає, що прийнятий останній блок кадру. Також для запобігання зациклювання програми необхідно запустити тайм-аут Т21 очікування знаку від канального рівня ЦВ.
Канальний рівень ЦВ, після прийому від КВ АСК буде надсилати інформаційні блоки. Ознакою початку інформаційного блоку є перший байт блоку STX („початок тексту”). Якщо за час Т21 не отримано STX, треба встановити в неактивний стан прапорець FA2 і вийти з підпрограми другого рівня. Якщо STX є, викликаємо підпрограму прийома блоку PmBlock. Ця підпрограма перевіряє правильність блоку, ознаку кінця кадру і виставляє відповідні прапорці. При неправильному форматі блоку або неправильній контрольній сумі блоку (активний прапорець FNAK) треба передати канальному рівню ЦВ „заперечення правильності прийому блоку” (NAK) і перейти до повторного прийому блоку.