Просмотр полной версии : Термостат Cityron ПУ-3
Не могу никак разобраться с вот какой ситуацией.
Имеется:
ПЛК-210
Порт с настойками 9600N1
Подключен темостат Cityron ПУ-3
Задержка ответа в термостате - 10 мс
Порт Master - время между фреймами 50 мс
Таймаут в термостате 5 сек, после которых он пишет "Ошибка Modbus", если не получает данные
Когда я подключаю термостат к компу через USB, и начинаю обмен данными (запись значения раз в 1-2 секунды), то термостат работает идеально. Но когда подключаю его к ПЛК, то возникает такой эффект: все значения в термостат записываются, но раз в 5 секунд возникает ошибка Modbus. Через 5 секунд опять все норм. И так далее.
Была мысль, что ПЛК не пишет в Modbus устройства не меняющиеся значения. То есть скажем, за 5 секунд температуа в комнате не изменилась - и ПЛК ничего не отправляет, и у slave-прибора ощущение отсутствующей коммуникации. Но я вроде рандомом записывал разные значения, но поведение не менялось.
Никто не сталкивался с таким?
Евгений Кислов
22.05.2022, 10:27
Добрый день.
Была мысль, что ПЛК не пишет в Modbus устройства не меняющиеся значения.
Выложите скриншоты настроек опроса в CODESYS.
Да, конечно. Вот.
60782
60781
60783
Евгений Кислов
22.05.2022, 16:59
Выложите скриншот вкладки Modbus Slave Channel.
Евгений Кислов
22.05.2022, 18:02
Когда я подключаю термостат к компу через USB,
Вы подключили термостат именно через USB или через конвертер RS-485/USB?
У вас циклический опрос, пауз в 5 секунд в нем возникать не должно в принципе.
Вы подключили термостат именно через USB или через конвертер RS-485/USB?
Через конвертер. У меня есть конвертер от U-Green, и библиотека Modbus. На компьютере скрипт, который работает корректно, выглядит так:
slave_id = 16
mb = Modbus.new("/dev/tty.usbserial-A10KNA2R", true, 9600, 1, SerialPort::NONE)
mb.read_timeout = 500
loop do
regs = mb.readRegisters(slave_id, 0, 24)
out = Hash.new
out["Установленная температура"] = (regs[1].to_f / 10).round(1)
out["Вкл/выкл"] = regs[2].to_i == 1 ? "вкл" : "выкл"
out["Режим"] = regs[3].to_i
out["Скорость вентилятора"] = regs[4].to_i
out["Время"] = "#{regs[20].to_i}:#{regs[21].to_i}, #{regs[22].to_i}"
out["Влажность"] = "#{regs[23].to_i}%"
out.each do |k, v|
puts "#{k}: #{v}"
end
mb.writeRegister(slave_id, 0, 235) # Температура окружающей среды
mb.writeRegister(slave_id, 1, 185) # Температура уставки
mb.writeRegister(slave_id, 3, 1) # Режим работы
mb.writeRegister(slave_id, 4, 3) # Скорость вентилятора
mb.writeRegister(slave_id, 7, 1) # Ошибка фильтра
mb.writeRegister(slave_id, 8, 52) # Код ошибки
mb.writeRegister(slave_id, 9, 185) # Температура уставки в верхнем правом углу
# mb.writeRegister(slave_id, 20, Time.new.hour) # Часы
# mb.writeRegister(slave_id, 21, Time.new.min) # Минуты
# mb.writeRegister(slave_id, 22, Time.new.wday) # День недели
sleep(0.05)
end
Евгений Кислов
22.05.2022, 18:19
Будет ли на термостате отображаться ошибка, если в проекте ПЛК убрать опрос всех остальных устройств для RS-485-1?
Будет ли на термостате отображаться ошибка, если в проекте ПЛК убрать опрос всех остальных устройств для RS-485-1?
О как! Нет, не будет. Все работает нормально. При этом у меня несколько устройств не подключены, в сумме на 700 мс Response Time. Получается, что реально они тормозят дольше?
А подскажите еще - что такое Cycle для Trigger при настойке канала на Slave?
Евгений Кислов
22.05.2022, 18:55
Получается, что реально они тормозят дольше?
Я думаю, причина как раз в ожидании ответа от неподключенных устройств - из-за этого общее время опроса всех устройств существенно увеличивается.
А подскажите еще - что такое Cycle для Trigger при настойке канала на Slave?
Это желаемый период опроса данного канала (он может не совпадать с реальным - реальный зависит от числа опрашиваемых каналов в пределах данного интерфейса, скорости обмена и т.д.).
Да, нашел отсутствующее устройство, которое давало паузу. Но там 11 значений по 100 мс. То есть по идее - задержка всего 1,1 секунды. Но в реальности - более 5 секунд.
Но тогда я вот чего не понял. В настройках этого устройства стоит Response time 300 мс. И есть 11 значений, для каждого из которых стоит 100 мс. Я полагал, что если устройство отключено, то после 300 мс ожидания ответа шина Modbus начнет опрос других устройств. И время ожидания каждого канала - не важно. Получается, реальность обратная? Неважно, какое время стоит на самом устройстве, все равно ПЛК будет пытаться опросить каждый канал с таймаустом, заданным для каждого канала?
Евгений Кислов
22.05.2022, 19:30
Я полагал, что если устройство отключено, то после 300 мс ожидания ответа шина Modbus начнет опрос других устройств. И время ожидания каждого канала - не важно
Ваши предположения неверны. Каналы устройства опрашиваются последовательно, 300 мс ожидания будет тратиться на каждый канал неподключенного устройства.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot