Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.11.2014, 12:05
Jury_yamal Jury_yamal вне форума
Прохожий
 
Регистрация: 04.11.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию описать класс ModbusRTU без реализации

Здравствуйте.
Подтолкните в правильном направлении для решения следующей задачи:
Есть некоторое устройство общающееся с PC посредством com-порта. Протокол у этого устройства ModbusRTU.
Написал тестовую программу обмена с этим устройством без использования классов. Данные принимаю и отправляю в виде массива Byte. Все работает (т.е. значения из регистров я получаю и вывожу на форму).
Теперь встала задача оформить это все в виде класса. Почитал книги по ООП , но до конца так и не понял как это реализовать. Из всего протокола Modbus RTU меня интересует пока только 2 функции это- 3 ( Read holding registers) и 6 (Preset Holding registers). Вот начало как я это вижу.
Родитель
Код:
TModbus =class (TObject)
 private
 FID:Byte;             // адрес устройства   используется при запросе и ответе
 FCodeFunction:Byte;   // номер функции используется при запросе и ответе
 FRegistr: Byte;       // адрес регистра используется при запросе
 FSizeDataField:Byte   // Размер поля данных используется при запросе и ответе
 FCRC: Word;           // Контрольная сумма используется при запросе и ответе
Дальше определить 2 наследника это класса TWriteModbusRTU и TReadModbusRTU и уже в них производить необходимые действия по заполнению массива байтов для чтения и запроса из, в ком порт. Что еще нужно учесть в базовом классе что будет общим для всех классов наследников? Может кто-то помочь кусочком кода без реализации класса TWriteModbusRTU?
Сейчас без класса обмен происходит так: для записи из edit_ов берется значение ID,функции (3 или 6), адрес регистра, размер поля и загоняется в глобальные переменные, а потом в процедуре собирается в массив array of byte к которому прикручиваются 2 байта CRC и отправляется в порт. Далее в отдельном потоке при приходе данных в буфер проверяется CRC пакета если рассчитанное значение совпадает с значением в пакете то передается в главный модуль. Далее они анализируется на ошибку следующим образом: проверяется адрес устройства, проверяется код функции в ответе если они совпадают с отправленными то пакет передается по ссылке в процедуру определения из какого регистра были получены данные ( сравнение по номеру запроса) эта процедура отправляет пакет еще в одну процедуру где происходит извлечения из пакета значения регистра, его расшифровка и выводится на форму в edit. Собственно почему и хочу переделать под класс из за наличия кучи глобальных переменных .
Заранее благодарен всем кто откликнется. С уважением Юрий.

Последний раз редактировалось Jury_yamal, 21.11.2014 в 14:00.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025