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 1CASE 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 startJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscStart;
// program stopJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscStop;
// program cancelJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscCancel;
// next sectionJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscNextSection;
// previous sectionJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stPscCommand.xPscPreviousSection;
// manual modeJCmpVisu.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 startJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonStart
//program stopJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonPause
//program cancelJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonStop
// next sectionJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonSkipNext
// previous sectionJCmpVisu.global.astProgramGenerator[1].stPscCommandosCond.stButtonSkipPrevious
// manual modeJCmpVisu.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-ValueJCmpVisu.global.astProgramGenerator[1].stPscSetpoints.arSetpointValues[x];
// Read out the setpoint (x = 0-29) from generator 1. String-Value with decimal placesJCmpVisu.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-ValueJCmpVisu.global.astProgramGenerator[1].stPscSetpoints.arNextSetpointValues[x];
// Read out the setpoint (x = 0-29) from generator 1. String-Value with decimal placesJCmpVisu.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 1JCmpVisu.global.astProgramGenerator[1].wsActualPscName;
// Actual program nameJCmpVisu.global.astProgramGenerator[1].wsActualProgramName;
// Actual section numberJCmpVisu.global.astProgramGenerator[1].iActualSectionNo;
// Complete runtime, contains "hidden" runtimes caused by jump commands, e.g. next/prev. sectionJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiCompletePrgRunTime;
// Real program runtimeJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiPrgRunTimeReal;
// Maximum runtime for complete ProgramJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgMaxRunTime;
// Maximum runtime at start sectionJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgMaxRunTimeAtSection;
// Actual Program runtimeJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgRunTime;
// Remainig Program runtimeJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiProgRunTimeRmg;
// Remainig Time for program StartJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiRemainigStartDelayTime;
// Program repeat counterJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiRepeatCounter;
// Maximum section durationJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionMaxRunTime;
// Actual section durationJCmpVisu.global.astProgramGenerator[1].stPscStatusData.udiSectionRunTime;
// Real actual section runtimeJCmpVisu.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 limitsJCmpVisu.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 1JCmpVisu.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.
Start über Parameter
Für die Startparameter wird folgende Strukturvariable benötigt:
// Start parameter for generator 1JCmpVisu.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.
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;