Elaborazione PID con uscita PWM opzionale
L'elaborazione PID viene eseguita per mantenere il valore corrente PV il più possibile vicino al valore target SP. Contrariamente a FP_PID_BASIC, questa istruzione abilita un'uscita PWM (uscita on-off). È inoltre disponibile l'autotuning per calcolare automaticamente i dati di controllo PID Kp, Ti e Td.
Ingresso
Condizione di avvio
Dato di controllo
Valore corrente (-30000–30000)
Parametri di controllo PID
Ingresso/uscita
Tabella dati dei parametri PID
Quando si esegue l'istruzione per la prima volta, ovvero quando la condizione di esecuzione specificata in Run passa a TRUE, i valori di default vengono scritti sui membri DUT da 1 a 9 della DUT.
Prima della seconda esecuzione di FP_PID, è necessario modificare i membri DUT da 1 a 9 della DUT ai valori richiesti.
Uscita
Uscita modulata a larghezza di impulso (opzionale, può essere utilizzata al posto dell'uscita valore manipolato)
Il periodo (ciclo) dell'uscita PWM è il tempo di campionamento Ts (la frequenza dell'uscita PWM è 1/Ts) e la duty ratio è il valore manipolato MV in unità dello 0,01%, p.es. MV = 10000 significa una duty ratio del 100%.
L'istruzione va eseguita due volte. La prima esecuzione resetta i valori in PID_WORK_AREA_DUT, poi i valori corretti per i membri DUT da 1a 9 in PID_WORK_AREA_DUT devono essere impsotati in modo tale che la seconda esecuzione dell'istruzione utilizzi i valori corretti.
se l'area specificata utilizzando il registro indice eccede il limite.
se un valore specificato per un parametro di PID_Parameters_DUT è fuori dall'intervallo utilizzabile
se l'area specificata utilizzando il registro indice eccede il limite.
se un valore specificato per un parametro di PID_Parameters_DUT è fuori dall'intervallo utilizzabile
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
Automatic: BOOL:=TRUE;
dutControl: PID_Control_DUT;
PV: INT:=0;
ParametersHold: PID_Parameters_DUT;
ParametersNonHold: PID_Work_Area_DUT;
bPWMOutput: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VARIN,,dutControl,15,2,17,4,);
B(B_VARIN,,ParametersHold,15,4,17,6,);
B(B_CONTACT,,Automatic,6,1,8,3,);
B(B_VARIN,,ParametersNonHold,15,5,17,7,);
B(B_F,FP_PID!,,17,0,30,7,,?DRun?Ds1_Control?Ds2_ProcessValue?Ds3_Parameters?Ds4_WorkArea?As4_WorkArea?APWM);
B(B_VARIN,,PV,15,3,17,5,);
B(B_VAROUT,,bPWMOutput,30,1,32,3,);
L(1,2,6,2);
L(8,2,17,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bPWMOutput := FP_PID(Run := Automatic,
s1_Control := dutControl,
s2_ProcessValue := PV,
s3_Parameters := ParametersHold,
s4_WorkArea := ParametersNonHold);