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

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