<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.plcopen.org/xml/tc6.xsd"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xsi:schemaLocation="http://www.plcopen.org/xml/tc6.xsd">
<fileHeader companyName="Beremiz"
creationDateTime="2008-12-14T16:53:26"/>
<contentHeader name="LPC POUs"
modificationDateTime="2012-01-20T13:35:46">
<pou name="DEW_POINT" pouType="functionBlock">
<variable name="DEW_POINT">
<![CDATA[if RH < 0.0 then
DEW_POINT:=sqrt(sqrt(sqrt(RH/100.0)))*(112.0+(0.9*TEMP))+(0.1*TEMP)-112.0;]]>
<pou name="GET_RETAIN_DATA" pouType="functionBlock">
<![CDATA[Index (row) of the retain array.]]>
<simpleValue value="FALSE"/>
<![CDATA[Data - first column.]]>
<simpleValue value="FALSE"/>
extern IEC_UINT __GetRetainData(BOOL, IEC_UINT, IEC_UINT);
extern BOOL __GetReadStatus(BOOL);
SetFbVar(WORD1,__GetRetainData(GetFbVar(READ),GetFbVar(INDEX),0));
SetFbVar(WORD2,__GetRetainData(GetFbVar(READ),GetFbVar(INDEX),1));
SetFbVar(WORD3,__GetRetainData(GetFbVar(READ),GetFbVar(INDEX),2));
SetFbVar(RD_OK,__GetReadStatus(0));
<pou name="SET_RETAIN_DATA" pouType="functionBlock">
<simpleValue value="FALSE"/>
<simpleValue value="FALSE"/>
extern BOOL __SetRetainData(BOOL, IEC_UINT, IEC_UINT, IEC_UINT, IEC_UINT);
SetFbVar(WR_OK,__SetRetainData(GetFbVar(WRITE),GetFbVar(INDEX),GetFbVar(WORD1),GetFbVar(WORD2),GetFbVar(WORD3)));
<pou name="FIND_RETAIN_DATA" pouType="functionBlock">
<simpleValue value="False"/>
<variable name="START_IDX">
<variable name="END_IDX">
<simpleValue value="False"/>
extern BOOL __FindRetainData(BOOL, IEC_UINT, IEC_UINT, IEC_UINT, IEC_UINT, IEC_UINT);
extern IEC_UINT __GetFoundIndex(BOOL);
SetFbVar(FOUND,__FindRetainData(GetFbVar(SEARCH),GetFbVar(START_IDX),GetFbVar(END_IDX),GetFbVar(WORD1),GetFbVar(WORD2),GetFbVar(WORD3)));
SetFbVar(INDEX,__GetFoundIndex(0));
<pou name="PID_A" pouType="functionBlock">
<variable name="SET_POINT">
<variable name="ACTUAL_VALUE">
<variable name="REVERSE">
<variable name="MANUAL_REF">
<variable name="Kp_GAIN">
<variable name="Ki_GAIN">
<variable name="Kd_GAIN">
<variable name="Td_FADEOUT">
<simpleValue value="t#1s"/>
<variable name="DEAD_BAND">
<variable name="OUT_MAX">
<variable name="OUT_MIN">
<variable name="CYCLE_TIME">
<simpleValue value="t#0.1s"/>
<variable name="D_fadeout">
<variable name="Error_n">
<simpleValue value="0.0"/>
<variable name="Error_n1">
<simpleValue value="0.0"/>
<variable name="Error_n2">
<simpleValue value="0.0"/>
<simpleValue value="0.0"/>
<simpleValue value="0.0"/>
<simpleValue value="0.0"/>
<variable name="TON_1_Q">
<variable name="Dout_int">
<variable name="Reverse_1">
Error_n := SET_POINT - ACTUAL_VALUE;
Error_n := ACTUAL_VALUE - SET_POINT;
if Td_FADEOUT <= T#0.05s then
CTr := TIME_TO_REAL (CYCLE_TIME);
FTr := TIME_TO_REAL (Td_FADEOUT);
D_Fadeout := EXPT( 0.04979 , power ); (*time to reach 5% = e^(-3) *)
Dout := Kd_GAIN * (Error_n - 2.0 * Error_n1 + Error_n2);
Dout_n := Dout + Dout_1 * D_Fadeout;
Dout_int := Dout_int + Dout_n;
OUTchk := OUTchk + Kp_GAIN * (Error_n - Error_n1) + Ki_GAIN * Error_n * CTr;
R_chk:= bool_to_int(REVERSE) + bool_to_int(Reverse_1);
if (Soft_t or R_chk=1) then
if abs(Error_n) < DEAD_BAND or HOLD then
OUT := OUTchk + Dout_int;