Это старая версия документа!


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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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-х ходовым клапаном.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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

  • sw/openhab/examples/heating/3pa.1703601958.txt.gz
  • Последнее изменение: 2023/12/26 17:45
  • lazygatto