Skip to main content
Skip table of contents

Wie kann ein eigener Programmgeber gebaut werden?

Sehr oft kommt es vor, dass Kunden anstelle der vorgefertigten Programmgebervisualisierung, lieber ihre eigene Programmgebervisualisierung haben möchten. Hierfür kann ein Prozessbild herangezogen und die Visualisierung für den Programmgeber nachgebaut werden. So können auch mehrere Programmgeber auf ein Prozessbild platziert werden.

In der Bibliothek JCmpVisu kann über die globale Variablenliste global auf alle Programmgeber zugegriffen werden.

Zustand

Abfrage des Programmgeberzustand:

// Query for the status of generator 1
CASE JCmpVisu.global.astProgramGenerator[1].ePscMode OF
// Generator no defined Mode
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_no_mode:
// Generator initialized and ready to start
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_stop:
// Generator loading program and necessary data
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_start:
// Generator running fast forward (waiting for start trigger)
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_start_timer_active:
// Generator automatic mode programm is running
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_auto_mode_run_program:
// Generator automatic mode start at actual value
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_auto_mode_start_at_X:
// Generator automatic mode programm is stopped
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_auto_mode_stopped:
// Generator automatic mode program is waiting
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_auto_mode_wait:
// Generator is in manual mode
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_manual_mode:
// Generator programm is finished
JCmpPgVisu.JUMOPSA.JUMOPSC.ePscOperationModeType._psc_program_finished:
END_CASE

Bedienung

Bedienung des Programmgeber:

// Operation of generator 1
// program start
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscStart;
// program stop
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscStop;
// program cancel
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscCancel;
// next section
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscNextSection;
// previous section
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscPreviousSection;
// manual mode
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscManual;
// program continue (if in wait-mode)
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscContinue;

Verwendet man die vordefinierten Buttons aus der Bibliothek JCmpVisuBasic, dann kann man als Übergabeparameter folgende Strukturvariablen verwenden:

// Controll generator 1 by buttons

// program start
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonStart
//program stop
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonPause
//program cancel
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonStop
// next section
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonSkipNext
// previous section
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonSkipPrevious
// manual mode
JCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonHand

Sollwerte

Sollwerte können wie folgt aus den Programmgebern ausgelesen werden:

// Read out setpoints of generator 1.

// Read out the setpoint (x = 0-29) from generator 1. Real-Value
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.arSetpointValues[x];
// Read out the setpoint (x = 0-29) from generator 1. String-Value with decimal places
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.asSetpointValues[x];
// Read out the setpoint name (x = 0-29) from generator 1.
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.awsSetpointNames[x];
// Read out the setpoint unit (x = 0-29) from generator 1.
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.awsSetpointUnits[x];

// Read out the setpoint (x = 0-29) from generator 1. Real-Value
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.arNextSetpointValues[x];
// Read out the setpoint (x = 0-29) from generator 1. String-Value with decimal places
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.asNextSetpointValues[x];

// Read out the contact (.0 - .31) from generator 1.
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.udiControlContacts.0;
// Read out the contact name (x = 0-29) from generator 1.
JCmpVisu.global.astProgramGenerator[1].stPscSetpoints.awsContactNames[x];

Istwerte

Die Übergabe der Istwerte an die Programmeber wird hier ausführlich beschrieben.

Programminformationen

// Program information of generator 1

// Name of generator 1
JCmpVisu.global.astProgramGenerator[1].wsActualPscName;
// Actual program name
JCmpVisu.global.astProgramGenerator[1].wsActualProgramName;
// Actual section number
JCmpVisu.global.astProgramGenerator[1].iActualSectionNo;

// Complete runtime, contains "hidden" runtimes caused by jump commands, e.g. next/prev. section
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiCompletePrgRunTime;
// Real program runtime
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiPrgRunTimeReal;
// Maximum runtime for complete Program
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgMaxRunTime;
// Maximum runtime at start section
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgMaxRunTimeAtSection;
// Actual Program runtime
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgRunTime;
// Remainig Program runtime
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgRunTimeRmg;
// Remainig Time for program Start
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiRemainigStartDelayTime;
// Program repeat counter
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiRepeatCounter;
// Maximum section duration
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionMaxRunTime;
// Actual section duration
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionRunTime;
// Real actual section runtime
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionRunTimeReal;
// Remaining section time
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionRunTimeRmg;
// Warning Flags, if one of the actual values is out of the tolerance band limits
JCmpVisu.global.astProgramGenerator[1].stPscStatusData.xToleranceWarning;

Programmauswahl

Für die Programmauswahl wird neben der Strukturvariable, das Objekt für die Programmauswahl benötigt.
Strukturvariable für den Programmgeber 1 wäre folgende:

// Program selection for generator 1
JCmpVisu.global.astProgramGenerator[1].stSelectionBoxPrograms

In der Bibliothek JCmpPgVisu wird das Objekt PscSelectionElement in die eigene Visualisierung eingefügt. Als Übergabeparameter wird die Strukturvariable (siehe Infobox ) eingegeben.

image-20240515-090912.png

Start über Parameter

Für die Startparameter wird folgende Strukturvariable benötigt:

// Start parameter for generator 1
JCmpVisu.global.astProgramGenerator[1].stDialogProgStart

Im Prozessbild wird nun einem Objekt (z.B. Button) die Eigenschaft OnMouseClick bearbeitet. OnMouseClick bekommt die Funktion Open Dialog. Als Dialog wird das vorgefertigte Dialogfenster JCmpPgVisu.DialogProgramStart ausgwählt. Für das Übergabeparameter stPscData wird die Strukturvariable (siehe Infobox) übergeben.

image-20240515-123803.png

Möchte man die vorgefertigten Buttons aus der Bibliothek JCmpVisuBasic benutzen, dann muss zusätzlich zu der obigen Beschreibung folgende Ergänzungen gemacht werden.

:No1: Deklaration einer Variable für den Button vom Type stVisuButtonType.

:No2: Die neue Variable als Übergabeparameter dem Button zuweisen.

:No3: Die folgenden Konfigurationen dienen lediglich der Animation des Buttons:

  • OnMouseDown: Execute ST-Code : stButtonDialog.xButtonFeedback := TRUE;

  • OnMouseLeave: Execute ST-Code : stButtonDialog.xButtonFeedback := FALSE;

  • OnMouseUp: Execute ST-Code : stButtonDialog.xButtonFeedback := FALSE;

image-20240515-132646.png

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.