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

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» будет обрабатываться в соответствии с указанным кодом параметра в приложении А. Затем информация, понятная пользователю будет выведена на экран монитора.