Залипает реле направления WBIO-DO-R10R-4

Залипает реле направления WBIO-DO-R10R-4. Разговаривали по телефону с техническим специалистом, порекомендовали измерить пусковой ток и если превышение, то использовать внешние контакторы.

  1. Как измерять пусковой ток? Снять провод с клеммы L и вставить туда одну ножку мультиметра, а вторую на провод и подать ток?

  2. Распишите, пожалуйста, поподробнее схему с внешними контакторами с названием контактора и куда что подключать.

Добрый день.

Основная причина выхода из строя - это переключение реле направления при включенном реле движения. Точно ли выдерживается временной интервал при управлении? Ну и, естественно пусковой ток и ток при работе привода “в упор”.

Если мультиметр имеет функцию измерения пускового тока, например Токовые клещи-мультиметр АСМ-2368 - то достаточно просто взять в клеши фазный провод.

Обычным мультиметром брсок в несколько десятков миллисекунд - не определить.
Также хорошо себя показывает цифровой осциллограф и токовый трансформатор, сам таким методом пользовался.

Контактор например Контактор модульный VS120-10, 20А, 1НО, 230В AC/DC, ELKO EP, VS120-10 230V AC/DC - купить в ЭлектроГуру
Подключать обмотки контакторв к клеммам NO и NC канала WBIO-DO-R10R-4, фазные линии привода - к NO клеммам контакторов.

У меня уже несколько раз выходили реле из строя, не понятна причина. В последний раз да, скорее всего из-за переключения под нагрузкой, перешел на Спрут, там, как оказалось, это не предусмотрено. Может есть пример кода, чтобы вписать?
Ранее у меня было управление виртуальными кнопками и там была задержка 100 мс, но все равно иногда залипало. Причем, не понятно, по какому принципу. Такое ощущение, что залипали те шторы, которые реже всего используются. Причем, если бы дело было в пусковом токе, то вероятнее всего бы залипали шторы, которые шире и тяжелее (ну как мне видится, может ошибаюсь), а залипают рандомные шторы.

Привода Amigo Benthin M44. По пусковому току данных нет, есть такая информация

Я такими приборами не обладаю…

А есть какие-то более простые и дешевые методы ограничения пусковых токов?

Или мне рекомендовали заменить данные модули на другие помощнее? Может хотя бы такой вариант?

Для wb-rules - да, на форуме было. SH, как закрытой системой - не пользуюсь и тонкостей не знаю.

Например Ой!
или Ой!
Но подобными не пользовался.

Можно, например Модули Modbus-реле WB-MR3LV/I(K) и WB-MR6LV/I(K) — Wiren Board но ограничения на переключение реле при движении остаются.

У меня код для управления с кнопки есть, а мне ваш коллега по телефону или вы сказали, что если управлять через СХ, то нужно все равно писать код. На форуме такой есть? Я просто слабо представляю логику кода: если отслеживать нагрузку, то правило сработает, когда нагрузка уже есть, то есть будет уже поздно.

Если я правильно считаю, то номинальный ток привода примерно 0,5А, а пусковой ток может быть 2,5-5А? Тогда, чтобы гарантированно не было забросов пускового тока, то мощность привода должна быть 60-70Вт? Это для каких штор? В игрушечный домик? Горизонтальные привода Amigo так же имеют мощность 120 Вт примерно.

Понял, спасибо! У меня это не влезет на место текущих реле, и надо пересобирать шкаф…

Нет. По крайней мере кода для SH не помню и не ищется.

Логика проста - использовать вместо прямого управления реле “виртуальными” элементами, обработчик (логика) которых уже выдерживает таймауты. Как это реализовывается в SH - не знаю.

Да, даже больше, 0.6А

Для большинства. Например, первый попавшися AM68-2/80-EС-QP

Не работает даже с задержкой, вот пример правила, на котором также залипло реле после нескольких дней работы, данное правило имеет задержку 50мс, те в 2 раза больше рекомендуемого вами в руководстве (25мс), также при нажатии на кнопку другого направления - сначала останавливается ролета а после повторного нажатия - пускается в другую сторону, те вариант о котором вы пишите полностью исключен, но это не помогло, тут явно проблема с самим модулем или его комплектующими.

(function() {
	function addVirtualRollet(id, name, control, direction, timeout, buttons, fixed) {
		var moving, virt = 'virtual-rollet-' + id.toLowerCase(), data = {};

		// Инициализируем виртуальное устройство со служебными полями
		defineVirtualDevice(virt, {
			title: name,
			cells: {
				open: {title: 'Открыть', type: 'pushbutton', order: 1},
				close: {title: 'Закрыть', type: 'pushbutton', order: 2},
				stop: {title: 'Остановить', type: 'pushbutton', order: 3},
				position: {title: 'Текущая позиция', type: 'value', forceDefault: true, units: '%', value: 0, max: 100, order: 4},
				target: {title: 'Целевая позиция', type: 'range', forceDefault: true, value: 0, max: 100, order: 5},
				state: {title: 'Состояние', type: 'text', value: 'STOPPED', readonly: true, forceDefault: true, order: 6}
			}
		});

		// Работа с топиками напрямую через объект
		function defineVar(name, path) {
			Object.defineProperty(data, name, {
				configurable: true,
				get: function() { return dev[path]; },
				set: function(value) { dev[path] = value; }
			});
		}

		defineVar('position', virt + '/position');
		defineVar('target', virt + '/target');
		defineVar('state', virt + '/state');
		defineVar('route', direction);
		defineVar('power', control);

		// Задание цели по командам от внутренних или внешних кнопок с режимами работы
		defineRule(virt + '-trigger', {
			whenChanged: [virt + '/open', virt + '/close', virt + '/stop'].concat(buttons),
			then: function(click, device, command) {
				if (!click && !fixed) return;

				if (device !== virt)
				{
					command = (buttons.length == 1) ? 0 : buttons.indexOf(device + '/' + command) + 1;

					switch (buttons.length)
					{
						case 1: data.target = (data.state !== 'STOPPED' || !click) ? data.position : (data.position > 0 ? 0 : 100); break;
						case 2: data.target = (data.state !== 'STOPPED') ? data.position : (command == 2 ? 0 : 100); break;
						case 3: data.target = (command == 3) ? data.position : (command == 2 ? 0 : 100); break;
						default: log.warning('{}: only 1/2/3 buttons can be used to control!', virt);
					}
				}
				else
				{
					data.target = {'open': 100, 'close': 0, 'stop': data.position}[command];
				}
			}
		});

		// Работа с приводом: установка целевой позиции и расчет таймингов
		defineRule(virt + '-action', {
			whenChanged: virt + '/target',
			then: function(value) {
				if (moving)
				{
					clearInterval(moving);
					data.power = false;
				}

				if (data.position === data.target)
				{
					data.route = false;
					data.state = 'STOPPED';
					return;
				}
				else
				{
					data.route = data.target > data.position;
					data.state = data.target > data.position ? 'OPENING' : 'CLOSING';

					setTimeout(function() {
						data.power = true;

						moving = setInterval(function() {
							if (data.position !== data.target)
							{
								data.position += data.route ? 1 : -1;
							}
							else
							{
								clearInterval(moving);

								data.power = false;
								data.route = false;

								data.state = 'STOPPED';
							}
						}, Math.round(timeout / 100));
					}, 50);
				}
			}
		});
	}

	// Инициализация виртуальных роллет и правил через общую функцию (датчик открытия в алгоритме не предусмотрен, расчет только на таймингам)
	// Параметры: ID уст-ва, наименование, канал управления мотором, канал управления направлением, время на полное открытие/закрытые, выключатели
	// Выключатели: [..] (1 - open/stop/close, 2 - open/stop и close/stop, 3 - open, close, stop), `true` после если кнопки фиксируемые!

	addVirtualRollet('1', 'Пергола', 'wb-mio-gpio_138:3/ON1', 'wb-mio-gpio_138:3/DIR1', 34000, ['wb-mio-gpio_138:1/IN10', 'wb-mio-gpio_138:1/IN11']);
	addVirtualRollet('2', 'Штора (роллета 2)', 'wb-gpio/EXT1_ON2', 'wb-gpio/EXT1_DIR2', 34000, ['wb-gpio/EXT2_DR3', 'wb-gpio/EXT2_DR4']);
})();

Однако:


То есть простыми щелчками по кнопкам можно добиться переключения реле напрявления при включеном реле движения… Просто пощелкал мышкой.


//06_19_test_04.js

defineVirtualDevice("rolltest", { //создаём виртуальное устройство
    title: "rolltest", //имя вирт устройства
    cells: { 
        "SW_drive": {
            type: "pushbutton", //тип его текст поле
            value: false
        },
        
        "SW_direction": {
            type: "pushbutton",
            value: false
        },
      
      "drive": {
            type: "switch", //тип его текст поле
            value: false
        },
        
        "direction": {
            type: "switch",
            value: false
        },
    }
});


(function() {
	function addVirtualRollet(id, name, control, direction, timeout, buttons, fixed) {
		var moving, virt = 'virtual-rollet-' + id.toLowerCase(), data = {};

		// Инициализируем виртуальное устройство со служебными полями
		defineVirtualDevice(virt, {
			title: name,
			cells: {
				open: {title: 'Открыть', type: 'pushbutton', order: 1},
				close: {title: 'Закрыть', type: 'pushbutton', order: 2},
				stop: {title: 'Остановить', type: 'pushbutton', order: 3},
				position: {title: 'Текущая позиция', type: 'value', forceDefault: true, units: '%', value: 0, max: 100, order: 4},
				target: {title: 'Целевая позиция', type: 'range', forceDefault: true, value: 0, max: 100, order: 5},
				state: {title: 'Состояние', type: 'text', value: 'STOPPED', readonly: true, forceDefault: true, order: 6}
			}
		});

		// Работа с топиками напрямую через объект
		function defineVar(name, path) {
			Object.defineProperty(data, name, {
				configurable: true,
				get: function() { return dev[path]; },
				set: function(value) { dev[path] = value; }
			});
		}

		defineVar('position', virt + '/position');
		defineVar('target', virt + '/target');
		defineVar('state', virt + '/state');
		defineVar('route', direction);
		defineVar('power', control);

		// Задание цели по командам от внутренних или внешних кнопок с режимами работы
		defineRule(virt + '-trigger', {
			whenChanged: [virt + '/open', virt + '/close', virt + '/stop'].concat(buttons),
			then: function(click, device, command) {
				if (!click && !fixed) return;

				if (device !== virt)
				{
					command = (buttons.length == 1) ? 0 : buttons.indexOf(device + '/' + command) + 1;

					switch (buttons.length)
					{
						case 1: data.target = (data.state !== 'STOPPED' || !click) ? data.position : (data.position > 0 ? 0 : 100); break;
						case 2: data.target = (data.state !== 'STOPPED') ? data.position : (command == 2 ? 0 : 100); break;
						case 3: data.target = (command == 3) ? data.position : (command == 2 ? 0 : 100); break;
						default: log.warning('{}: only 1/2/3 buttons can be used to control!', virt);
					}
				}
				else
				{
					data.target = {'open': 100, 'close': 0, 'stop': data.position}[command];
				}
			}
		});

		// Работа с приводом: установка целевой позиции и расчет таймингов
		defineRule(virt + '-action', {
			whenChanged: virt + '/target',
			then: function(value) {
				if (moving)
				{
					clearInterval(moving);
					data.power = false;
				}

				if (data.position === data.target)
				{
					data.route = false;
					data.state = 'STOPPED';
					return;
				}
				else
				{
					data.route = data.target > data.position;
					data.state = data.target > data.position ? 'OPENING' : 'CLOSING';

					setTimeout(function() {
						data.power = true;

						moving = setInterval(function() {
							if (data.position !== data.target)
							{
								data.position += data.route ? 1 : -1;
							}
							else
							{
								clearInterval(moving);

								data.power = false;
								data.route = false;

								data.state = 'STOPPED';
							}
						}, Math.round(timeout / 100));
					}, 200);
				}
			}
		});
	}

	// Инициализация виртуальных роллет и правил через общую функцию (датчик открытия в алгоритме не предусмотрен, расчет только на таймингам)
	// Параметры: ID уст-ва, наименование, канал управления мотором, канал управления направлением, время на полное открытие/закрытые, выключатели
	// Выключатели: [..] (1 - open/stop/close, 2 - open/stop и close/stop, 3 - open, close, stop), `true` после если кнопки фиксируемые!

	addVirtualRollet('1', 'Пергола', 'rolltest/drive', 'rolltest/direction', 34000, ['rolltest/SW_drive', 'rolltest/SW_direction']);
	//addVirtualRollet('2', 'Штора (роллета 2)', 'wb-gpio/EXT1_ON2', 'wb-gpio/EXT1_DIR2', 34000, ['wb-gpio/EXT2_DR3', 'wb-gpio/EXT2_DR4']);
})();


defineRule("Dirtest", {
  whenChanged: 'rolltest/direction',
  then: function(value) {
    if (dev["rolltest/drive"]){
      log.info("Alarm!")
      log.info("direction new value:", value)
    }
    else{
      log.info("ok")
    }
    
  }
})



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

С учетом возникающих ситуаций, может стоит добавить ограничение в прошивку модуля?

Видится 2 возможных варианта:

  1. Запретить переключать DIR если включен ON.
  2. Принудительно выключать ON при смене DIR и восстановление положения ON.

В модулях WBIO нет микроконтроллера, а поэтому нет никакой прошивки. Контроллер Wiren Board дёргает GPIO и щелкают реле.

Будем делать Modbus-аналог, там будет всё удобнее.

Точно! Совсем забыл об природе WBIO.

Отлично! Думаю многие оценят, из своих наблюдений и догадок думаю стоит предложить реализовать по 3 входа на каждую пару ON/DIR:

1 кнопка: открыть-стоп-закрыть
2 кнопки: открыть-стоп, закрыть-стоп
3 кнопки: открыть, стоп, закрыть

Почему нельзя сделать, к примеру, чтобы WBIO определялся, как виртуальное устройство со своей логикой, которая не позволяет переключать одновременно?

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

Реализация - это уже на усмотрение пусконаладчика, как именно управлять реле.
Насколько я знаю все интеграторы достаточно компетентны.

WBIO — это атавизм, который развиваться не будет. Разрабатывать сейчас что-то для него — это много ресурсов на продукт, который будет заменён более совершенным в обозримом будущем. Пожалуй, это единственный модуль, который сейчас нельзя заменить Modbus-версией.

Когда-то это имело смысл, теперь уже нет.

Нет. Меняется на Модули Modbus-реле WB-MR3LV/I(K) и WB-MR6LV/I(K) — Wiren Board например.
Ну и неспешно делается режим управления кнопками для него.

Есть пример реализации правила чтобы повешать двигатель на него? Я так понимаю один канал будет переключать вперед/назад аналог DIR, а другой канал просто выключатель питание (аналог On) ?