mjsousa@1011: mjsousa@1011: mjsousa@1011: /**** mjsousa@1011: * IEC 61131-3 standard function block library mjsousa@1011: */ mjsousa@1011: mjsousa@1011: /* NOTE: The code in this file was generated by iec2c (i.e. matiec C compiler), using as source mjsousa@1011: * the *.txt files in the 'lib' directory. mjsousa@1011: * The only 'manual' change was: mjsousa@1011: * - to merge the generated .h and .c files into this single file mjsousa@1011: * - to remove the forward declarations of the functions mjsousa@1011: * - to change the function prototypes to become 'static'. mjsousa@1011: * e.g.: static void R_TRIG_init__(...) mjsousa@1011: * ^^^^^^ mjsousa@1011: * mjsousa@1011: * NOTE: If the structure of the C code generated by iec2c (matiec) should change, then this C 'library' mjsousa@1011: * file will need to be recompiled. mjsousa@1011: * The correct way of going about this would be to have this file be automatically generated during mjsousa@1011: * the build process (i.e. after compiling matiec), but we will leave this for later if it ever mjsousa@1011: * becomes necessary. mjsousa@1011: * mjsousa@1011: * WARNING: There are 2 versions of this file: mjsousa@1011: * - file: iec_std_FB.h mjsousa@1011: * Version to be used when the EN and ENO parameters are implicitly generated mjsousa@1011: * for all functions and function blocks mjsousa@1011: * - file: iec_std_FB_no_ENENO.h mjsousa@1011: * Version to be used when the EN and ENO parameters are NOT implicitly generated mjsousa@1011: * for all functions and function blocks mjsousa@1011: */ mjsousa@1011: mjsousa@1011: #ifndef _IEC_STD_FB_H mjsousa@1011: #define _IEC_STD_FB_H mjsousa@1011: mjsousa@1011: mjsousa@1011: #include "accessor.h" mjsousa@1011: mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK R_TRIG mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CLK) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(BOOL,M) mjsousa@1011: mjsousa@1011: } R_TRIG; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK F_TRIG mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CLK) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(BOOL,M) mjsousa@1011: mjsousa@1011: } F_TRIG; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK SR mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,S1) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,Q1) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: mjsousa@1011: } SR; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK RS mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,S) mjsousa@1011: __DECLARE_VAR(BOOL,R1) mjsousa@1011: __DECLARE_VAR(BOOL,Q1) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: mjsousa@1011: } RS; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTU mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(INT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(INT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTU; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTU_DINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(DINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(DINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTU_DINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTU_LINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(LINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(LINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTU_LINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTU_UDINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(UDINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(UDINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTU_UDINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTU_ULINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(ULINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(ULINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTU_ULINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTD mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(INT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(INT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: mjsousa@1011: } CTD; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTD_DINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(DINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(DINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: mjsousa@1011: } CTD_DINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTD_LINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(LINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(LINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: mjsousa@1011: } CTD_LINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTD_UDINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(UDINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(UDINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: mjsousa@1011: } CTD_UDINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTD_ULINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(ULINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(ULINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: mjsousa@1011: } CTD_ULINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTUD mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(INT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,QU) mjsousa@1011: __DECLARE_VAR(BOOL,QD) mjsousa@1011: __DECLARE_VAR(INT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTUD; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTUD_DINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(DINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,QU) mjsousa@1011: __DECLARE_VAR(BOOL,QD) mjsousa@1011: __DECLARE_VAR(DINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTUD_DINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTUD_LINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(LINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,QU) mjsousa@1011: __DECLARE_VAR(BOOL,QD) mjsousa@1011: __DECLARE_VAR(LINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTUD_LINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTUD_UDINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(UDINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,QU) mjsousa@1011: __DECLARE_VAR(BOOL,QD) mjsousa@1011: __DECLARE_VAR(UDINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTUD_UDINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK CTUD_ULINT mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CU) mjsousa@1011: __DECLARE_VAR(BOOL,CD) mjsousa@1011: __DECLARE_VAR(BOOL,R) mjsousa@1011: __DECLARE_VAR(BOOL,LD) mjsousa@1011: __DECLARE_VAR(ULINT,PV) mjsousa@1011: __DECLARE_VAR(BOOL,QU) mjsousa@1011: __DECLARE_VAR(BOOL,QD) mjsousa@1011: __DECLARE_VAR(ULINT,CV) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: R_TRIG CD_T; mjsousa@1011: R_TRIG CU_T; mjsousa@1011: mjsousa@1011: } CTUD_ULINT; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK TP mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,IN) mjsousa@1011: __DECLARE_VAR(TIME,PT) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(TIME,ET) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(SINT,STATE) mjsousa@1011: __DECLARE_VAR(BOOL,PREV_IN) mjsousa@1011: __DECLARE_VAR(TIME,CURRENT_TIME) mjsousa@1011: __DECLARE_VAR(TIME,START_TIME) mjsousa@1011: mjsousa@1011: } TP; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK TON mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,IN) mjsousa@1011: __DECLARE_VAR(TIME,PT) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(TIME,ET) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(SINT,STATE) mjsousa@1011: __DECLARE_VAR(BOOL,PREV_IN) mjsousa@1011: __DECLARE_VAR(TIME,CURRENT_TIME) mjsousa@1011: __DECLARE_VAR(TIME,START_TIME) mjsousa@1011: mjsousa@1011: } TON; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK TOF mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,IN) mjsousa@1011: __DECLARE_VAR(TIME,PT) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(TIME,ET) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(SINT,STATE) mjsousa@1011: __DECLARE_VAR(BOOL,PREV_IN) mjsousa@1011: __DECLARE_VAR(TIME,CURRENT_TIME) mjsousa@1011: __DECLARE_VAR(TIME,START_TIME) mjsousa@1011: mjsousa@1011: } TOF; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK DERIVATIVE mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,RUN) mjsousa@1011: __DECLARE_VAR(REAL,XIN) mjsousa@1011: __DECLARE_VAR(TIME,CYCLE) mjsousa@1011: __DECLARE_VAR(REAL,XOUT) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(REAL,X1) mjsousa@1011: __DECLARE_VAR(REAL,X2) mjsousa@1011: __DECLARE_VAR(REAL,X3) mjsousa@1011: mjsousa@1011: } DERIVATIVE; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK HYSTERESIS mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(REAL,XIN1) mjsousa@1011: __DECLARE_VAR(REAL,XIN2) mjsousa@1011: __DECLARE_VAR(REAL,EPS) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: mjsousa@1011: } HYSTERESIS; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK INTEGRAL mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,RUN) mjsousa@1011: __DECLARE_VAR(BOOL,R1) mjsousa@1011: __DECLARE_VAR(REAL,XIN) mjsousa@1011: __DECLARE_VAR(REAL,X0) mjsousa@1011: __DECLARE_VAR(TIME,CYCLE) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(REAL,XOUT) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: mjsousa@1011: } INTEGRAL; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK PID mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,AUTO) mjsousa@1011: __DECLARE_VAR(REAL,PV) mjsousa@1011: __DECLARE_VAR(REAL,SP) mjsousa@1011: __DECLARE_VAR(REAL,X0) mjsousa@1011: __DECLARE_VAR(REAL,KP) mjsousa@1011: __DECLARE_VAR(REAL,TR) mjsousa@1011: __DECLARE_VAR(REAL,TD) mjsousa@1011: __DECLARE_VAR(TIME,CYCLE) mjsousa@1011: __DECLARE_VAR(REAL,XOUT) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(REAL,ERROR) mjsousa@1011: INTEGRAL ITERM; mjsousa@1011: DERIVATIVE DTERM; mjsousa@1011: mjsousa@1011: } PID; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK RAMP mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,RUN) mjsousa@1011: __DECLARE_VAR(REAL,X0) mjsousa@1011: __DECLARE_VAR(REAL,X1) mjsousa@1011: __DECLARE_VAR(TIME,TR) mjsousa@1011: __DECLARE_VAR(TIME,CYCLE) mjsousa@1011: __DECLARE_VAR(BOOL,BUSY) mjsousa@1011: __DECLARE_VAR(REAL,XOUT) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(REAL,XI) mjsousa@1011: __DECLARE_VAR(TIME,T) mjsousa@1011: mjsousa@1011: } RAMP; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK RTC mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,IN) mjsousa@1011: __DECLARE_VAR(DT,PDT) mjsousa@1011: __DECLARE_VAR(BOOL,Q) mjsousa@1011: __DECLARE_VAR(DT,CDT) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(BOOL,PREV_IN) mjsousa@1011: __DECLARE_VAR(TIME,OFFSET) mjsousa@1011: __DECLARE_VAR(DT,CURRENT_TIME) mjsousa@1011: mjsousa@1011: } RTC; mjsousa@1011: mjsousa@1011: // FUNCTION_BLOCK SEMA mjsousa@1011: // Data part mjsousa@1011: typedef struct { mjsousa@1011: // FB Interface - IN, OUT, IN_OUT variables mjsousa@1011: __DECLARE_VAR(BOOL,CLAIM) mjsousa@1011: __DECLARE_VAR(BOOL,RELEASE) mjsousa@1011: __DECLARE_VAR(BOOL,BUSY) mjsousa@1011: mjsousa@1011: // FB private variables - TEMP, private and located variables mjsousa@1011: __DECLARE_VAR(BOOL,Q_INTERNAL) mjsousa@1011: mjsousa@1011: } SEMA; mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void R_TRIG_init__(R_TRIG *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CLK,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->M,__BOOL_LITERAL(FALSE),1) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void R_TRIG_body__(R_TRIG *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CLK,) && !(__GET_VAR(data__->M,)))); mjsousa@1011: __SET_VAR(data__->,M,,__GET_VAR(data__->CLK,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // R_TRIG_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void F_TRIG_init__(F_TRIG *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CLK,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->M,__BOOL_LITERAL(FALSE),1) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void F_TRIG_body__(F_TRIG *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q,,(!(__GET_VAR(data__->CLK,)) && !(__GET_VAR(data__->M,)))); mjsousa@1011: __SET_VAR(data__->,M,,!(__GET_VAR(data__->CLK,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // F_TRIG_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void SR_init__(SR *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->S1,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->Q1,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void SR_body__(SR *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q1,,(__GET_VAR(data__->S1,) || (!(__GET_VAR(data__->R,)) && __GET_VAR(data__->Q1,)))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // SR_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void RS_init__(RS *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->S,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R1,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->Q1,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void RS_body__(RS *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q1,,(!(__GET_VAR(data__->R1,)) && (__GET_VAR(data__->S,) || __GET_VAR(data__->Q1,)))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // RS_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTU_init__(CTU *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTU_body__(CTU *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTU_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTU_DINT_init__(CTU_DINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTU_DINT_body__(CTU_DINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTU_DINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTU_LINT_init__(CTU_LINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTU_LINT_body__(CTU_LINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTU_LINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTU_UDINT_init__(CTU_UDINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTU_UDINT_body__(CTU_UDINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTU_UDINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTU_ULINT_init__(CTU_ULINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTU_ULINT_body__(CTU_ULINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTU_ULINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTD_init__(CTD *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTD_body__(CTD *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTD_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTD_DINT_init__(CTD_DINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTD_DINT_body__(CTD_DINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTD_DINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTD_LINT_init__(CTD_LINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTD_LINT_body__(CTD_LINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTD_LINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTD_UDINT_init__(CTD_UDINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTD_UDINT_body__(CTD_UDINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTD_UDINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTD_ULINT_init__(CTD_ULINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTD_ULINT_body__(CTD_ULINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTD_ULINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTUD_init__(CTUD *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->QU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->QD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTUD_body__(CTUD *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else { mjsousa@1011: if (!((__GET_VAR(data__->CU_T.Q,) && __GET_VAR(data__->CD_T.Q,)))) { mjsousa@1011: if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,QU,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: __SET_VAR(data__->,QD,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTUD_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTUD_DINT_init__(CTUD_DINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->QU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->QD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTUD_DINT_body__(CTUD_DINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else { mjsousa@1011: if (!((__GET_VAR(data__->CU_T.Q,) && __GET_VAR(data__->CD_T.Q,)))) { mjsousa@1011: if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,QU,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: __SET_VAR(data__->,QD,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTUD_DINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTUD_LINT_init__(CTUD_LINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->QU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->QD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTUD_LINT_body__(CTUD_LINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else { mjsousa@1011: if (!((__GET_VAR(data__->CU_T.Q,) && __GET_VAR(data__->CD_T.Q,)))) { mjsousa@1011: if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,QU,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: __SET_VAR(data__->,QD,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTUD_LINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTUD_UDINT_init__(CTUD_UDINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->QU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->QD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTUD_UDINT_body__(CTUD_UDINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else { mjsousa@1011: if (!((__GET_VAR(data__->CU_T.Q,) && __GET_VAR(data__->CD_T.Q,)))) { mjsousa@1011: if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,QU,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: __SET_VAR(data__->,QD,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTUD_UDINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void CTUD_ULINT_init__(CTUD_ULINT *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->LD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->QU,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->QD,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CV,0,retain) mjsousa@1011: R_TRIG_init__(&data__->CD_T,retain); mjsousa@1011: R_TRIG_init__(&data__->CU_T,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void CTUD_ULINT_body__(CTUD_ULINT *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->CD_T.,CLK,,__GET_VAR(data__->CD,)); mjsousa@1011: R_TRIG_body__(&data__->CD_T); mjsousa@1011: __SET_VAR(data__->CU_T.,CLK,,__GET_VAR(data__->CU,)); mjsousa@1011: R_TRIG_body__(&data__->CU_T); mjsousa@1011: if (__GET_VAR(data__->R,)) { mjsousa@1011: __SET_VAR(data__->,CV,,0); mjsousa@1011: } else if (__GET_VAR(data__->LD,)) { mjsousa@1011: __SET_VAR(data__->,CV,,__GET_VAR(data__->PV,)); mjsousa@1011: } else { mjsousa@1011: if (!((__GET_VAR(data__->CU_T.Q,) && __GET_VAR(data__->CD_T.Q,)))) { mjsousa@1011: if ((__GET_VAR(data__->CU_T.Q,) && (__GET_VAR(data__->CV,) < __GET_VAR(data__->PV,)))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) + 1)); mjsousa@1011: } else if ((__GET_VAR(data__->CD_T.Q,) && (__GET_VAR(data__->CV,) > 0))) { mjsousa@1011: __SET_VAR(data__->,CV,,(__GET_VAR(data__->CV,) - 1)); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,QU,,(__GET_VAR(data__->CV,) >= __GET_VAR(data__->PV,))); mjsousa@1011: __SET_VAR(data__->,QD,,(__GET_VAR(data__->CV,) <= 0)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // CTUD_ULINT_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void TP_init__(TP *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PT,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->ET,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->STATE,0,retain) mjsousa@1011: __INIT_VAR(data__->PREV_IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CURRENT_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->START_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void TP_body__(TP *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: #define GetFbVar(var,...) __GET_VAR(data__->var,__VA_ARGS__) mjsousa@1011: #define SetFbVar(var,val,...) __SET_VAR(data__->,var,__VA_ARGS__,val) mjsousa@1011: __SET_VAR(data__->,CURRENT_TIME,,__CURRENT_TIME) mjsousa@1011: #undef GetFbVar mjsousa@1011: #undef SetFbVar mjsousa@1011: ; mjsousa@1011: if ((((__GET_VAR(data__->STATE,) == 0) && !(__GET_VAR(data__->PREV_IN,))) && __GET_VAR(data__->IN,))) { mjsousa@1011: __SET_VAR(data__->,STATE,,1); mjsousa@1011: __SET_VAR(data__->,Q,,__BOOL_LITERAL(TRUE)); mjsousa@1011: __SET_VAR(data__->,START_TIME,,__GET_VAR(data__->CURRENT_TIME,)); mjsousa@1011: } else if ((__GET_VAR(data__->STATE,) == 1)) { mjsousa@1011: if (LE_TIME(2, __time_add(__GET_VAR(data__->START_TIME,), __GET_VAR(data__->PT,)), __GET_VAR(data__->CURRENT_TIME,))) { mjsousa@1011: __SET_VAR(data__->,STATE,,2); mjsousa@1011: __SET_VAR(data__->,Q,,__BOOL_LITERAL(FALSE)); mjsousa@1011: __SET_VAR(data__->,ET,,__GET_VAR(data__->PT,)); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,ET,,__time_sub(__GET_VAR(data__->CURRENT_TIME,), __GET_VAR(data__->START_TIME,))); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: if (((__GET_VAR(data__->STATE,) == 2) && !(__GET_VAR(data__->IN,)))) { mjsousa@1011: __SET_VAR(data__->,ET,,__time_to_timespec(1, 0, 0, 0, 0, 0)); mjsousa@1011: __SET_VAR(data__->,STATE,,0); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,PREV_IN,,__GET_VAR(data__->IN,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // TP_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void TON_init__(TON *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PT,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->ET,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->STATE,0,retain) mjsousa@1011: __INIT_VAR(data__->PREV_IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CURRENT_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->START_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void TON_body__(TON *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: #define GetFbVar(var,...) __GET_VAR(data__->var,__VA_ARGS__) mjsousa@1011: #define SetFbVar(var,val,...) __SET_VAR(data__->,var,__VA_ARGS__,val) mjsousa@1011: __SET_VAR(data__->,CURRENT_TIME,,__CURRENT_TIME) mjsousa@1011: #undef GetFbVar mjsousa@1011: #undef SetFbVar mjsousa@1011: ; mjsousa@1011: if ((((__GET_VAR(data__->STATE,) == 0) && !(__GET_VAR(data__->PREV_IN,))) && __GET_VAR(data__->IN,))) { mjsousa@1011: __SET_VAR(data__->,STATE,,1); mjsousa@1011: __SET_VAR(data__->,Q,,__BOOL_LITERAL(FALSE)); mjsousa@1011: __SET_VAR(data__->,START_TIME,,__GET_VAR(data__->CURRENT_TIME,)); mjsousa@1011: } else { mjsousa@1011: if (!(__GET_VAR(data__->IN,))) { mjsousa@1011: __SET_VAR(data__->,ET,,__time_to_timespec(1, 0, 0, 0, 0, 0)); mjsousa@1011: __SET_VAR(data__->,Q,,__BOOL_LITERAL(FALSE)); mjsousa@1011: __SET_VAR(data__->,STATE,,0); mjsousa@1011: } else if ((__GET_VAR(data__->STATE,) == 1)) { mjsousa@1011: if (LE_TIME(2, __time_add(__GET_VAR(data__->START_TIME,), __GET_VAR(data__->PT,)), __GET_VAR(data__->CURRENT_TIME,))) { mjsousa@1011: __SET_VAR(data__->,STATE,,2); mjsousa@1011: __SET_VAR(data__->,Q,,__BOOL_LITERAL(TRUE)); mjsousa@1011: __SET_VAR(data__->,ET,,__GET_VAR(data__->PT,)); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,ET,,__time_sub(__GET_VAR(data__->CURRENT_TIME,), __GET_VAR(data__->START_TIME,))); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,PREV_IN,,__GET_VAR(data__->IN,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // TON_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void TOF_init__(TOF *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PT,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->ET,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->STATE,0,retain) mjsousa@1011: __INIT_VAR(data__->PREV_IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CURRENT_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->START_TIME,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void TOF_body__(TOF *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: #define GetFbVar(var,...) __GET_VAR(data__->var,__VA_ARGS__) mjsousa@1011: #define SetFbVar(var,val,...) __SET_VAR(data__->,var,__VA_ARGS__,val) mjsousa@1011: __SET_VAR(data__->,CURRENT_TIME,,__CURRENT_TIME) mjsousa@1011: #undef GetFbVar mjsousa@1011: #undef SetFbVar mjsousa@1011: ; mjsousa@1011: if ((((__GET_VAR(data__->STATE,) == 0) && __GET_VAR(data__->PREV_IN,)) && !(__GET_VAR(data__->IN,)))) { mjsousa@1011: __SET_VAR(data__->,STATE,,1); mjsousa@1011: __SET_VAR(data__->,START_TIME,,__GET_VAR(data__->CURRENT_TIME,)); mjsousa@1011: } else { mjsousa@1011: if (__GET_VAR(data__->IN,)) { mjsousa@1011: __SET_VAR(data__->,ET,,__time_to_timespec(1, 0, 0, 0, 0, 0)); mjsousa@1011: __SET_VAR(data__->,STATE,,0); mjsousa@1011: } else if ((__GET_VAR(data__->STATE,) == 1)) { mjsousa@1011: if (LE_TIME(2, __time_add(__GET_VAR(data__->START_TIME,), __GET_VAR(data__->PT,)), __GET_VAR(data__->CURRENT_TIME,))) { mjsousa@1011: __SET_VAR(data__->,STATE,,2); mjsousa@1011: __SET_VAR(data__->,ET,,__GET_VAR(data__->PT,)); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,ET,,__time_sub(__GET_VAR(data__->CURRENT_TIME,), __GET_VAR(data__->START_TIME,))); mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,(__GET_VAR(data__->IN,) || (__GET_VAR(data__->STATE,) == 1))); mjsousa@1011: __SET_VAR(data__->,PREV_IN,,__GET_VAR(data__->IN,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // TOF_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void DERIVATIVE_init__(DERIVATIVE *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->RUN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->XIN,0,retain) mjsousa@1011: __INIT_VAR(data__->CYCLE,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->XOUT,0,retain) mjsousa@1011: __INIT_VAR(data__->X1,0,retain) mjsousa@1011: __INIT_VAR(data__->X2,0,retain) mjsousa@1011: __INIT_VAR(data__->X3,0,retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void DERIVATIVE_body__(DERIVATIVE *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: if (__GET_VAR(data__->RUN,)) { mjsousa@1011: __SET_VAR(data__->,XOUT,,((((3.0 * (__GET_VAR(data__->XIN,) - __GET_VAR(data__->X3,))) + __GET_VAR(data__->X1,)) - __GET_VAR(data__->X2,)) / (10.0 * TIME_TO_REAL((TIME)__GET_VAR(data__->CYCLE,))))); mjsousa@1011: __SET_VAR(data__->,X3,,__GET_VAR(data__->X2,)); mjsousa@1011: __SET_VAR(data__->,X2,,__GET_VAR(data__->X1,)); mjsousa@1011: __SET_VAR(data__->,X1,,__GET_VAR(data__->XIN,)); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,XOUT,,0.0); mjsousa@1011: __SET_VAR(data__->,X1,,__GET_VAR(data__->XIN,)); mjsousa@1011: __SET_VAR(data__->,X2,,__GET_VAR(data__->XIN,)); mjsousa@1011: __SET_VAR(data__->,X3,,__GET_VAR(data__->XIN,)); mjsousa@1011: }; mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // DERIVATIVE_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void HYSTERESIS_init__(HYSTERESIS *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->XIN1,0,retain) mjsousa@1011: __INIT_VAR(data__->XIN2,0,retain) mjsousa@1011: __INIT_VAR(data__->EPS,0,retain) mjsousa@1011: __INIT_VAR(data__->Q,0,retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void HYSTERESIS_body__(HYSTERESIS *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: if (__GET_VAR(data__->Q,)) { mjsousa@1011: if ((__GET_VAR(data__->XIN1,) < (__GET_VAR(data__->XIN2,) - __GET_VAR(data__->EPS,)))) { mjsousa@1011: __SET_VAR(data__->,Q,,0); mjsousa@1011: }; mjsousa@1011: } else if ((__GET_VAR(data__->XIN1,) > (__GET_VAR(data__->XIN2,) + __GET_VAR(data__->EPS,)))) { mjsousa@1011: __SET_VAR(data__->,Q,,1); mjsousa@1011: }; mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // HYSTERESIS_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void INTEGRAL_init__(INTEGRAL *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->RUN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->R1,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->XIN,0,retain) mjsousa@1011: __INIT_VAR(data__->X0,0,retain) mjsousa@1011: __INIT_VAR(data__->CYCLE,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->XOUT,0,retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void INTEGRAL_body__(INTEGRAL *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q,,!(__GET_VAR(data__->R1,))); mjsousa@1011: if (__GET_VAR(data__->R1,)) { mjsousa@1011: __SET_VAR(data__->,XOUT,,__GET_VAR(data__->X0,)); mjsousa@1011: } else if (__GET_VAR(data__->RUN,)) { mjsousa@1011: __SET_VAR(data__->,XOUT,,(__GET_VAR(data__->XOUT,) + (__GET_VAR(data__->XIN,) * TIME_TO_REAL((TIME)__GET_VAR(data__->CYCLE,))))); mjsousa@1011: }; mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // INTEGRAL_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void PID_init__(PID *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->AUTO,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PV,0,retain) mjsousa@1011: __INIT_VAR(data__->SP,0,retain) mjsousa@1011: __INIT_VAR(data__->X0,0,retain) mjsousa@1011: __INIT_VAR(data__->KP,0,retain) mjsousa@1011: __INIT_VAR(data__->TR,0,retain) mjsousa@1011: __INIT_VAR(data__->TD,0,retain) mjsousa@1011: __INIT_VAR(data__->CYCLE,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->XOUT,0,retain) mjsousa@1011: __INIT_VAR(data__->ERROR,0,retain) mjsousa@1011: INTEGRAL_init__(&data__->ITERM,retain); mjsousa@1011: DERIVATIVE_init__(&data__->DTERM,retain); mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void PID_body__(PID *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,ERROR,,(__GET_VAR(data__->PV,) - __GET_VAR(data__->SP,))); mjsousa@1011: __SET_VAR(data__->ITERM.,RUN,,__GET_VAR(data__->AUTO,)); mjsousa@1011: __SET_VAR(data__->ITERM.,R1,,!(__GET_VAR(data__->AUTO,))); mjsousa@1011: __SET_VAR(data__->ITERM.,XIN,,__GET_VAR(data__->ERROR,)); mjsousa@1011: __SET_VAR(data__->ITERM.,X0,,(__GET_VAR(data__->TR,) * (__GET_VAR(data__->X0,) - __GET_VAR(data__->ERROR,)))); mjsousa@1011: __SET_VAR(data__->ITERM.,CYCLE,,__GET_VAR(data__->CYCLE,)); mjsousa@1011: INTEGRAL_body__(&data__->ITERM); mjsousa@1011: __SET_VAR(data__->DTERM.,RUN,,__GET_VAR(data__->AUTO,)); mjsousa@1011: __SET_VAR(data__->DTERM.,XIN,,__GET_VAR(data__->ERROR,)); mjsousa@1011: __SET_VAR(data__->DTERM.,CYCLE,,__GET_VAR(data__->CYCLE,)); mjsousa@1011: DERIVATIVE_body__(&data__->DTERM); mjsousa@1011: __SET_VAR(data__->,XOUT,,(__GET_VAR(data__->KP,) * ((__GET_VAR(data__->ERROR,) + (__GET_VAR(data__->ITERM.XOUT,) / __GET_VAR(data__->TR,))) + (__GET_VAR(data__->DTERM.XOUT,) * __GET_VAR(data__->TD,))))); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // PID_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void RAMP_init__(RAMP *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->RUN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->X0,0,retain) mjsousa@1011: __INIT_VAR(data__->X1,0,retain) mjsousa@1011: __INIT_VAR(data__->TR,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->CYCLE,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->BUSY,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->XOUT,0.0,retain) mjsousa@1011: __INIT_VAR(data__->XI,0,retain) mjsousa@1011: __INIT_VAR(data__->T,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void RAMP_body__(RAMP *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,BUSY,,__GET_VAR(data__->RUN,)); mjsousa@1011: if (__GET_VAR(data__->RUN,)) { mjsousa@1011: if (GE_TIME(2, __GET_VAR(data__->T,), __GET_VAR(data__->TR,))) { mjsousa@1011: __SET_VAR(data__->,BUSY,,0); mjsousa@1011: __SET_VAR(data__->,XOUT,,__GET_VAR(data__->X1,)); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,XOUT,,(__GET_VAR(data__->XI,) + (((__GET_VAR(data__->X1,) - __GET_VAR(data__->XI,)) * TIME_TO_REAL((TIME)__GET_VAR(data__->T,))) / TIME_TO_REAL((TIME)__GET_VAR(data__->TR,))))); mjsousa@1011: __SET_VAR(data__->,T,,__time_add(__GET_VAR(data__->T,), __GET_VAR(data__->CYCLE,))); mjsousa@1011: }; mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,XOUT,,__GET_VAR(data__->X0,)); mjsousa@1011: __SET_VAR(data__->,XI,,__GET_VAR(data__->X0,)); mjsousa@1011: __SET_VAR(data__->,T,,__time_to_timespec(1, 0, 0, 0, 0, 0)); mjsousa@1011: }; mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // RAMP_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void RTC_init__(RTC *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->PDT,__dt_to_timespec(0, 0, 0, 1, 1, 1970),retain) mjsousa@1011: __INIT_VAR(data__->Q,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->CDT,__dt_to_timespec(0, 0, 0, 1, 1, 1970),retain) mjsousa@1011: __INIT_VAR(data__->PREV_IN,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->OFFSET,__time_to_timespec(1, 0, 0, 0, 0, 0),retain) mjsousa@1011: __INIT_VAR(data__->CURRENT_TIME,__dt_to_timespec(0, 0, 0, 1, 1, 1970),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void RTC_body__(RTC *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: #define GetFbVar(var,...) __GET_VAR(data__->var,__VA_ARGS__) mjsousa@1011: #define SetFbVar(var,val,...) __SET_VAR(data__->,var,__VA_ARGS__,val) mjsousa@1011: __SET_VAR(data__->,CURRENT_TIME,,__CURRENT_TIME) mjsousa@1011: #undef GetFbVar mjsousa@1011: #undef SetFbVar mjsousa@1011: ; mjsousa@1011: if (__GET_VAR(data__->IN,)) { mjsousa@1011: if (!(__GET_VAR(data__->PREV_IN,))) { mjsousa@1011: __SET_VAR(data__->,OFFSET,,__time_sub(__GET_VAR(data__->PDT,), __GET_VAR(data__->CURRENT_TIME,))); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,CDT,,__time_add(__GET_VAR(data__->CURRENT_TIME,), __GET_VAR(data__->OFFSET,))); mjsousa@1011: } else { mjsousa@1011: __SET_VAR(data__->,CDT,,__GET_VAR(data__->CURRENT_TIME,)); mjsousa@1011: }; mjsousa@1011: __SET_VAR(data__->,Q,,__GET_VAR(data__->IN,)); mjsousa@1011: __SET_VAR(data__->,PREV_IN,,__GET_VAR(data__->IN,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // RTC_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: static void SEMA_init__(SEMA *data__, BOOL retain) { mjsousa@1011: __INIT_VAR(data__->CLAIM,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->RELEASE,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->BUSY,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: __INIT_VAR(data__->Q_INTERNAL,__BOOL_LITERAL(FALSE),retain) mjsousa@1011: } mjsousa@1011: mjsousa@1011: // Code part mjsousa@1011: static void SEMA_body__(SEMA *data__) { mjsousa@1011: // Initialise TEMP variables mjsousa@1011: mjsousa@1011: __SET_VAR(data__->,Q_INTERNAL,,(__GET_VAR(data__->CLAIM,) || (__GET_VAR(data__->Q_INTERNAL,) && !(__GET_VAR(data__->RELEASE,))))); mjsousa@1011: __SET_VAR(data__->,BUSY,,__GET_VAR(data__->Q_INTERNAL,)); mjsousa@1011: mjsousa@1011: goto __end; mjsousa@1011: mjsousa@1011: __end: mjsousa@1011: return; mjsousa@1011: } // SEMA_body__() mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: mjsousa@1011: #endif //_IEC_STD_FB_H