- •Содержание
- •Перечень условных обозначений, символов и терминов
- •Введение
- •1 Анализ предметной области
- •1.1 Структура предприятия
- •1.2 Информационная система предприятия
- •1.3 Постановка задачи
- •2 Варианты возможных способов учёта и контроля электрической энергии
- •2.1 Электронный программируемый прибор для дистанционного учёта электрической энергии типа «ets-m»
- •2.2 Сумматор электронный многофункциональный «сэм-1»
- •2.3 Сумматор электронный многофункциональный для учета электроэнергии «сэм-2»
- •2.4 Счётчик статический активной энергии однофазный «Гран-Электро сс-101»
- •2.5 Характеристика аскуэ
- •2.6 Структурная схема аскуэ
- •2.7 Общие требования к системе аскуэ
- •2.8 Обзор существующих аскуэ
- •3 Создание программного модуля
- •3.1 Выбор языка и среды разработки
- •3.2 Протокол обмена данных со счётчиком
- •3.3 Структура программного модуля обработки данных счётчиков электроэнергии
- •3.4 Последовательность выполнения запроса модуля обработки данных счётчика электроэнергии
- •3.5 Чтение, модификация и обнуление параметров
- •3.6 Программная реализация
- •3.7 Циклический избыточный код (crc)
- •3.8 Поиск счётчиков при использовании расширенной адресации
- •3.9 Инструкция пользователя
- •4 Технико-экономическое обоснование разработки программного модуля обработки данных счётчиков электроэнергии
- •4.1 Характеристика программного модуля
- •4.2 Оценка трудоемкости и сроков разработки
- •4.3 Расчет затрат на разработку и отпускной цены программного продукта
- •4.4 Расчет затрат по использованию по
- •Заключение
- •Список использованных источников
- •Приложение а (обязательное) Кодировка параметров
- •Приложение б (обязательное) Кодировка поля «результат» ответа
- •Приложение в (обязательное) Циклический избыточный код «crc»
- •Приложение г (обязательное) Алгоритм поиска счётчиков при использовании расширенной адресации
- •Приложение д (обязательное) Параметры группы энергия
- •Приложение е (обязательное) Параметры группы мощность
3.6 Программная реализация
Приведем программную реализацию модуля обработки данных счётчика электроэнергии. Для разработки данного дипломного проекта была использована интегрированная среда разработки Eclipse MARS.1.
Программный модуль обработки данных счётчика электроэнергии позволит взаимодействовать с самим счётчиком через преобразователь последовательного СОМ-порта «RS-485» посредством отправки и получения соответствующего количества пакетов байт данных, содержащих информацию о параметрах, которые пользователь хочет получить. Для получения констант был разработан класс «sendRequestContstants», в который передаётся один из параметров, указанных в приложении А. Класс открывает, выбранный пользователем СОМ-порт, устанавливает параметры канала связи, то есть задаёт основные параметры протокола «UART». Затем формирует пакеты отправляемых данных. Устанавливает маску и список событий, по которым будет происходить чтение данных в буфер порта. Приведём основную часть программного кода описанного класса:
serialPort = new SerialPort("COM5");
serialPort.openPort();
serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setEventsMask(SerialPort.MASK_RXCHAR);
serialPort.writeByte(address); // address
serialPort.writeByte(function); // function
serialPort.writeByte(paramCode); // parameter's code
serialPort.writeByte(smeshenie); // smeshenie
serialPort.writeByte(tarif); // tarif
serialPort.writeByte(utochnenie); // utochnenie
serialPort.writeBytes(crcRequest); // CRC
serialPort.addEventListener(new EventListener());
Передаём экземпляр класса EventListener порту, где будет обрабатываться события чтения данных. Для последующего чтения пакетов данных, присылаемых прибором, нудно установить искусственную задержку в программе:
try {
Thread.sleep(2400);
} catch (InterruptedException e) {
e.printStackTrace();
}
Данная искусственная задержка необходима, т.к. после отправки программой пакетов байт данных, прибору необходимо некоторое количество времени для того, чтобы обработать полученные пакеты и сформировать ответное сообщение. В самых сложных запросах время обработки данных счётчиком может достигать 2,3 с. Приведём код класса слушателя, который будет срабатывать по появлению данных в СОМ-порте:
private static class EventListener implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
try {
byte[] rByte = serialPort.readBytes(event.getEventValue());
data[amountBytes++] = rByte[0];
} catch (SerialPortException ex) {
ex.printStackTrace();
}
}
}
}
Класс читает по одному байту и записывает каждый в глобальную переменную «data» до тех пор, пока в порт перестанут поступать данные. В дальнейшем переменная «data» будет обрабатываться в соответствии с указанным кодом параметра в приложении А. Затем информация, понятная пользователю будет выведена на экран монитора.
