![]() |
![]() |
#1 |
Senior Member
|
![]()
Набор функций для работы по протоколу Modbus-RTU (master).
Исходники на github: modbus Зависимости: coreutils-sleep. Описание класса Modbus Свойства: Tasks - массив задач. Методы: crc16( data ) - вычисление CRC16 табличным способом для массива байт; Fill( func, data ) - заполнение массивов с данными (используется в обработчике OnReceive()); Post( task ) - post-запрос к скрипту командного интерпретатора; ReadCoils( handle, slaveid, address, quantity, updaterate ); ReadDiscreteInputs( handle, slaveid, address, quantity, updaterate ); ReadHoldingRegisters( handle, slaveid, address, quantity, updaterate ); ReadInputRegisters( handle, slaveid, address, quantity, updaterate ); WriteSingleCoil( handle, slaveid, address, value, updaterate ); WriteSingleRegister( handle, slaveid, address, value, updaterate ); WriteMultipleRegisters( handle, slaveid, address, values, updaterate ); UpdateEnable( handle ); UpdateDisable( handle ); UpdateOnce( handle ); Register( handle, n ) - возвращает uint16 значение регистра n, запрошенного в задаче handle. События: OnReceive( task, data ) - функция-обработчик при приёме данных после post-запроса; OnFailure( handle, error ) - функция-обработчик ошибки при приёме данных; OnSuccess( handle ) - функция-обработчик в случае успешного приёма данных; OnTimer( task ) - функция-обработчик таймера. Особенности: 1. Функцию с параметрами нужно вписывать в верхнее текстовое окно. 2. Настройки порта выполняются путём изменения свойства modbus.Serial. Если в качестве Name используется ttyATH0, то должна быть отключена функция вывода системных сообщений в этот порт. Они мешают нормальной работе. Работа скриптов проверялась при помощи симулятора: Modbus Slave. Документацию на протокол Modbus-RTU можно скачать отсюда: 1. Modbus_Application_Protocol_V1_1b3.pdf 2. Modbus_Rus.Doc RTU фрейм. В RTU режиме сообщение начинается с интервала тишины равного времени передачи 3.5 символов при данной скорости передачи в сети. Первым полем затем передается адрес устройства. Вслед за последним передаваемым символом также следует интервал тишины продолжительностью не менее 3.5 символов. Новое сообщение может начинаться после этого интервала. Фрейм сообщения передается непрерывно. Если интервал тишины продолжительностью 1.5 возник во время передачи фрейма, принимающее устройство заканчивает прием сообщения и следующий байт будет воспринят как начало следующего сообщения. Таким образом, если новое сообщение начнется раньше 3.5 интервала, принимающее устройство воспримет его как продолжение предыдущего сообщения. В этом случае устанавливается ошибка, так как будет несовпадение контрольных сумм. Типичный фрейм сообщения показан ниже. Код:
+-----------+--------+--------+--------+--------+-----------+ ¦ старт ¦ адрес ¦функция ¦ данные ¦ CRC ¦ конец ¦ +-----------+--------+--------+--------+--------+-----------+ ¦T1-T2-T3-T4¦ 8 бит ¦ 8 бит ¦n x бит ¦ 16 бит ¦T1-T2-T3-T4¦ +-----------+--------+--------+--------+--------+-----------+
__________________
Россия навсегда! Последний раз редактировалось uni; 03.12.2014 в 15:27. |
![]() |
![]() |
Метки |
modbus, modbus-rtu, скрипт, модуль |
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|