
- •Учебный центр информационных технологий “информатика” выпускная квалификационная работа по куррсу профессиональной переподготовки
- •Введение
- •Задание на разрабатываемое устройство
- •Требования к охранным, пожарным шлейфам
- •Требования к входным и выходным исполнительным органам
- •Требования к конфигурированию и настройке устройства
- •Электронные компоненты печатной платы
- •Технические характеристики и параметры основных компонентов
- •Применяемые схемотехнические решения
- •Программное обеспечение микроконтроллера
- •Основная структура проекта
- •Задачи операционной системы реального времени.
- •Взаимодействие задач и прерываний.
- •Функции обработчиков прерываний
- •Rtos задачи проекта
- •Передача параметров настройки по usb
- •Программное обеспечение windows form c#
- •Определение общей структуры приложения
- •Создание библиотеки из ссылочных типов содержащие поля данных
- •Основная сборка проекта
- •Заключение
- •Список литературы
- •Приложение 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 что дает возможность сохранять все поля в бинарном файле.
Основная сборка проекта
Основная сборка проекта содержит конструктор формы основного окна и в основной проект добавлена ссылка на файл dll описанный в 5.2 . Данный конструктор запускается при создании главного окна. Также в ней содержутся функции по созданию и заполнению начальными значениями дочерних окон каналов, вспомогательные методы для работы с элементами управления checkbox, элементами datagridview textbox, combobox, button.
Основными методами главного окна является метод который при нажатии на кнопу (или через выбор пункта меню) сохраняет данные в файловый поток используя сериализацию, метод открытия сохраненного бинарного файла, метод записи данных в СOM порт.
При работе с COM портом используется класс SerialPort пространства имен System.IO.Port. Технология записи в порт следующая :
Создаем символьный поток работающий с unicod символами в файле Dan.txt
StreamWriter f = new StreamWriter("Dan.txt");
Вызываем метод WriteDanToFile() в котором записываем все данные в настроенных каналов построчно (записываем в файл Dan.txt) :
N79529091812
HИванов
S03080102
……
В цикле построчно считываем каждую строку, конвертируем при необходимости значения в кодировку 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 например символом * , это должно учитываться при записи данных структуры в микроконтроллере.