Lua для modbus.

Программирование modbus на языке Lua.

Специальные системы mb*.

Специальные системы mb*, которые не объявляются в net.cfg, а определяются в файле имя_щита.mb_cfg.

Эти системы не видны в веб-диспетчеризации и доступны обычным системам только из этого же контроллера.

Предназначены для выполнения modbus rtu, modbus tcp запросов.

Пример программы Lua с ПЧ Danfoss VLT FC 51.

Система mb для работы с модулями ввода-вывода RKT.

Первая mb система зарезервированна для опроса модулей ввода-вывода RKT с помощью встроенного интерфейса RS-485. Исходный код первой системы.

Модули добавляются в RKT-soft, раздел Modbus cfg.

Первую систему можно отключить, чтобы использовать встроенный интерфейс RS-485 для других mb систем (не запускать систему).

Если включить: доп. устройства (программа), то можно подключить добавочные устройства для запуска вместе с модулями RKT на встроенном интерфейсе RS-485 "internal" в певой mb системе. См. подключение дополнительных устройств к первой системе модулей RKT.

Определение переменной в программе.

Функция определяет новую переменную:

VAR(строка_тип_переменной,строка_имя_переменной,таблица_опций)

строка_тип_переменной - тип переменной, может иметь значения:

  • 'DS' - дискретная переменная (true/false).
  • 'AN' - аналоговая переменная
  • 'IN' - integer переменная

строка_имя_переменной - строка с названием переменной, например, 'DI1.module1'.

таблица_опции - необязательный параметр, в котором можно задать не обязательные опции:

  • start_value="число", -- Задание начального значения переменной. По умолчанию: 0. Задается в строковом виде, в кавычках. Для дискретных, нормально закрытых переменных задается "1".

Выполнение программы. Функция run().

Сначала, на верхнем уровне программы надо определить все переменные с помощью VAR().

Далее необходимо определить функцию run(), которая вызывается один раз:

function run()

end

В функции run() необходимо организовать бесконечный цикл для выполнения запросов modbus.

Функция wait_from_net_and_sleep

Бесконечный цикл функции run() должен прерываться для сетевого взаимодействия с другими системами, для обмена переменными, с помощью функции:

wait_from_net_and_sleep(pause_ms)

pause_ms - время задержки в миллисекундах.

Только с помощью этой функции нужно организовывать задержки между запросами.

Доступ к переменным в программе. Таблица v.

Специальная таблица v обеспечивает чтение и запись переменных.

--Если определена переменная:
VAR('DS','Переменная')

--тогда чтение переменной:
local s = v['Переменная']

--или запись переменной:
v['Переменная'] = true

Как для обычных систем Lua.

Функция rkt_log(string)

Предназначена для отладки. Выводит сообщение в нижнее окно RKT-soft.

Функция now_ms()

Предназначена для получения времени в миллисекундах с начала работы контроллера. Используется для замеров например полного цикла опроса.

Функция rkt_new_rtu

В библиотеке Lua-modbus вместо функции new_rtu надо вызывать глобальную функцию:

Создать контекст Modbus/RTU — глобальная функция
rkt_new_rtu (device, baud, parity, databits, stopbits)
Параметры:
device - устройство (обязательно) - "internal" - для встроенного в контроллер RS-485
baud - Скорость передачи данных (бод) , по умолчанию 19200.
parity - По умолчанию четность равна ЧЕТНОМУ значению
По умолчанию databits равно 8.
По умолчанию значение stopbits равно 1.
Возвращает:
Контекст Modbus, готовый к использованию.

Пример:
    local ctx = rkt_new_rtu("internal", 9600, 'N', 8, 1) -- укажите свой порт и настройки
    -- Подключение к устройству
    local ok, err = ctx:connect()
    if not ok then
        modbus.close(ctx)
        error("Ошибка подключения к устройству")
    end
    rkt_log("Подключение к преобразователю частоты успешно")

Использование USB-RS485 преобразователей

К контроллеру RKT-202 или RKT-302 можно подключить только один USB-RS485 преобразователь.

Если нужно подключить несколько USB-RS485 преобразователей, надо использовать активный USB HUB.

Чтобы определить параметр device для функции rkt_new_rtu для USB-RS485 преобразователей, надо нажать кнопку Поиск RS485 интерфейсов в RKT-soft, редактор mb_cfg.

Lua-modbus API.

Не использовать mb.new_rtu (device, baud, parity, databits, stopbits), а использовать глобальную функцию rkt_new_rtu(device, baud, parity, databits, stopbits).

Lua-modbus API.

Реализовано на основе:

https://github.com/etactica/lua-libmodbus

Подключение дополнительных устройств к первой mb системе модулей RKT.

Сначала, на верхнем уровне программы надо определить все переменные с помощью VAR(), они будут добавлены к переменным модулей RKT.

Далее необходимо определить функцию add_run(ctx), которая вызывается из mb системы модулей RKT в цикле:

function add_run(ctx)

end

Внути функции add_run выполнять необходимые modbus запросы.

После modbus запроса необходимо вызвать функцию wait_from_net_and_sleep(pause_ms) с pause_ms > 4 мс, рекомендуется 20мс.

Пример программы Lua с ПЧ Danfoss VLT FC 51 с модулями RKT.