PDA

Просмотр полной версии : Термостат Cityron ПУ-3



Stan_1
22.05.2022, 10:20
Не могу никак разобраться с вот какой ситуацией.

Имеется:

ПЛК-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.

Stan_1
22.05.2022, 16:58
Да, конечно. Вот.

60782

60781

60783

Евгений Кислов
22.05.2022, 16:59
Выложите скриншот вкладки Modbus Slave Channel.

Stan_1
22.05.2022, 17:43
Вот

60784

60785

Евгений Кислов
22.05.2022, 18:02
Когда я подключаю термостат к компу через USB,

Вы подключили термостат именно через USB или через конвертер RS-485/USB?

Stan_1
22.05.2022, 18:14
У вас циклический опрос, пауз в 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?

Stan_1
22.05.2022, 18:39
Будет ли на термостате отображаться ошибка, если в проекте ПЛК убрать опрос всех остальных устройств для RS-485-1?

О как! Нет, не будет. Все работает нормально. При этом у меня несколько устройств не подключены, в сумме на 700 мс Response Time. Получается, что реально они тормозят дольше?

А подскажите еще - что такое Cycle для Trigger при настойке канала на Slave?

Евгений Кислов
22.05.2022, 18:55
Получается, что реально они тормозят дольше?

Я думаю, причина как раз в ожидании ответа от неподключенных устройств - из-за этого общее время опроса всех устройств существенно увеличивается.


А подскажите еще - что такое Cycle для Trigger при настойке канала на Slave?

Это желаемый период опроса данного канала (он может не совпадать с реальным - реальный зависит от числа опрашиваемых каналов в пределах данного интерфейса, скорости обмена и т.д.).

Stan_1
22.05.2022, 19:24
Да, нашел отсутствующее устройство, которое давало паузу. Но там 11 значений по 100 мс. То есть по идее - задержка всего 1,1 секунды. Но в реальности - более 5 секунд.

Но тогда я вот чего не понял. В настройках этого устройства стоит Response time 300 мс. И есть 11 значений, для каждого из которых стоит 100 мс. Я полагал, что если устройство отключено, то после 300 мс ожидания ответа шина Modbus начнет опрос других устройств. И время ожидания каждого канала - не важно. Получается, реальность обратная? Неважно, какое время стоит на самом устройстве, все равно ПЛК будет пытаться опросить каждый канал с таймаустом, заданным для каждого канала?

Евгений Кислов
22.05.2022, 19:30
Я полагал, что если устройство отключено, то после 300 мс ожидания ответа шина Modbus начнет опрос других устройств. И время ожидания каждого канала - не важно

Ваши предположения неверны. Каналы устройства опрашиваются последовательно, 300 мс ожидания будет тратиться на каждый канал неподключенного устройства.