Управление освещением
    Презентации
    Технические решения на LogicMachine
    Визуализация
      evika.ru    Технические решения на LogicMachine    Запись значения Modbus RTU мультиметра в групповой адрес KNX шины

    Запись значения Modbus RTU мультиметра в групповой адрес KNX шины

    Задача

    Прочитать два параметра (напряжение и сила тока) из мультиметра ABB DMTME и сохранить данные в групповом адресе шины KNX.

    Внимание! Будьте внимательны при соединении LogicMachine c Modbus устройством. RS485 «A» необходимо завести на «плюс» (D+), а RS485 «B» — на «минус» (D-).

    Добавление объектов KNX

    Во вкладке Объекты (Objects) добавляем два KNX объекта. В нашем случае:

    • 5/5/1 – для записи напряжения
    • 5/5/2 – для записи силы тока

    Modbus программа

    • Переходим в меню LogicMachine -> Скрипты -> Резидентные (LogicMachine -> Scripting -> Resident) для добавления нового резидентного скрипта, который будет периодически считывать данные с устройства Modbus и записывать их в соответствующий групповой адрес шины KNX.
    Нажмем на иконку редактирования скрипта для добавления следующего программного кода:
    -- инициализируем  Modbus при первом запуске скрипта
    require('luamodbus')
    mb = luamodbus.rtu()
    -- название и номер порта RS-485 (для LM2 используйте '/dev/ttyS2')
    mb:open('/dev/RS485-1', 9600, 'E', 8, 1, 'H')
    mb:connect()
     
    -- устанавливаем slave ID для чтения и записи данных 
    mb:setslave(20)
     
    -- читаем  значение напряжения из 32-bit регистра
    r1, r2 = mb:readregisters(0x1000, 2)
    result = bit.lshift(r1, 16) + r2
    grp.write('5/5/1',result)
     
    -- читаем  значение силы тока из 32-bit регистра
    r1, r2 = mb:readregisters(0x100E, 2)
    result = bit.lshift(r1, 16) + r2
    grp.write('5/5/2',result)
     
    -- закрываем порт
    mb:close()

    Примечание! Данные Modbus очень часто сохраняются в 16-битных регистрах. В случае если требуется 32 бита, значения должны быть считаны из пары соседних регистров, как в этом примере.

    Визуализация объектов Modbus

    Используя функцию grp.write свяжите Modbus объект с объектом KNX и используйте новый KNX объект в визуализации.

    Еще несколько функций для работы с Modbus

      • Открыть tcp соединение Modbus

     

    -- Открыть Modbus TCP соединение:
    require('luamodbus')
    mb = luamodbus.tcp()
    mb:open('192.168.1.1', 1502)
    mb:connect()
    mb:close()
    end

    • Прочитать несколько (count) значений из регистров (registers/coils), начиная со стартового адреса. Функция возвращает все значения, в случае ошибки возвращает nil, и описание ошибки:
    mb:readcoils(start, count)
    mb:readdiscreteinputs(start, count)
    mb:readregisters(start, count)
    mb:readinputregisters(start, count)

    • Запись нескольких значений в регистры (registers/coils), начиная со стартового адреса. Функция возвращает успешно записанные данные или nil и описание ошибки в случае неудачи:

    Исходный код:

    mb:writebits(start, v1, [v2, [v3, …]])

    mb:writeregisters(start, v1, [v2, [v3, …]])

    • Прочитать внутренние данные подчиненного устройства. Функция возвращает данные или nil и описание ошибки в случае неудачи:
    Исходный код    
    mb:reportslaveid()



    Copyright © Evika.ru 2017
    All Rights Reserved