KRConnector.pas
Константы
- CE_QUEUE_MAX_ITEMS – размер входящей и исходящей очередей
- CE_ERRORS_COUNT – количество ошибок кеннектора
- ceOK – нет ошибок
- ceQueueOverflowed – очередь переполнена
- ceNotConnection – не подключен
- ceDataNotSended – не удалось отправить пакет или часть пакета
- ceNoResponse – ответ не получен
- ceRequestTimeout – превышено время на отправку данных
- ceResponseTimeout – превышено время на получение ответа
- ceNotActive – коннектор не включен
- CONNECTOR_ERRORS_MSG – список сообщение об ошибках коннектора
Типы данных
- TKRConnectorError – ошибка коннектора (Integer)
- TKRConnectorType – тип коннектора
- ctCOMPort – подключение через COM порт
- ctTCPClient – подключение через TCP/IP (сетевое подключение)
- ctBluetooth – подключение через Bluetooth
- TKRConnectorStat – состояние коннектора
- cstNotActive – выключен (свойство Active равно false)
- cstDisconnected – соединение не установлено
- cstConnected – подключен
- cstConnecting – устанавливается соединение
- cstWaitReconnecting – ожидается время до следующей попытки подключения
- PKRConnectorPack –
- TKRConnectorStatEv – событие изменения статуса коннектора
- Sender – указатель на коннектор
- AStat – текущее состояние коннектора TKRConnectorStat
- AReconnectTime – если текущее состояние равно cstWaitReconnecting, то приходит оставшееся время до следующей попытки подключится, в миллисекундах
- TKRConnectorCallBack – функция объекта для обратной связи
- AError – код ошибки TKRConnectorError
- APack – указатель на буфер с ответом
- ALength – длина ответа в байтах
- AData – указатель на дополнительные данные
- TKRConnectorPackEv – событие с указателем на буфер данных
- Sender – указатель на коннектор
- APack – указатель на буфер
- ALength – длина данных в байтах
Классы
Класс TKRConnector
Родительский класс TComponent
Интерфейсы: IKRSpeedInfo
TKRConnector – Базовый класс всех коннекторов. Коннектор – это объект, осуществляющий связь с внешними объектами(объектом). Подробное описание можно прочитать в статье «Принцип работы коннекторов в Delphi компонентах».
Свойства класса TKRConnector
- Active – включение/выключение коннектора
- QueueCount – текущее количество запросов во входящей очереди
- QueueOutCount – текущее количество запросов в исходящей очереди
- Stat – текущее состояние подключения TKRConnectorStat
- LastConnectTime – дата последней попытки подключиться в Unix формате
- ConnectorType – тип коннектора TKRConnectorType
- Connected – индикатор состояния подключения
- ReadTimeout – таймаут получения ответа на запрос в миллисекундах
- WriteTimeout – таймаут отправки запроса в миллисекундах
- WaitRespTime – максимальное время в миллисекундах между частями входящего пакета
- CountErrorsForReconnect – количество подряд сгенерированных ошибок, при котором происходит разъединение для дальнейшего пере подключения
- ConnectTimeout – таймаут подключения в миллисекундах
- ReconnectTime – время в миллисекундах между попытками подключения
- WaitTime – задержка в активном режиме основного потока коннектора (см. TKRThread.WaitTime)
- WaitPauseTime – задержка в пассивном режиме основного потока коннектора (см. TKRThread.WaitPauseTime)
- WaitOutTime – задержка в активном режиме исходящего потока коннектора (см. TKRThread.WaitTime)
- WaitPauseOutTime – задержка в пассивном режиме исходящего потока коннектора (см. TKRThread.WaitPauseTime)
События класса TKRConnector
- OnSend – событие TKRConnectorPackEv, генерируется перед отправкой запроса. Вызывается не из основного потока программы
- OnRecv – событие TKRConnectorPackEv, генерируется после получения ответа на запрос. Вызывается не из основного потока программы
- OnSendAsync – событие TKRConnectorPackEv, генерируется перед отправкой запроса. Вызывается из основного потока программы
- OnRecvAsync – событие TKRConnectorPackEv, генерируется после получения ответа на запрос. Вызывается из основного потока программы
- OnConnectionStatus – событие TKRConnectorStatEv, генерируется при изменении состояния подключения
Методы класса TKRConnector
- Send – отправляет запрос в очередь на обработку
- APack – указатель на буфер в котором находятся данные предназначенные для отправки
- ALength – длинна отправляемых данных
- ACallBack – метод обратной связи типа TKRConnectorCallBack
- AData – указатель на дополнительные данные, который будет передан в метод обратной связи
- AWaitResult – указывает на то, нужно ли ждать ответ на запрос
- ARecvLen – длина ответа. Если ответа не должно быть или длина ответа неизвестна, то устанавливается ноль
- ADelimiter – разделитель пакетов
- ADelimiterLen – длина разделителя пакетов
- ErrorMsg – получение текстового представления ошибки по ее коду
- AError – код ошибки
Так отправляю запрос:
Так получаю ответ:
Проблема в том, что у устройства к которому я подключаюсь нет особого протокола, оно просто отправляет 22 байта с данными на запрос. Запрос состоит всего из 1 байта равного номеру устройства (в моем случае 1).
Спасибо.
Я вижу две возможные причины:
1) Некорректный запрос. Как я понял вам нужно отправить запрос такого плана
2) Неправильно настроены тайминги. Если вы используете старую версию (до 21.01.2021), то вам нужно пробовать увеличивать тайминги ReadTimeout и WaitRespTime. В новой версии ReadIntervalTimeout, ReadTotalTimeoutMultiplier, ReadTotalTimeoutConstant
Да и в callBack, вам нужно убить созданный буфер Dispose(APack)
Спасибо тебе огромное за твой ответ! Действительно получилось. Увеличил тайминги и заработало!
Сначала я тайминги увеличил, потом решил их уменьшать и проверять как работает программа. Оказывается дошел до родных значений таймингов и все равно программа работала. Значит дело былов чем-то другом.
Так, еще я исправил запрос. Теперь значения в буфер задаю от 0:
Еще убил буфер в callBack:
Видимо это и помогло)