Особенности оптимизации работы ModBus – устройств

advertisement
Особенности оптимизации
работы ModBus – устройств
Умные решения. Автоматизация и
электроснабжение.
(ИП Касьянов Алексей Александрович,
г. Ростов-на-Дону)
Углубленное изучение и успешное применение
продукции компании Evika на примере Logic
Machine 2 Interface
Общее задание на
строительство
энергоэффективного здания
Разработать комплекс мероприятий по снижению потребления энергии из сетевых
источников энергии на:
- нужды отопления и вентиляции – в 5 (пять) раз
- нужды горячего водоснабжения - в 3 (три) раза
- на кондиционирование (охлаждение) дома в жаркое время года – в 40 (сорок) раз
Принципиальная схема
Диспетчеризация и автоматизация
бойлера-аккумулятора на Logic
Machine 2 от Evika
Реализация проекта.
Скрипт на языке Lua (LM2 от Evika)
http://lm.evika.ru
Тренды от Logic Machine 2
Особенности настройки
устройств ModBus
на примере преобразователей сигналов
термосопротивлений Seneca Z-4RTD2
Читаем значения из 16-bit регистров (регистры
№№ 40003...6 преобразователей сигналов
термосопротивлений Seneca Z-4RTD2)
В Modbus, если написано 40003, то нужно
понимать, что адрес регистра читается:
1) без первой четвёрки;
2) в шестнадцатеричном виде;
3) -1 (нужно из адреса вычесть единицу).
И получается, что описанные регистры 40003...6,
это h0002...5, или просто (в десятичном
счислении) - 2...5!
Чтение из регистров ModBus
-- устанавливаем slave ID для чтения и записи данных
for l =1,4 do
mb:setslave(l) -- задаём адрес устройства №№ 1, 2, 3, 4 (предварительно настроены
аппаратно с помощью DIP-переключателей на самих устройствах)
-- читаем значения из 16-bit регистров
for k =1,4 do
z = mb:readregisters(k+1)
x = x + 1 -- увеличиваем счётчик на 1 (от 1 до 16, чтобы считать соответствующие
(номеру датчика) поправки, и записать в соответствующий групповой адрес KNX)
y=math.floor((z-(t1[x]-z*t2[x]))*100)/100 -- вычисляем t скорр-нную и округляем значение
до сотых
sy=sy+y -- суммируем скорректированные значения для вычисления средней t
b = "1/1/"..x -- создаём имя группового адреса KNX (от 1/1/1 до 1/1/16 - в
соответствии с порядковыми номерами датчиков)
adr = grp.alias(b) -- присваиваем переменной значения с адресом KNX
grp.write(adr,y) -- записываем значение Y в групповой адрес KNX
zy=z-y -- вычисляем поправку
log(" температура датчика №"..l.."-"..k.." ("..x..") = "..z.." гр. С, (c поправками:
+"..t1[x].." *"..t2[x].." = "..y..". Поправка "..zy..")") -- печатаем в страницу Log
else
err="Ошибка датчика № "..x -- формируем сообщение об ошибке, добавляя к
нему номер датчика
alert (err) -- публикуем сообщение об ошибке на странице alert
errx=errx+1 -- увеличиваем на единицу счётчик датчиков с ошибками
end -- конец основного тела скрипта
end -- конец цикла k
end -- конец цикла l
Запись в регистры ModBus
-- инициализируем Modbus при первом запуске скрипта
if not mb then
require('luamodbus')
mb = luamodbus.rtu()
mb:open('/dev/ttyS2', 38400, 'N', 8, 1, 'H')
mb:connect()
end
-- устанавливаем slave ID для чтения и записи данных
for s =1,4 do
mb:setslave(s)
for i =0,3 do
mb:writeregisters(0x0024+i,0x12)
log(s..i)
end
end
mb:close()
Аппаратная реализация
Бойлер-аккумулятор
Данная презентация была
проведена на стенде EVIKA на
выставке HI-TECHBUILDING
2013
Download