Это старая версия документа!
PID управление 3х клапаном
Ниже приведу пример текущей настройки для управления 3-х ходовым клапаном с помощью PID регулятора в моей конфигурации openHAB.
Из оборудования установлен 3-х ходовой актуатор ESBE на контуре теплых полов.
Управлением открытия/закрытия занимается контроллер MegaD, задействованы 2 релейных выхода. Для них созданы соответствующие Items.
1. Установлен Add-on PID Controller, который соответственно рассчитывает выходное значение в зависимости от температуры уставки и текущей температуры подачи и записывает его в Item tp_pid
. Настройки по коэффициентами пока выбраны следующие: P=10, I=0.5, D=80, D-T1=300
Код правила для расчета PID:
configuration: {} triggers: - id: 09519cc5-516c-42a4-857f-e3ed9eacec19 label: PID Controller Trigger configuration: input: tp_flowpipe setpoint: tp_setpoint kp: 10 kd: 80 kdTimeConstant: 300 ki: 0.5 loopTime: 120000 type: pidcontroller.trigger conditions: - inputs: {} id: "2" configuration: itemName: boiler_flame state: ON operator: = type: core.ItemStateCondition - inputs: {} id: "3" configuration: itemName: boiler_status state: ON operator: = type: core.ItemStateCondition actions: - inputs: {} id: "1" configuration: itemName: tp_pid type: core.ItemCommandAction
2. Следующее правило запускается по cron каждые 3 минуты, и в зависимости от текущего значения PID управляет 3-х ходовым клапаном.
configuration: {} triggers: [] conditions: [] actions: - inputs: {} id: "1" configuration: type: application/javascript script: >+ console.log("=== Resetting 3 point actuator Status ===") var maxRotationTime = 127000 // 127 sec var rulesToDisable = [ 'pidTest', 'update3pAStatus', 'rotate_3p_actuator_with_pid', ] // Disable rules console.log('Disabling needed rules, to prevent their runnig:') rulesToDisable.forEach((rule) => { rules.setEnabled(rule, false); console.log('Rule ' + rule + ' disabled.') }); items.three_way_close.sendCommand('ON') console.log('Starting closing 3pA for ' + Math.round(maxRotationTime/1000) + ' sec.') setTimeout(() => { items.three_way_close.sendCommand('OFF') console.log('Closing 3pA done') items.tp_3pA_status.postUpdate(0) console.log('Status of 3pA updated to 0') // Enable rules console.log('Resetting complete. Enabling rules:') rulesToDisable.forEach((rule) => { rules.setEnabled(rule, true); console.log('Rule ' + rule + ' enabled.') }); }, maxRotationTime); type: script.ScriptAction