KRModbusMaster.pas

Константы

  • MBM_ERRORS_COUNT – количество ошибок Modbus Master
  • mbmeOk – нет ошибки
  • mbmeNotConnector – не подключен модуль передачи данных
  • mbmeIncorrectID – неверный идентификатор пакета
  • mbmeIncorrectPackageLength – неверная длинна пакета
  • mbmeCRC – ошибка контрольной суммы
  • mbmeIncorrectFunction – неверный номер функции
  • mbmeIncorrectMBPackageLength – неверная длинна Modbus пакета
  • mbmeIncorrectDataLength – неверная длинна данных
  • mbmeQueueOverflowed – очередь переполнена
  • mbmeRealTimeError – ошибка времени выполнения
  • mbmeModbusNotActive – обработчик протокола Modbus выключен
  • mbmeClientNotActive – Modbus клиент выключен
  • MB_PARSER_ERRORS_MSG – список сообщений о ошибках

Типы данных

  • TMBMError – ошибка обработчика Modbus Master
  • TMBMCallBack – процедура обратного вызова при получении ответа от сервера
    • AError – код ошибки
    • AData – указатель, который был передан при отправке пакета в коннектор

Функции

  • MBMReadCoils – формирует основную часть запроса Modbus для функции mbfReadCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMReadDiscretInputs – формирует основную часть запроса Modbus для функции mbfReadDiscretInputs
    • ADevAddr – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMReadHoldingRegisters – формирует основную часть запроса Modbus для функции mbfReadHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMReadInputRegisters – формирует основную часть запроса Modbus для функции mbfReadInputRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMReadStatus – формирует основную часть запроса Modbus для функции mbfReadStatus
    • ADevAddr – адрес устройства
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMUserFunction – формирует основную часть запроса Modbus для пользовательской(не стандартной) функции
    • ADevAddr – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
  • MBMWriteCoil – формирует основную часть запроса Modbus для функции mbfWriteCoil
    • ADevAddr – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMWriteCoils – формирует основную часть запроса Modbus для функции mbfWriteCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMWriteHoldingRegister – формирует основную часть запроса Modbus для функции mbfWriteHoldingRegister
    • ADevAddr – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMWriteHoldingRegisters – формирует основную часть запроса Modbus для функции mbfWriteHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • AFrom – начальный индекс в буфере
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUReadCoils – формирует запрос Modbus RTU для функции mbfReadCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUReadDiscretInputs – формирует запрос Modbus RTU для функции mbfReadDiscretInputs
    • ADevAddr – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUReadHoldingRegisters – формирует запрос Modbus RTU для функции mbfReadHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUReadInputRegisters – формирует запрос Modbus RTU для функции mbfReadInputRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUReadStatus – формирует запрос Modbus RTU для функции mbfReadStatus
    • ADevAddr – адрес устройства
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUUserFunction – формирует запрос Modbus RTU для пользовательской(не стандартной) функции
    • ADevAddr – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • ABuffer – буфер, в который записывается сформированный пакет
  • MBMRTUWriteCoil – формирует запрос Modbus RTU для функции mbfWriteCoil
    • ADevAddr – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUWriteCoils – формирует запрос Modbus RTU для функции mbfWriteCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUWriteHoldingRegister – формирует запрос Modbus RTU для функции mbfWriteHoldingRegister
    • ADevAddr – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMRTUWriteHoldingRegisters – формирует запрос Modbus RTU для функции mbfWriteHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPReadCoils – формирует запрос Modbus TCP для функции mbfReadCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPReadDiscretInputs – формирует запрос Modbus TCP для функции mbfReadDiscretInputs
    • ADevAddr – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPReadHoldingRegisters – формирует запрос Modbus TCP для функции mbfReadHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPReadInputRegisters – формирует запрос Modbus TCP для функции mbfReadInputRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPReadStatus – формирует запрос Modbus TCP для функции mbfReadStatus
    • ADevAddr – адрес устройства
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPUserFunction – формирует запрос Modbus TCP для пользовательской(не стандартной) функции
    • ADevAddr – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • ABuffer – буфер, в который записывается сформированный пакет
  • MBMTCPWriteCoil – формирует запрос Modbus TCP для функции mbfWriteCoil
    • ADevAddr – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPWriteCoils – формирует запрос Modbus TCP для функции mbfWriteCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPWriteHoldingRegister – формирует запрос Modbus TCP для функции mbfWriteHoldingRegister
    • ADevAddr – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMTCPWriteHoldingRegisters – формирует запрос Modbus TCP для функции mbfWriteHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIReadCoils – формирует запрос Modbus ASCII для функции mbfReadCoils
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIReadDiscretInputs – формирует запрос Modbus ASCII для функции mbfReadDiscretInputs
    • ADevAddr – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIReadHoldingRegisters – формирует запрос Modbus ASCII для функции mbfReadHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIReadInputRegisters – формирует запрос Modbus ASCII для функции mbfReadInputRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIReadStatus – формирует запрос Modbus ASCII для функции mbfReadStatus
    • ADevAddr – адрес устройства
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIUserFunction – формирует запрос Modbus ASCII для пользовательской(не стандартной) функции
    • ADevAddr – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • ABuffer – буфер, в который записывается сформированный пакет
  • MBMASCIIWriteCoil – формирует запрос Modbus ASCII для функции mbfWriteCoil
    • ADevAddr – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIWriteCoils – формирует запрос Modbus ASCII для функции mbfWriteHoldingRegister
    • ADevAddr – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIWriteHoldingRegister – формирует запрос Modbus ASCII для функции mbfWriteHoldingRegister
    • ADevAddr – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • MBMASCIIWriteHoldingRegisters – формирует запрос Modbus ASCII для функции mbfWriteHoldingRegisters
    • ADevAddr – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • ABuffer – буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос

Классы

Класс TKRModbusMaster

Родительский класс TComponent

TKRModbusMaster – клиентская части протокола Modbus. Формирует пакет набора стандартных функций протокола с последующей отправкой на Slave-устройство. Полученный ответ проверяет на наличие ошибок и разбивает на составные части.

Свойства класса TKRModbusMaster
  • Active – включение/выключение
  • QueueCount – количество пакетов в очереди на отправку. Свойство только для чтения
  • Connector – подключение модуля для передачи данных
  • WaitTime – задержка между циклами в потоке модуля (см. TKRThread)
  • WaitPauseTime – задержка между циклами в потоке модуля в пассивном режиме (см. TKRThread)
  • CheckID – включение/выключение идентификации пакетов. Используется только в Mobus TCP
Методы класса TKRModbusMaster
  • ErrorMsg – получение сообщение об ошибки по её коду
    • AError – код ошибки
    • ALevel – исходящая переменная, содержит информацию о обработчике в котором возникла ошибка. Может возвращать следующие значения: «Ошибка прибора», «Ошибка обработки данных», «Ошибка передачи данных»
  • ReadReadCoils – отправляет запрос на выполнение функции чтение состояния группы дискретных регистров
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • ReadDiscretInputs – отправляет запрос на выполнение функции чтение состояния группы дискретных входов
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • ReadHoldingRegisters – отправляет запрос на выполнение функции чтение значения группы регистров
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • ReadInputRegisters – отправляет запрос на выполнение функции чтение значения группы входящих регистров
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • ReadStatus – отправляет запрос на получение статуса удаленного устройства
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • UserFunction – отправляет запрос на выполнение пользовательской функции
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • WriteCoil – отправляет запрос на выполнение функции записи состояния дискретного регистра
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • WriteCoils – отправляет запрос на выполнение функции записи состояния группы дискретных регистров
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • WriteHoldingRegister – отправляет запрос на выполнение функции записи значения в регистр
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • WriteHoldingRegisters – отправляет запрос на выполнение функции записи данных в группу регистров
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
  • SendPack – отправляет ранее сформированный запрос
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AFunc – код функции
    • APPack – указатель на буфер с запросом
    • APkLen – длина запроса
    • ACallBack – обратная функция типа TMBMCallBack, будет вызвана после обработки ответа
    • ARecvLen – длина пакета с ответом на этот запрос
  • ReadReadCoilsPack – формирование пакета функции чтение состояния группы дискретных регистров. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • ReadDiscretInputsPack – формирование пакета функции чтение состояния группы дискретных входов. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartInput – адрес начального дискретного входа
    • ACount – количество дискретных входов
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • ReadHoldingRegistersPack – ормирование пакета функции чтение значения группы регистров. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • ReadInputRegistersPack – формирование пакета функции чтение значения группы входящих регистров. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • ACount – количество регистров
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • ReadStatusPack – формирование пакета функции статуса удаленного устройства. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • UserFunctionPack – формирование пакета пользовательской функции. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AFunc – номер функции
    • AData – указатель на буфер с данными пакета
    • ADataLen – длина пакета данных
    • APPack – указатель на буфер, в который записывается сформированный пакет
  • WriteCoilPack – формирование пакета функции записи состояния дискретного регистра. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • ACoilNum – адрес дискретного регистра
    • AData – значение для записи
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • WriteCoilsPack – формирование пакета функции записи состояния группы дискретных регистров. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartCoil – адрес начального дискретного регистра
    • ACount – количество дискретных регистров
    • AData – значения для записи
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • WriteHoldingRegisterPack – формирование пакета функции записи значения в регистр. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес регистра
    • AData – значение для записи
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос
  • WriteHoldingRegistersPack – формирование пакета функции записи данных в группу регистров. Возвращает длину пакета
    • AMBType – значение типа TMBType, указывает на тип Modbus протокола
    • AAddres – адрес устройства
    • AStartReg – адрес начального регистра
    • AData – значения для записи
    • APPack – указатель на буфер, в который записывается сформированный пакет
    • ARecvLen – длина пакета с ответом на этот запрос

Примеры использования:

 
Поделиться:
0
Дмитрий Левин
20.03.2019 01:32
 
Здравствуйте Руслан!
Я начал изучать вопросы написания прогамы опроса устройства по протоколу Modbus TCP, в качестве основных компонентов опроса решил использовать Ваши компоненты.
За основу взял, Ваш пример опроса Овеновского устройства переделав его на TCP/
Устройство с которым, я работаю имеет большое количество регистров, потому решил в таймере, опрашивать сразу целый массив регистров начиная с регистра 100 по 160.
Для этого в таймере я вызываю функцию ReadHoldingRegisters:
Опрос проводится со скоростью 100мс. Все бы ничего, но спустя очень короткое время (от 4сек до нескольких минут) вылетает ошибка access violation at address XXXX in module..
после чего компилятор меня переносит в модуль KRModbusMaster, (строка 2380) на метод

procedure TKRMBThread._CallBack(AError: integer; APack: PKRBuffer;

конкретно сюда:
В чем может быть причина этой ошибки, или что я не доделал так чтобы решить задачу чтения регистров??
Спасибо за внимание!
С уважением Дмитрий!
Показать полностью
13
Руслан Кандирал
20.03.2019 10:26
Дмитрий Левин
 
Процедура
Procedure TForm1.CallBack(AError: integer; AData: Pointer);
вызывается не из основного потока. По этому нужно соблюсти правила синхронизации потоков. Из параллельного потока нельзя обращаться к визуальным компонентам. В вашем случае скорее всего ошибку вызвала строка
StatusBar1.Panels[1].Text := MB_PARSER_ERRORS_MSG[AError];

Я думаю тут подошла бы синхронизация через сообщения Windows. Плюс, желательно останавливать таймер на время выполнения запроса, так как если вдруг получится так, что время обработки запроса будет больше времени срабатывания таймера, то будет переполняться очередь запросов. Я бы сделал это так:
Показать полностью
0
Дмитрий Левин
26.03.2019 22:58
Руслан Кандирал
 
Прежде всего благодарю за развернутый и быстрый ответ, и прошу прощения за запоздалый ответ (не имел возможностей вдумчиво ответить).
Надо будет както более глубоко изучить Ваш труд и поучаствовать в написании примеров и справки к Вашим компонентам.
Как я понял из вашего примера идея такая:
1. Вначале, из любого удобного места приложения, по мере надобности передаем запрос на чтение, необходимой группы регистров - командой ReadHoldingRegisters.
2. В пользовательской функции обратного вызова CallBack, мы принимаем и дешифруем данные с группы регистров. При этом действия функции CallBack происходят в пределах другого потока, и для того чтобы сообщить основному приложению о завершении этой работы, мы посылаем ему сообщение WM_MBCALLBACK.
3.В предварительно прописанном методе WMMBCallback, производим обработку полученных данных, например вывод на пользовательский интерфейс.

Т.е. требуется опрос Modbus устройства оформить в трех фазах.

Еще раз благодарю за внимание и оперативные ответы, и прошу прощения за не своевременный ответ.
Показать полностью
13
Руслан Кандирал
26.03.2019 23:36
Дмитрий Левин
 
1. Да. Желательно поставить опрос хотя бы одного регистра в цикл для поддержания коннекта, а остальные уже опрашивать по мере необходимости.
2. Да, CallBack вызывается из другого потока. С помощью SendMessage мы приостанавливаем этот поток пока окно которому принадлежит Handle не обработает запрос.
3. Да.

Ещё можно сделать так

Показать полностью
0
Валентин Викторович
29.12.2017 06:17
 
Так работать не хочет, ошибки не выводятся в listbox. Сделал немного по другому. Обрабатываю непосредственно ошибки тэгов.

Показать полностью
0
Валентин Викторович
28.12.2017 07:57
 
Добрый день, подскажите пожалуйста, Каким образом вытащить сообщения об ошибке и передать их в listbox. Спасибо
Показать полностью
13
Руслан Кандирал
28.12.2017 09:18
Валентин Викторович
 
Для начала вам нужно получить код ошибки, он приходит в callback функции. Пример:
Код ошибки передаем в заранее созданную переменную. Из callback функции обращаться к визуальным компонентам нельзя, так как она вызывается не из основного потока.

Затем с помощью таймера можно сделать так:
Показать полностью

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

18.07.2021 14:30
Новая статья по экспорту Google Sheet в MS Excel
Экспорт таблиц Google Sheets в файл MS Excel с помощью Google Script, а также сохранение на Google Drive и отправка на e-mail
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 и мультиязычности

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

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