PID 프로그램 작성

PID 특수 프로그램을 사용하실 경우 이전에 설명했던 PID 관련 명령어가 자동생성되어직접 입력하실 필요가 없습니다. 따라서 래더상의 별도 프로그램 부분이 필요없으며 PID특수프로그램 만으로 PID 관련 제어가 가능합니다.

PID 프로그램 등록

PID 프로그램 등록

[메뉴표시줄→파일(F)→새 프로그램]을 선택 합니다. 아래와 같은 새 프로그램 대화상자가 활성화 됩니다.

프로그램 이름, 프로그램 ID, 프로그램 여유공간을 입력 후, [확인] 버튼을 클릭 합니다.

PID 프로그램 작성

PID 프로그램 작성

제어 시스템 구성도

image-20241127-070117.png

방의 온도를 RTD 센서를 통해 측정하고 4 – 20mA 출력을 제어 하여 방의 온도를 설정 상태로 유지하는 프로그램, RTD 모듈의 채널 1을 사용하여 온도 값을 측정하고 DA 카드 채널 1을 사용하여 출력을 제어 하도록 합니다.

 

 

 

 

전체 Loop 수(1 ~ 32) :

PID 연산을 실행시키는 Loop수를 설정합니다. 하나의 제어대상을 제어하기 위해서는 하나의 PID 연산 Loop를 사용해야 합니다. 최대 32개까지 설정할 수 있습니다. 현재 제어대상이 하나 이므로 1을 설정 합니다.

 

1Scan 실행 Loop 수 :

전체 Loop수가 복수일 때 1Scan에 몇 개의 Loop를 실행시킬 것인지를 설정합니다. 현재 전체 Loop 수가 1이므로 1Scan 실행 Loop 수도 1로 설정 합니다.

 

PIDINIT 시작영역 :

지정된 영역으로부터 PIDINIT 명령이 참조할 파라미터들이 저장됩니다. 첫Loop의 경우 전체 Loop 수와 1 Scan 실행 Loop 수를 포함하여 22Word의 영역을 사용하게 되며 두 번째 Loop부터 Loop가 추가 될 때마다 20Word의 영역을 사용하게 됩니다. 위에서는 D00000 ~ D00021영역이 PIDINIT 파라미터 영역으로 설정 되어있습니다.

 

PIDCAL 시작영역 :

지정된 영역으로부터 PIDCAL명령이 참조할 파라미터들 과 PIDCAL의 결과 값이 저장됩니다. Loop가 추가 될 때마다 20Word의 영역이 추가로 사용됩니다. 위에서는 D00100 ~ D00119영역이 PIDCAL 파라미터 영역으로 설정 되어있습니다. PIDINIT 영역과 겹치지 않도록 주의 해야 합니다.

 

현재 Loop :

전체 Loop중 편집하고자 하는 Loop또는 모니터링 하고자 하는 Loop를 선택합니다. 현재는 Loop가 한 개 이므로 1이 설정 되어 있습니다.

 

설정 항목 :

연산식 선택 (0 : 정 동작 , 1 : 역 동작)

정동작 : 측정값(PV)이 목표값(SV)보다 작은 경우 조작량(MV)를 출력하여 측정값이 목표값에 근접하도록 하는 동작입니다. Heating동작의 경우 여기에 속합니다.

역동작 : 측정값(PV)이 목표값(SV)보다 큰 경우 조작량(MV)를 출력하여 측정값이 목표값에 근접하도록 하는 동작을 말합니다. Cooling동작의 경우 여기에 속합니다.

현재 제어가 Heating이므로 정방향(0)으로 설정 합니다.

 

Sampling 주기(0.01 ~ 60) :

PID 연산을 실행하는 주기를 설정합니다. 출력 변화에 대해 측정값이 즉각적으로 반응하는 시스템일수록 주기를 짧게 설정해야 합니다.

현재 1초로 설정되어 있으므로 1초를 주기로 PID 연산이 실행 되어 출력값(MV)이 바뀌게 됩니다.

 

비례정수(1 ~65535) :

비례동작 Mv = Kp * (Sv – Pv)에서 편차(Sv – Pv )에 곱해지는 상수로서 PID제어의 비례동작을 담당하는 상수입니다.

위의 식에서 비례정수(Kp)가 크면 현재값이 목표값에 빠르게 도달하지만, 이 값이 너무 크면 진동을 하는 등의 제어 안정에 나쁜 영향을 줄 수 있습니다.

현재는 8000이 설정 되어 있지만 프로그램을 운전 하면서 시스템에 따라 값을 조정 해야 합니다.

 

적분정수(0.0 ~ 3000) :

적분동작 Mv = P * E + P * 1/Ki *∫Edt은 목표값(Sv)과 현재값(Pv) 사이에서 편차(E)가 발생할 경우 그 편차를 없애기 위해 시간에 따라 편차만큼을 조작값에 계속 적으로 가감합니다.

적은 편차에 대해서 비례 동작은 조작값의 변화에 큰 영향을 끼치지 못하므로 적분동작에 의해서 편차제거 효과를 얻을 수 있습니다.

현재 2000이 설정 되어 있지만 비례정수와 마찬가지로 시스템에 따라 값을 조정해야 합니다.

 

미분정수(0.00 ~ 300) :

미분동작 Mv = Kp * E + Kp * dE/dt은 목표값의 변경이나 외란으로 편차가 발생될 때 그 편차를 없애기 위해서 변화 속도에 비례되는 조작값을 연산하여 변차의 변화를 억제합니다.

이때 미분동작에서 편차가 발생되고 나서 미분동작의 조작값이 비례동작의 조작값으로 되기까지의 시간을 미분시간 혹은 미분정수라 합니다

현재는 0으로 설정하여 미분제어는 하지 않습니다.

 

필터계수(0.00 ~ 0.99) :

A/D 카드로 부터 입력되는 측정치(PV)에 대하여 필터 효과를 어느 정도 적용할 것인가를 설정합니다.

 

조작량 하한(0 ~ 16000) :

자동 PID 운전시 PID 연산에서 산출한 조작량(MV)의 하한 치를 설정합니다.

조작량(MV)이 조작량 하한(MVLL)보다 작은 경우 조작량 하한 치를 조작량으로 적용합니다.

현재는 조작량 하한이 0으로 설정 되어 있으므로 MV값은 자동 상태에서 0이하의 값이 출력 되지 않습니다.

 

조작량 상한(0 ~ 16000) :

자동 PID 운전시 PID 연산에서 산출한 조작량(MV)의 상한 치를 설정합니다.

조작량(MV)이 조작량 상한(MVLL)보다 큰 경우 조작량 상한 치를 조작량으로 적용합니다.

현재는 조작량 상한이 16000으로 설정 되어 있으므로 MV값은 자동 상태에서 16000이상의 값이 출력 되지 않습니다.

 

조작량 변화율 제한(0 ~ 16000) :

이전 SCAN에서의 조작량(MV)과 이번 SCAN에서의 조작량을 비교하여 조작량 변화량이 조작량 변화율 제한 설정값 보다 크면 여기에 설정된 값을 적용합니다.

현재는 조작량 변화율 제한이 6000으로 설정 되어 있으므로 연산 결과 변화량이 6000이상이면 변화량을 6000으로 적용합니다.

 

MV 자동전달(0:사용안함, 1:사용함) :

사용함 : 사용자가 PID제어를 자동모드에서 운영하다가 수동모드로 전환할 경우 자동 모드에서 계산된 조작량(MV)값이 수동 조작량(MVman)값으로 자동 적용됩니다.

사용안함 : 수동모드에서의 조작량(MV)값은 수동조작량(MVman)으로 설정된 값이 적용 됩니다.

현재는 사용함(1)으로 설정되어 있으므로 자동 상태에서 수동 조작량은 조작량과 같은 값을 가집니다.

 

SV 경사기능(0:사용안함 , 1~1000) :

목표값(SV)의 갑작스런 변화로 인한 오버슈트의 발생을 억제하고 안정된 제어를 위해 목표값(SV)의 변경시 이 변화를 설정 단계로 나누어 샘플링 주기(Ts)때마다 점차로 증감시켜 적용합니다.

만약 100으로 설정 되어 있다면, SV가 변경되는 경우 내부적으로 SV값이 Ts(Sampling 주기 : 1s) 주기로 점진적으로 적용되어 (SV 경사기능 : 100)*Ts시간 후 변경된 설정값에 도달합니다.

현재는 0으로 설정 되어 있으므로 이 기능을 사용하지 않습니다.

 

ON/OFF 제어시간 :

ON/OFF제어를 사용하여 PID제어를 하고자 하는 경우ON/OFF주기 시간을 설정합니다.(ON시 조작량 상한 값이 조작량으로 출력됩니다.)

On/Off 제어 시간이 설정되어 있는 경우 설정값은 On/Off 주기가 됩니다.

한 주기 내에서 On/Off 비율은 현재의 MV값에 의해 결정됩니다.

예를 들어 설정 값이 0.1 이고 현재 MV값이 8000이라면 0.05초는 On, 0.05초는 Off를 유지 MV값이 3200이라면 0.02초는 On, 0.08초는 Off를 유지 합니다.

현재는 0으로 설정되어 있으므로 이 기능은 사용하지 않습니다.

 

SV 설정값(0 ~ 16000) :

제어하고자 하는 목표값을 입력 합니다.

예를 들어 0~100%를 0~16000의 디지털 값으로 사용한다면 50%를 설정하기 위해서는 8000을 설정해 주시면 됩니다.

현재는 온도값을 제어할 것이므로 설정하고자 하는 온도*10의 값을 입력 하면 됩니다.

예를 들어 35.5℃라면 355를 입력 하면 됩니다.

 

PV측정값(0 ~ 16000) :

제어대상의 현재 측정값 입니다. 사용자가 아날로그 입력 카드로부터 값을 읽어 주기적으로 업데이트 해줄 수 있습니다.

측정값을 더블 클릭합니다.

 

 

값을 읽어올 RTD카드가 장착된 베이스를 지정합니다. (로컬 베이스 이므로 0을 입력 합니다.)

RTD카드가 장착된 슬롯을 지정합니다. (0번 슬롯 이므로 0을 입력 합니다.)

읽어올 RTD카드의 메모리 영역을 지정합니다. (RTD 모둘 채널 1번의 ℃값을 사용하기 위해 1을 입력 합니다. 특수 카드의 User 메모리 영역을 참고 하면 됩니다.)

[확인] 버튼을 클릭하면 완성된 "FROM"명령을 확인할 수 있습니다.

 

MV 조작량(0 ~ 16000) :

PID 연산의 결과 값입니다. 사용자가 아날로그 출력 카드를 통해 제어대상에 출력해줄 수 있습니다.

조작량을 더블 클릭 합니다.

 

 

출력할 D/A카드가 장착된 베이스를 지정합니다. (로컬 베이스 이므로 0을 입력 합니다.)

D/A카드가 장착된 슬롯을 지정합니다.(1번 슬롯 이므로 1을 입력 합니다.)

값을 써줄 D/A카드의 메모리 영역을 지정합니다. (D/A 모듈 채널 1번을 사용 하므로 1을 입력 합니다. 특수 카드의 User 메모리 영역을 참고 하면 됩니다.)

[확인] 버튼을 클릭하면 완성된 "TO"명령을 확인할 수 있습니다.

 

필터 후 측정값 :

측정값(PV)의 노이즈 등으로 인한 순간적인 편차를 방지하기 위해 필터를 사용하며, 측정값(PV)를 필터링 하여 필터 후 측정값(PVnf)영역에 저장합니다 .이때 필터 계수(�)가 0이면 측정값(PV)에 필터를 적용하지 않습니다.

 

수동 조작량 :

PID 모드가 수동인 경우 PID제어를 하지 않고, 수동조작량(MVman)으로 설정된 값이 조작량(MV)값으로 출력 됩니다.

 

자동/수동 선택 :

PID를 이용하여 자동으로 제어대상을 제어할 것인지, 수동 조작량(MVman)영역에 설정된 값을 제어대상에 출력할 것인지를 선택합니다.

 

PIDINIT State : PID 연산 초기화 과정에서 에러 상태를 표시 합니다.

 

저장, 컴파일, 다운로드:

파라미터 설정을 완료했으면 [저장] 버튼을 클릭합니다.
CICON 메뉴 -> 도구 -> 컴파일+링크 클릭합니다.
CICON 메뉴 -> 온라인 -> 접속+다운로드+모니터를 클릭해 프로그램을 PLC로 다운로드 합니다.
작업이 정상적으로 완료 되었다면 모니터링 모드로 전환 됩니다.
모니터 중단 버튼을 클릭하면 모니터링을 중단하고 편집 모드로 전환 됩니다. 

 

모니터링 :

모니터링 중에는 창에 현재 값이 표시됩니다.
모니터링 중 현재 값을 더블 클릭하면 지정 디바이스영역의 값을 수정 할 수 있습니다.
수정된 값은 다음 scan부터 PID 제어에 바로 적용됩니다.
운전 중 파라미터를 변경해 보고자 할 경우
모니터링 중인지 확인 합니다.(모니터링 중에는 현재 값이 표시 됩니다.)
변경하고자 하는 파라미터의 현재값을 더블클릭 합니다.

 

지정 디바이스와 입력 범위가 표시됨으로 범위에 맞는 값을 입력 하시면 됩니다.

 

PID AutoTuning

PID Auto Tuning 기능을 사용하여 시스템에 적합한 파라미터(비례정수,적분정수,미분정수)를 간단히 찾을 수 있습니다.

[주의] Auto Tuning 시작 전 상태는 가능한 출력 값의 영향을 받지 않은 상태여야 합니다. 현재 시스템의 경우 Heater가 동작하지 않은 상온에 가까운 온도가 좋습니다.

 

  1. 현재 작성된 PID 프로그램을 PLC에 다운로드 합니다.

  2. PID 프로그램의 [모니터] 버튼을 눌러 모니터링 모드로 들어갑니다.

  3. [Auto Tuning] 버튼을 누릅니다.

 

설정값을 입력합니다.(정방향 제어를 하는 경우 설정값은 측정값보다 큰 값을 입력해야 정상적으로 Auto Tuning작업을 완료 할 수 있습니다. 역방향인 경우 반대로 설정값은 측정값 보다 작은 값을 입력해야 합니다.

현재 시스템(정방향)에서 입력 값은 현재 측정 되는 측정값 보다 커야 하며 가장 빈번이 설정하는 온도(50℃)를 입력 하는 것이 좋습니다.

[확인] 버튼을 클릭 합니다.

 

  1. Auto Tuning 진행중, Auto Tune 명령 접수에 파란색 불이 들어오면서 Auto Tuning작업이 시작됩니다.

 

Auto Tuning중에는 출력값이 조작량 상한으로 고정 됩니다.

최대 출력에서의 시스템의 응답특성을 체크하여 파라미터를 연산하게 됩니다.

Auto Tuning 작업이 완료되면 Auto Tuning 진행 중, Auto Tune 명령 접수의 파란색 불이 꺼지게 됩니다. 완료 후에는 비례정수, 적분정수, 미분정수의 현재값에 Auto Tuning결과 계산된 파리미터가 표시됩니다.

 

 5. 현재 비례정수, 적분정수의 현재값이 변경된 것을 확인할 수 있습니다.

[주의] 현재 Auto Tuning에 의해 연산된 파라미터는 다른 시스템에 똑같이 적용 되지는 않습니다. 현재 시스템에서 Heater의 출력 또는 센서의 위치가 변경된 경우에도 시스템의 특성은 달리질 수 있습니다.

 

 

Auto Tuning 작업 완료 메시지 박스의 내용을 확인 후 결과값을 프로그램에 적용하기 위해 "예"를 클릭합니다.

"아니오"를 선택하고 작업 완료된 Loop를 선택한 다음 "프로그램에 적용"버튼을 클릭해도 선택된 Loop의 결과값(현재값)이 프로그램에 적용 됩니다.

저장, 컴파일, 다운로드 과정을 거쳐 수정된 설정값을 PLD제어에 적용합니다.

PID Auto Tuning 작업은 Loop별로 따로 실행됩니다. Tuning 작업을 하는 Loop 이외의 다른 Loop들은 정상적인 PID제어를 하게 됩니다.

 

Trend 연동

프로그램 상단의 [트렌드] 버튼을 클릭 하면 현재 선택된 Loop의 설정값, 측정값, 조작량이 등록된 트렌드 창이 생성됩니다.

 

 

녹색선 : 조작량

붉은색선 : 설정값

노란색선 : 측정값

위의 그림은 정방향 Heating제어를 Trend로 모니터링한 화면 입니다.

 

PID 프로그램 LD변환

LD변환버튼을 사용하여 PID 프로그램을 LD로 변환할 수 있습니다.

주의 : 한번 LD로 변환된 프로그램은 다시 되돌릴 수 없습니다.

 

 

 

LD 편집창을 이용하는 경우우

LD 편집창을 이용하는 경우우

앞의 PID 특수 프로그램을 LD 편집기로 작성하는 경우

 

전체 Lop수 및 1Scan 실행 Loop를 입력합니다.

PIDINIT 설정값를 입력합니다.

 

PIDCAL 설정값를 입력 합니다.

PIDINIT, PIDCAL 명령을 실행 합니다.

LD로 작업하는 경우 각 설정영역에서 해당 루프의 각 설정값들의 위치를 계산하여 직접 MOV 명령을 사용하여 입력해 주셔야 합니다. 설정값들의 위치는 PID 명령어 설명을 참고해 주십시오.

 

LD로 작성하시는 경우 PID 명령어들은 프로젝트에서 한번만 사용되어야 합니다. PID 특수 프로그램이 이미 등록되어 있는 경우 PID 명령어들을 사용 하시면 안 됩니다.