120 likes | 390 Views
Умные решения. Автоматизация и электроснабжение. (ИП Касьянов Алексей Александрович, г. Ростов-на-Дону) Углубленное изучение и успешное применение продукции компании Evika на примере Logic Machine 2 Interface. Особенности оптимизации работы ModBus – устройств.
E N D
Умные решения. Автоматизация и электроснабжение. (ИП Касьянов Алексей Александрович, г. Ростов-на-Дону) Углубленное изучение и успешное применение продукции компании Evika на примере Logic Machine 2 Interface Особенности оптимизации работы ModBus – устройств Специализированный производитель мультипротокольных компонентов АСУЗ www.Evika.Ru
Общее задание на строительство энергоэффективного здания Разработать комплекс мероприятий по снижению потребления энергии из сетевых источников энергии на: - нужды отопления и вентиляции – в 5 (пять) раз - нужды горячего водоснабжения - в 3 (три) раза - на кондиционирование (охлаждение) дома в жаркое время года – в 40 (сорок) раз
Диспетчеризация и автоматизация бойлера-аккумулятора на Logic Machine 2 от Evika
Реализация проекта.Скрипт на языке Lua (LM2 от Evika)http://lm.evika.ru
Особенности настройки устройств 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