сть редагування з кроком 10;
Вид оповіщення - вікно буде мати вигляд списку в якому будуть міститися такі значення - Ні дзвінка ні SMS, SMS, дзвінок, SMS і дзвінок. Якщо вибрано значення дзвінок то введення інформації в вікно повідомлення буде неможливим (заблокований);
Активація АЦП - heckbox для роботи з брелками і кнопками, коли при натисканні певної кнопки активується необхідна уставка. Після вибору цього гаджета стають активними вікна з списком, що випадає для вибору входів - для активації і деактивації та тимчасової витримки в діапазоні від 1 до 60 сек;
Виходи - вікно з списком, що випадає містить програмні виходи з виход1 по виход10.
Вкладка входи і виходи головного вікна містить програмні входи і виходи які можна конфігурувати на певні апаратні входи і виходи GSM сигналізації.
Остаточний варіант додатка зображений на Рис Д.1.3, п.1.4.
4.2 Створення бібліотеки з посилальних типів містять поля даних
Для створення бібліотеки при розробці проекту використовуючи шаблон Class Library (бібліотека класів), створимо збірку з розширенням dll яка буде зберігати дані в певних нами полях форми.
Ustavki
{
............
[Serializable] class Kanal: Ienumerable
{Stroka [] str=new Stroka [4]; Kanal ()
{(int I=0; I lt; 4; ++ i) [i]=new Stroka ();
} Ienumerator GetEnumerator ()
{(int I=0; I lt; 4; ++ i) return str [i];
}
[Serializable] class GlavnOkno
{string [] nomer_tel=new string [30]; string [] famil=new string [30]; int [] nom_kanal=new int [30]; bool [,] vhod_usl=new bool [10, 8]; int [,] vhod_napr=new int [10, 8]; bool [,] vihod=new bool [10, 8]; bool [,] vihod_inv=new bool [10, 8];
}
}
Дана бібліотека містить основний тип канал Kanal реалізує інтерфейс Ienumerable. При створенні головного вікна викликається конструктор даного класу який створює чотири об'єкти-рядки Stroka. Клас Stroka містить всі поля дочірнього вікна - рівні напруги АЦП, витримки часу, різні умови і властивості для доступу до полів. При створенні об'єктів класу Stroka її поля инициализируются початковими значеннями які виводяться в дочірньому вікні. Реалізувавши інтерфейс Ienumerable методом GetEnumerator () для об'єктів типу канал ми отримуємо доступ до будь-якому рядку з 16 каналів використовуючи індексатор. При створенні головного вікна ми створюємо масив об'єктів Kanal, таким чином кожне новостворене вікно містить свої 16 каналів. Крім того кожне головне вікно містить об'єкт класу GlavnOkno - містить відкриті поля для номерів телефону, вхід, вихід та іншим допоміжним полях. Всі типи позначені аттрібутом Serializable що дає можливість зберігати всі поля в бінарному файлі.
.3 Основна збірка проекту
Основна збірка проекту містить конструктор форми основного вікна і в основний проект додано посилання на файл dll описаний в 5.2 Даний конструктор запускається при створенні головного вікна. Також у ній содержут функції по створенню та заповнення початковими значеннями дочірніх вікон каналів, допоміжні методи для роботи з елементами управління checkbox, елементами datagridview textbox, combobox, button.
Основними методами головного вікна є метод який при натисканні на кнопу (або через вибір пункту меню) зберігає дані у файловий потік використовуючи сериализацию, метод відкриття збереженого бінарного файлу, метод запису даних у СOM порт.
При роботі з COM портом використовується клас SerialPort простору імен System. IO. Port. Технологія запису в порт наступна:
1) Створюємо символьний потік працює з unicod символами у файлі Dan. txtf=new StreamWriter ( Dan. txt );
2) Викликаємо метод WriteDanToFile () в якому записуємо всі дані в налаштованих каналів підрядник (записуємо в файл Dan. txt): Іванов
......
3) У циклі порядково зчитуємо кожен рядок, конвертуємо при необхідності значення в кодування ASC2 і відправляємо дані в порт
while ((s=f. ReadLine ())!=null)
{[] bt=new byte [s. Length]; ((s [0]!= Laquo; H ) amp; amp; (s [0]!= Laquo; M ))
{(int i=0; i lt; s. Length; i ++) [i]=Convert. ToByte (s [i]);
}=ascii. GetBytes (s) ;. Write (bt, 0, bt. Length);
}