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 формате
  • 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 – код ошибки
 
Поделиться:
0
Дмитрий Понкратьев
19.02.2021 21:38
 
Руслан. Добрый день. Подскажи пожалуйста как сделать так, чтобы callBack обработала сразу 22 байта от устройства. Спрашиваю, потому что уже испробовал все: в методе Send указывал AWaitResult := true и ARecvLen := 22. При этом callBack не принимает больше 1 символа.

Так отправляю запрос:
Так получаю ответ:
Проблема в том, что у устройства к которому я подключаюсь нет особого протокола, оно просто отправляет 22 байта с данными на запрос. Запрос состоит всего из 1 байта равного номеру устройства (в моем случае 1).

Спасибо.
Показать полностью
11
Руслан Кандирал
19.02.2021 23:27
Дмитрий Понкратьев
 
Здравствуйте, Дмитрий!

Я вижу две возможные причины:
1) Некорректный запрос. Как я понял вам нужно отправить запрос такого плана
2) Неправильно настроены тайминги. Если вы используете старую версию (до 21.01.2021), то вам нужно пробовать увеличивать тайминги ReadTimeout и WaitRespTime. В новой версии ReadIntervalTimeout, ReadTotalTimeoutMultiplier, ReadTotalTimeoutConstant


Да и в callBack, вам нужно убить созданный буфер Dispose(APack)
Показать полностью
0
Дмитрий Понкратьев
20.02.2021 17:35
Руслан Кандирал
 
Добрый день, Руслан!
Спасибо тебе огромное за твой ответ! Действительно получилось. Увеличил тайминги и заработало!

Сначала я тайминги увеличил, потом решил их уменьшать и проверять как работает программа. Оказывается дошел до родных значений таймингов и все равно программа работала. Значит дело былов чем-то другом.

Так, еще я исправил запрос. Теперь значения в буфер задаю от 0:
Еще убил буфер в callBack:
Видимо это и помогло)
Показать полностью

Новости сайта

30.03.2021 14:53
Обновлен набор компонентов для Delphi
Пакет компонентов для Delphi обновлен до версии от 30.03.2021 г.
14.03.2021 04:54
Обновлен скрипт экспорта Google таблиц в PDF
Добавлены новые возможности при экспорте Google таблиц в PDF файл
22.01.2021 11:45
Обновлен пакет компонентов для Delphi
В пакет компонентов для Delphi было внесено большое количество изменений, касающиеся протокола Modbus и мультиязычности
05.05.2020 15:34
Новая статья про удаленное управление принтером Domino V-series
Реализация протокола передачи данных для связи с термотрансферным принтером Domino V-series из Delphi

Популярные статьи

Modbus Slave на Arduino
Реализация клиентской части протокола Modbus RTU и Modbus ASCII для контроллеров Arduino
Пример передачи данных по протоколу Modbus на Delphi
Пример передачи данных с контроллера ОВЕН ПЛК100 в программу на Delphi по протоколу Modbus
Экспорт таблиц Google Sheets в PDF файл, на email и на Google диск
Экспорт таблиц Google Sheets в PDF файл с помощью Google Script с последующим скачиванием или сохранением на Google Drive или отправкой на почту
Набор компонентов для Delphi
Набор компонентов для Delphi включает в себя компонент для работы с файловой системой, сетью, автоматизацией и другие.