Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дипломн.проект.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
813.34 Кб
Скачать
    1. Создание библиотеки из ссылочных типов содержащие поля данных

Для создания библиотеки при разработке проекта используя шаблон Class Library (библиотека классов), создадим сборку с расширением dll которая будет хранить данные в определенных нами полях формы.

Namespace Ustavki

{

…………

[Serializable]

public class Kanal : Ienumerable

{

public Stroka[] str = new Stroka[4];

public Kanal()

{

for (int I = 0; I < 4; ++i)

str[i] = new Stroka();

}

public Ienumerator GetEnumerator()

{

for (int I = 0; I < 4; ++i)

yield return str[i];

}

[Serializable]

public class GlavnOkno

{

public string[] nomer_tel=new string [30];

public string[] famil=new string[30];

public int[] nom_kanal=new int[30];

public bool[,] vhod_usl = new bool[10, 8];

public int[,] vhod_napr = new int[10, 8];

public bool[,] vihod = new bool[10, 8];

public bool[,] vihod_inv = new bool[10, 8];

}

}

Данная библиотека содержит основной тип канал Kanal реализующий интерфейс Ienumerable . При создании главного окна вызывается конструктор данного класса который создает четыре объекта-строки Stroka. Класс Stroka содержит все поля дочернего окна –уровни напряжения АЦП, выдержки времени, различные условия и свойства для доступа к полям. При создании объектов класса Stroka ее поля инициализируются начальными значениями которые выводятся в дочернем окне. Реализовав интерфейс Ienumerable методом GetEnumerator() для объектов типа канал мы получаем доступ к любой строке из 16 каналов используя индексатор. При создании главного окна мы создаем массив объектов Kanal , таким образом каждое вновь созданное окно содержит свои 16 каналов. Кроме того каждое главное окно содержит объект класса GlavnOkno –содержащее открытые поля для номеров телефона, входам , выходам и другим вспомогательным полям. Все типы помечены аттрибутом Serializable что дает возможность сохранять все поля в бинарном файле.

    1. Основная сборка проекта

Основная сборка проекта содержит конструктор формы основного окна и в основной проект добавлена ссылка на файл dll описанный в 5.2 . Данный конструктор запускается при создании главного окна. Также в ней содержутся функции по созданию и заполнению начальными значениями дочерних окон каналов, вспомогательные методы для работы с элементами управления checkbox, элементами datagridview textbox, combobox, button.

Основными методами главного окна является метод который при нажатии на кнопу (или через выбор пункта меню) сохраняет данные в файловый поток используя сериализацию, метод открытия сохраненного бинарного файла, метод записи данных в СOM порт.

При работе с COM портом используется класс SerialPort пространства имен System.IO.Port. Технология записи в порт следующая :

  1. Создаем символьный поток работающий с unicod символами в файле Dan.txt

StreamWriter f = new StreamWriter("Dan.txt");

  1. Вызываем метод WriteDanToFile() в котором записываем все данные в настроенных каналов построчно (записываем в файл Dan.txt) :

N79529091812

HИванов

S03080102

……

  1. В цикле построчно считываем каждую строку, конвертируем при необходимости значения в кодировку ASC2 и отправляем данные в порт

while ((s = f.ReadLine()) != null)

{

byte[] bt=new byte[s.Length];

if ((s[0] != 'H') && (s[0] != 'M'))

{

for (int i = 0; i < s.Length; i++)

bt[i] = Convert.ToByte(s[i]);

}

else

bt = ascii.GetBytes(s);

port.Write(bt, 0, bt.Length);

}

Основной недостаток данного метода заключается в том, что при необходимости записи числа 10 в строку в формате ACS2 он кодируется как окончание строки и при этом все данные после цифры 10 начинаются с новой строки, что вызывает сбой при записи в микроконтроллер. Выход из этой ситуации кодировать число 10 например символом * , это должно учитываться при записи данных структуры в микроконтроллере.