Lua для modbus.

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

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

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

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

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

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

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

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.

Функция now_ms()

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

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