ci-server-engineer/examples/CI-Eng-Sample/06_class_df.qli
cliu e6911796f7 Add template item, Traditional and Java classes and objects to CI-Eng-Sample
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:49:49 +10:00

72 lines
2.4 KiB
Text

@LANGUAGE
ENGLISH
@VERSION
1.03.00
! CI-Eng-Sample classes, compiled on load (COMPILE = 1), CI Server R1.03.00
! CIENG_INCR : traditional, based on the INCREMENT example of the Tutorial (IM 36K10G10-01EN 5.2)
! CIENG_TANK : traditional; prompt/attribute, signal to <object section>.LEVEL, item created from
! the template TEMPLATES.TPL_REAL (automatic name <object>.VOLUME), ERROR in the prolog
! CIENG_JFLOW: Java; attaches <object section>.INFLOW, creates <object>.sPerMin (automatic name)
! Changing a class that has objects: compile, then reset the class (see skill class-object-engineering).
@FIELDS
NAME,DESCRIPTION,PF_LANGUAGE,TRIGGER_1,COMPILE,LISTING_WANTED,METHOD
@CLASS_DF
"CIENG_INCR","Count CI-Eng-Sample.DEMO.COUNTER 1..100","Traditional","CIENG_1S",1,1,@"
CLASS CIENG_INCR;
PROLOG
SIGNAL INPUT := "CI-Eng-Sample.DEMO.COUNTER";
BODY
METHOD UP_AND_DOWN;
BODY
IF (INPUT >= 100) THEN
INPUT := 0;
ENDIF;
INPUT := INPUT + 1;
ENDMETHOD UP_AND_DOWN;
ENDCLASS CIENG_INCR;
"@
"CIENG_TANK","Tank volume from level x capacity","Traditional","",1,1,@"
CLASS CIENG_TANK;
PROLOG
ATTRIBUTE CAPACITY OBJECT FLOAT;
PROMPT CAPACITY QUERY "Tank capacity (m3)";
SIGNAL LEVEL := SECTION || ".LEVEL" TRIGGER VALUE;
SIGNAL VOLUME := FROM "CI-Eng-Sample.TEMPLATES.TPL_REAL" MAKE
"DESCRIPTION" EQUAL "Tank volume (m3), class CIENG_TANK";
IF CAPACITY <= 0 THEN
ERROR "CIENG_TANK: capacity must be > 0";
ENDIF;
BODY
METHOD CALC;
BODY
VOLUME := LEVEL * CAPACITY / 100.0;
IF LEVEL >=: 80.0 THEN
PRINT "CIENG_TANK ", SECTION, ": level reached 80 pct, volume ", VOLUME;
ENDIF;
ENDMETHOD CALC;
ENDCLASS CIENG_TANK;
"@
"CIENG_JFLOW","Inflow per minute (Java)","Java","",1,0,@"
import fasttools.processfast.*;
public class CIENG_JFLOW extends ProcessClass {
Signal sInflow = defineDoubleSignal(Signal.Trigger.VALUE);
Signal sPerMin = defineDoubleSignal();
public void create() {
attachItemToSignal(sInflow, getSectionsPath() + ".INFLOW");
createItemForSignal(sPerMin, "CI-Eng-Sample.TEMPLATES.TPL_REAL",
"DESCRIPTION", "Tank inflow (m3/min), class CIENG_JFLOW");
}
public void signalEvent(Signal signal) {
double mInflow = sInflow.getValueAsDouble();
sPerMin.setValue(mInflow / 60.0);
systemMessage("CIENG_JFLOW " + getTag() + ": inflow " + mInflow);
}
}
"@