Показать сообщение отдельно
  #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. Собственно почему и хочу переделать под класс из за наличия кучи глобальных переменных .
Заранее благодарен всем кто откликнется. С уважением Юрий.
Ответить с цитированием