![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте.
Подтолкните в правильном направлении для решения следующей задачи: Есть некоторое устройство общающееся с 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; // Контрольная сумма используется при запросе и ответе Сейчас без класса обмен происходит так: для записи из edit_ов берется значение ID,функции (3 или 6), адрес регистра, размер поля и загоняется в глобальные переменные, а потом в процедуре собирается в массив array of byte к которому прикручиваются 2 байта CRC и отправляется в порт. Далее в отдельном потоке при приходе данных в буфер проверяется CRC пакета если рассчитанное значение совпадает с значением в пакете то передается в главный модуль. Далее они анализируется на ошибку следующим образом: проверяется адрес устройства, проверяется код функции в ответе если они совпадают с отправленными то пакет передается по ссылке в процедуру определения из какого регистра были получены данные ( сравнение по номеру запроса) эта процедура отправляет пакет еще в одну процедуру где происходит извлечения из пакета значения регистра, его расшифровка и выводится на форму в edit. Собственно почему и хочу переделать под класс из за наличия кучи глобальных переменных . Заранее благодарен всем кто откликнется. С уважением Юрий. Последний раз редактировалось Jury_yamal, 21.11.2014 в 14:00. |