4. Алгоритми функціонування серверу
При старті серверу одразу ж починається прослуховування вхідних підключень і відбувається відкриття бази даних або якщо вона не існує, то створюється пуста база. Якщо хтось підключився – сервер чекає на перший від нього пакет який ідентифікує тип клієнта (КОМ або звичайний клієнт). Отримавши цю інформацію сервер відзначає це у внутрішньої структурі, що асоційована з поточним клієнтом і далі чекає на запити або дані від клієнтів або КОМ. Також сервер контролює час останнього запиту від клієнта. Якщо клієнт на протязі достатньо довгого часу нічого не відправляв, то клієнт закривається. Спочатку сервер отримує тільки заголовок і тільки потім, проаналізовавши його, отримує дані пакета, якщо потрібно. Отримавши пакет сервер, виходячі із коду повідомлення, що записаний у заголовку, робить відповідні дії.
Сервер робить наступне:
- якщо прийшов запит на синхронизацію, то відправляється поточний час сервера;
- якщо прийшли дані з КОМ, то сервер виділяє дані з пакету та записує їх у файл;
- якщо пришов запит від клієнта, то сервер виконує пошук відповідних структур, та відсилає спочатку їхню кількість, а потім самі пакети.
Алгоритм роботи сервера зображено на рисунку 3.
Рисунок 3 – Алгоритм роботи серверу
Рисунок 3 – Алгоритм роботи серверу (продовження)
Рисунок 3 – Алгоритм роботи серверу (продовження)
Сервер виконує свої функції паралельно. Він одночасно очікує нових підключень, обробляє отримані дані, відсилає базу даних, контролює таймаути. З моменту старту сервер працює повністю автономно і не потребує втручання зі сторони користувача. База даних сервера складається з двох фалів які розташовано у тієї ж директорії, що і сервер.
5. Алгоритми функціонування робочих станцій
Для того щоб отримати інформацію про хід технологічного процесу використовується клієнт. Клієнт – це програмне забезпечення, яке встановлюється на робочих станціях і забезпечую підключення до сервера і отримання даних з його бази даних. Клієнт працює виходячи з дій користувача. Спочатку треба ввести адрес серверу та підключитися до нього. При цьому автоматично буде виконано синхронізацію. При відправці пакету на синхронізацію, клієнт повідомить сервер про те, що це робоча станція.
Після того як підключення встановлене клієнт чекає на подальші запити користувача. Користувач повинен вибрати тип даних, який він бажає отримати, початковий час та кінцевий час. Після цього сервер надішле йому відповідні структури, які відобразяться на екрані користувача. Треба зазначити, що клієнт може відключитись від серверу, ввести адресу іншого серверу та підключитись до нього. Загальний алгоритм роботи клієнта зображено на рисунунку 4.1.
Рисунок 4 – Алгоритм роботи клієнта
6. Програмне забезпечення КОМ
Всього в системі має бути чотири КОМ, кожна з яких працює незалежно від інших. Задача КОМ – збирати інформацію з датчиків про хід технологічного процесу і періодично посилати їх серверу. Датчики виконані у вигляді структури змінних, кожен елемент якої представляє показчик цього датчику. При справжньому технологічному процесі ці датчики приймають якісь значення, у програмному забезпеченні КОМ необхідно імітувати такий процес. Але для можливості аналізу відправника даних, кожен КОМ відправляє фіксоване значення. Інтерфейс програмного забезпечення КОМ зображено на рисунку 5.1.
Рисунок 5.1 – Інтерфейс програмного забезпечення КОМ
Після запуску програми користувач повинен вибрати тип КОМ, адресу та порт серверу. Далі необхідно натиснути кнопку. Після цього кнопка стане неактивною. Програма не буде посилати ніяких повідомлень користувачу. Тому при введені невірної адреси програмне забезпечення буде постійно намагатися приєднатися до серверу. Для виправлення цієї ситуації необхідно перезапустити КОМ.
Програмне забезпечення КОМ виконане у середовищі Borland C++ Builder6. Використовувались блокуючі сокети.
Після ініціалізації даних, створення сокету програма входить у цикл, який завершується лише тоді, коли користувач закриє програмне забезпечення. У цьому циклі у разі будь-якої помилки при роботі з сокетами, сокет КОМ закриється та буде намагатися підключитися до серверу.
if (bConnect)
{
shutdown(sUvm, SD_BOTH);
closesocket(sUvm);
sUvm = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (!(connect(sUvm, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR))
{
bConnect = 0;
bTimeSync = 1;
}
}//if
Одразу після підключення КОМ надішле запит на синхронізацію часу.
if ((!bConnect) && (bTimeSync))
{
nLeft = req.lengthPack;
idx = 0;
while(nLeft > 0)
{
ret = send(sUvm, ((char *)&req) + idx, nLeft, 0);
if (ret == SOCKET_ERROR)
{
bConnect = 1;
break;
}
nLeft -= ret;
idx += ret;
}
}//if
Та встновить цей час у системі.
if ((!bConnect) && (bTimeSync))
{
nLeft = 4;
idx = 0;
while(nLeft > 0)
{
ret = recv(sUvm, ((char *)&lastUpdateTime)+idx, nLeft, 0);
if ((ret == SOCKET_ERROR)||(ret == 0))
{
bConnect = 1;
break;
}
nLeft -= ret;
idx += ret;
}
bTimeSync = 0;
// установка времени в системе
//stime(&lastUpdateTime);
}//if
Також буде посилатися запит на синхронізацію через 10 хвилин від часу останнього запиту.
if (!bConnect)
{
if ((time (NULL) - lastUpdateTime) > 600)
bTimeSync = 1;
}//if
КОМ відсилають дані датчиків по контрольних точках. Тому час відправки КОМ однієї групи буде однаковим, навіть якщо один з них був запущеним пізніше, але в рамках однієї контрольної точки часу.
if (!bConnect)
{
curTime = time(NULL);
if (lastSendTime == curTime)
timeToSleep = period * 1000;
else
timeToSleep = (period-(curTime % period))*1000;
WaitForSingleObject(hEvent, timeToSleep);
}
Після «прокинення» програмне забезпечення відішле поточний час та дані.
if (!bConnect)
{
if (iUVM < 3)
{
//считывание времени и установка параметров
curTime = time(NULL);
pack1.time = curTime;
nLeft = sizeof(pack1);
}
else
{
//считывание датчиков
//считывание времени и установка параметров
curTime = time(NULL);
pack2.time = curTime;
nLeft = sizeof(pack2);
}
lastSendTime = time(NULL);
idx = 0;
while(nLeft > 0)
{
ret = send(sUvm, pPack+idx, nLeft, 0);
if (ret == SOCKET_ERROR)
{
bConnect = 1;
break;
}
nLeft -= ret;
idx += ret;
}
}//if
Програма буде працювати так постійно, доки користувач не закриє форму програми. Ця подія перехопиться і цикл завершиться, також закриються сокети та поток програми.
... є інтереси відповідного бізнесу. Прецеденти є, але про суспільну користь говорити можна не завжди. Переглянувши державні бюджети України чи бюджети окремих міст, можна знайти факти підтримки суспільно корисних громадських організацій. Велика частина з них стала предметом розслідування КРУ, податкової міліції, чи депутатських комісій. Якщо влада таким чином не хоче ощасливити когось із своїх родич ...
... технологи НДІ постійно працюють з технологами КБ (більш детально питання розробки будуть розглянуті нижче). Технологи КБ повинні знати основи економіки даного виробництва і ціноутворення вироби для того, щоб розроблювальний технологічний процес дозволяв випускати продукцію більш низькою собівартістю, ніж аналоги. Розроблена технологічна документація з КБ надходить до служби головного технолога, ...
... ії; - існуючий підрозділ імпортування італійських меблів буде забезпечувати поставку меблів із Італії за напрацьованою схемою; РОЗДІЛ 3. РОЗРОБКА ТА АНАЛІЗ ЕФЕКТИВНОСТІ МАРКЕТИНГОВОЇ СТРАТЕГІЇ КОНЦЕНТРАЦІЇ ТОВ „КЛАСС-ЛАЙН” В СЕГМЕНТІ ПОСЛУГ „ДІЗАЙН ІНТЕР’ЄРІВ» 3.1 Стратегічні цілі проектного комплексу концентрованого маркетингу ТОВ „Класс-Лайн” У світовій практиці відомо чотири види ...
... моментів, якому потрібно знати при створенні нової інформаційної систем - те, що цей процес є одним видом запланованої організаційної зміни. 2. Перепроектування бізнесів-процесів Нові інформаційні системи можуть бути могутніми інструментами для організаційних змін. Вони не тільки допомагають раціоналізувати організаційні процедури і документообіг, але вони можуть фактично використовуватися для ...
0 комментариев