0
Answered

Длительный опрос переменных KNX с LM3.1

Владимир Нестеров 9 years ago in Tips and Tricks updated by Aleksandr Romanov (CTO) 6 years ago 6
На объекте реализована следующая схема взаимодействия:
- iRidium подключается к LM для управления автоматизацией (климат, свет, вентиляция).
- LM используется в роли шлюза BACnet/IP - KNX.
На объекте отсутствует как таковой KNX. Переменные KNX создавались вручную в LM. При этом в LM отсутствует возможность установки флага Read. После подключения панели к LM переменные не считываются, пока не обновятся из BACnet сети объекта.
Был написан скрипт на LM для обновления всех переменных по первому запросу чтения. В итоге обновление переменных составляет порядка 20-30 секунд после запуска приложения с проектом.

Каким образом можно ускорить процесс получения всех переменных с LM, для отображения на панели iRidium???

Answer

PINNED
Решение.
Всем необходимым переменным в LM присваиваем Tags например response.
Создаем скрипт в окне Resident с любым названием, указываем Sleep interval =0.
Текст скрипта:

if not client then
require('genohm-scada.eibdgm')

values = {}
datatypes = {}

objects = grp.tag('response') -- обработка Tags указанного в переменных, которые необходимо обновлять.
for _, object in ipairs(objects) do
values[ object.id ] = object.data
datatypes[ object.id ] = object.datatype
end

function readhandler(event)
local id = event.dstraw

if datatypes[ id ] then
grp.response(id, values[ id ], datatypes[ id ])
end
end

function writehandler(event)
local id = event.dstraw

if datatypes[ id ] then
values[ id ] = knxdatatype.decode(event.datahex, datatypes[ id ])
grp.response(id, values[ id ], datatypes[ id ])
end
end

client = eibdgm:new({ timeout = 1 })

client:sethandler('groupread', readhandler)
client:sethandler('groupwrite', writehandler)
end

client:step()
Answered
Здравствуйте, Владимир

Извините за задержку с ответом.

Для статового опроса переменных KNX мы испоьзуем стандартную команду запроса состояния адреса. Если при использовании этой команды LM не отдает данных, повлиять на это со стороны Иридиум невозможно. Рекомендем обратиться в Evika для получения консультации по этому вопросу.
PINNED
Решение.
Всем необходимым переменным в LM присваиваем Tags например response.
Создаем скрипт в окне Resident с любым названием, указываем Sleep interval =0.
Текст скрипта:

if not client then
require('genohm-scada.eibdgm')

values = {}
datatypes = {}

objects = grp.tag('response') -- обработка Tags указанного в переменных, которые необходимо обновлять.
for _, object in ipairs(objects) do
values[ object.id ] = object.data
datatypes[ object.id ] = object.datatype
end

function readhandler(event)
local id = event.dstraw

if datatypes[ id ] then
grp.response(id, values[ id ], datatypes[ id ])
end
end

function writehandler(event)
local id = event.dstraw

if datatypes[ id ] then
values[ id ] = knxdatatype.decode(event.datahex, datatypes[ id ])
grp.response(id, values[ id ], datatypes[ id ])
end
end

client = eibdgm:new({ timeout = 1 })

client:sethandler('groupread', readhandler)
client:sethandler('groupwrite', writehandler)
end

client:step()
+1
Hi,

To answer your question, this should be handled by the KNX driver in iRidium, its something which can be solved easily by iRidium. As you know the KNX driver posts a read telegram on the bus for all feedback group addresses, when the driver starts and when it wakes from sleep. This puts a strain on the bus and can potentially cause a delay like you are seeing. The Logic Machine has the possibility to retrieve the status of ALL the objects at once over the network, see article http://openrb.com/example-read-knx-object-values-from-external-pc-using-xml

Which means the driver should have the option to disable the automatic read request at start and wake up. Then in addition either SetVariable or SetFeedback methods could be used to write the status to the KNX driver feedback commands. The rest could be easily scripted to retrieve and update the feedback commands. Which would make a HUGE difference with the startup time.

I have requested this feature before and still waiting for it to be added.

Thanks,

Roger
Роджер, данное решение может применяться только для одного LM, если же на объекте большое количество оборудования, то это решение не верно. Лучше работать в таком случае с BACnet.
Писать скрипт по обработке xml, при наличии KNX драйвера.
Указанный выше скрипт обновляет 130 переменных за 17 секунд.
Hi,

Isn't that dependent on whether you are using the server or client mode with BACnet and the LM? See http://openrb.com/example-knx-to-bacnet-gateway-with-lm2

There will always be an delay in iRidium with KNX driver as long as read telegram is sent for every feedback command. This is the same for any app that has to use an KNX IP router. When there is an object server available then statuses are there instantly. You always have the correct status when you look at the web configuration of the Logic Machine because the LM keeps a record of the statuses.

The only immediate workaround that I know of is to create an TCP server on the Logic Machine and TCP client on the iRidium. Effectively making your own driver.

thanks,

Roger
Роджер.
В нашем проекте LM применили для лицензирования панелей.
Мы используем на объекте оборудование Schneider Electric, в котором реализован BACnet/IP.
Вся проблема бы решилась при внедрении драйвера BACnet/IP в iRidium, это как я понял ожидается в 2016 году.