Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: 100.0 then Laurent@4: RH := 100.0; Laurent@4: end_if; Laurent@4: DEW_POINT:=sqrt(sqrt(sqrt(RH/100.0)))*(112.0+(0.9*TEMP))+(0.1*TEMP)-112.0;]]> Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: ,WORD1,__GetRetainData(__GET_VAR(data__->READ),__GET_VAR(data__->INDEX),0)); Laurent@4: __SET_VAR(data__->,WORD2,__GetRetainData(__GET_VAR(data__->READ),__GET_VAR(data__->INDEX),1)); Laurent@4: __SET_VAR(data__->,WORD3,__GetRetainData(__GET_VAR(data__->READ),__GET_VAR(data__->INDEX),2)); Laurent@4: __SET_VAR(data__->,RD_OK,__GetReadStatus(0)); Laurent@4: }]]> Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: ,WR_OK,__SetRetainData(__GET_VAR(data__->WRITE),__GET_VAR(data__->INDEX),__GET_VAR(data__->WORD1),__GET_VAR(data__->WORD2),__GET_VAR(data__->WORD3))); Laurent@4: }]]> Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: ,FOUND,__FindRetainData(__GET_VAR(data__->SEARCH),__GET_VAR(data__->START_IDX),__GET_VAR(data__->END_IDX),__GET_VAR(data__->WORD1),__GET_VAR(data__->WORD2),__GET_VAR(data__->WORD3))); Laurent@4: __SET_VAR(data__->,INDEX,__GetFoundIndex(0)); Laurent@4: }]]> Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: TON_1_Q, Laurent@4: ET => ET1 Laurent@4: ); Laurent@4: if TON_1_Q then Laurent@4: if REVERSE then Laurent@4: Error_n := SET_POINT - ACTUAL_VALUE; Laurent@4: else Laurent@4: Error_n := ACTUAL_VALUE - SET_POINT; Laurent@4: end_if; Laurent@4: if Td_FADEOUT <= T#0.05s then Laurent@4: Td_FADEOUT := t#0.05s; Laurent@4: end_if; Laurent@4: CTr := TIME_TO_REAL (CYCLE_TIME); Laurent@4: FTr := TIME_TO_REAL (Td_FADEOUT); Laurent@4: power := CTr / FTr; Laurent@4: D_Fadeout := EXPT( 0.04979 , power ); (*time to reach 5% = e^(-3) *) Laurent@4: Dout := Kd_GAIN * (Error_n - 2.0 * Error_n1 + Error_n2); Laurent@4: Dout_n := Dout + Dout_1 * D_Fadeout; Laurent@4: Dout_int := Dout_int + Dout_n; Laurent@4: OUTchk := OUTchk + Kp_GAIN * (Error_n - Error_n1) + Ki_GAIN * Error_n * CTr; Laurent@4: R_chk:= bool_to_int(REVERSE) + bool_to_int(Reverse_1); Laurent@4: if (Soft_t or R_chk=1) then Laurent@4: Dout_int := 0.0; Laurent@4: Dout_n := 0.0; Laurent@4: Dout_1:= 0.0; Laurent@4: Dout:= 0.0; Laurent@4: OUTchk:= OUT; Laurent@4: Error_n1:=Error_n; Laurent@4: Error_n2:=Error_n; Laurent@4: Soft_t := 0; Laurent@4: end_if; Laurent@4: if R_chk =1 then Laurent@4: Error_n:=0.0; Laurent@4: Soft_t := True; Laurent@4: end_if; Laurent@4: Laurent@4: if OUTchk > OUT_MAX then Laurent@4: OUTchk := OUT_MAX; Laurent@4: end_if; Laurent@4: Laurent@4: if OUTchk < OUT_MIN then Laurent@4: OUTchk := OUT_MIN; Laurent@4: end_if; Laurent@4: Laurent@4: if MANUAL then Laurent@4: OUT := MANUAL_REF; Laurent@4: OUTchk:= OUT; Laurent@4: Dout_int := 0.0; Laurent@4: Dout_n := 0.0; Laurent@4: Dout_1:= 0.0; Laurent@4: else Laurent@4: if abs(Error_n) < DEAD_BAND or HOLD then Laurent@4: OUT := OUT; Laurent@4: OUTchk:= OUT; Laurent@4: Dout_int := 0.0; Laurent@4: Dout_n := 0.0; Laurent@4: Dout_1:= 0.0; Laurent@4: else Laurent@4: OUT := OUTchk + Dout_int; Laurent@4: end_if; Laurent@4: end_if; Laurent@4: Laurent@4: if OUT > OUT_MAX then Laurent@4: OUT := OUT_MAX; Laurent@4: end_if; Laurent@4: Laurent@4: if OUT < OUT_MIN then Laurent@4: OUT := OUT_MIN; Laurent@4: end_if; Laurent@4: Laurent@4: Error_n2 := Error_n1; Laurent@4: Error_n1 := Error_n; Laurent@4: Dout_1:=Dout_n; Laurent@4: Reverse_1 := REVERSE; Laurent@4: else Laurent@4: OUT:=OUT; Laurent@4: end_if;]]> Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: Laurent@4: