Это старая версия документа!
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