Programmieren = Parametrieren
Einige Hersteller von teuren, lizenzpflichtigen Visualisierungsystemen werben mit dem Slogan „Parametrieren statt Programmieren“. Dieser Slogan ist in dreierlei Hinsicht zu kritisieren.
- 1. Jede Form objektorientierter, strukturierter Programmierung läuft immer darauf hinaus, dass letztlich Objekte parametriert werden.
- 2. Die Parametrierung von Objekten ist nichts anderes als Programmierung in einer Metaprogrammiersprache und muss demzufolge erlernt werden.
- 3. Visualisierung ist Teil der Steuerung von Maschinen und Anlagen, Programmierkenntnisse werden also immer benötigt.
Im folgenden zeigen wir an Hand des Quelltextes unseres Beispiels, dass die konkrete Erstellung einer Applikation von Online-Automation nichts anderes ist als die Parametrierung von vordefinierten Objekten ist. Als Werkzeug wir lediglich ein geeigneter Texteditor benötigt.
// Deklaration der grundlegenden Eigenschaften des Bildes var BackGrafic = "grafic/silos.png"; var ImgWidth = 800; var ImgHeight = 600;Erläuterung
Basis eines Bildes ist eine Hintergrundgrafik, deren Dateiname und deren Größe hier definiert werden. Die Hintergrundgrafik lässt sich mit handelsüblichen Editoren erstellen.//Deklaration der konstanten Elemente im Bild // zulässige Elemente sind fbTitle, fbText, fbGrafic var ConstObj = new Array(); ConstObj[0] = new fbTitle(2,598,"Beispiel 1"); ConstObj[0].BgColor = ""; ConstObj[0].Color = "#B40000"; ConstObj[0].FtSize = "24" ConstObj[0].FtWeight = "bold"Erläuterung
Über die Hintergrundgrafik können zunächst konstante Objekte wie Titel, Texte oder weitere Grafiken gelegt werden. In unserem Beispiel machen wir von diesen Möglichkeiten nur für den Titel Gebrauch. Nach Deklaration des Objektes werden einige Eigenschaften wie Vorder- und Hintergrundfarbe sowie die Zeichengröße neu definiert.// Deklaration der AJAX-Verbindungen des Bildes // zulässig ist nur das Element fbAjax var Connection = new Array(); Connection[0] = new fbAjax(0,"","INTERN"); var CycleTime = 500; // msErläuterung
In unserem Beispiel wird die SPS lediglich auf ihrem PC simuliert. Im Normalfall erfolgt hier die Definition der Verbindung zur SPS. Die Variable CycleTime legt die zyklische Abfrage der Variablen aus der SPS fest.// Deklaration der dynamisierten Elemente des Bildes // zulässige Elemente sind fbValOut, fbTxtOut, fbGraficOut, fbCcIcon, fbCcBox, fbHorBar, fbVerBar, // fbTxtListOut, fbGraficListOut, fbGetUserVar var VisObj = new Array(); VisObj[0] = new fbValOut (96,277,"PLC_1.LIAC101.actValue",0,";real;0;2;m","LIAC101"); VisObj[0].VarCcStatus = "PLC_1.LIAC101.Status"; VisObj[0].OnClickFunc = "inputNumVal"; VisObj[1] = new fbValOut (406,277,"PLC_1.B101.actValue",0,";real;0;2;t","B101"); VisObj[1].VarCcStatus = "PLC_1.B101.Status"; VisObj[1].OnClickFunc = "inputNumVal"; VisObj[2] = new fbValOut (96,475,"PLC_1.LIAC102.actValue",0,";real;0;2;m","LIAC102"); VisObj[2].VarCcStatus = "PLC_1.LIAC102.Status"; VisObj[2].OnClickFunc = "inputNumVal"; VisObj[3] = new fbValOut (406,475,"PLC_1.B102.actValue",0,";real;0;2;t","B102"); VisObj[3].VarCcStatus = "PLC_1.B102.Status"; VisObj[3].OnClickFunc = "inputNumVal"; VisObj[4] = new fbValOut (344,45,"PLC_1.B101.outValue",0,"Dosierung: ;real;4;0;kg","Mehl"); VisObj[4].Named = 1; VisObj[4].Width = 120; VisObj[4].FtSize = 12; VisObj[4].Font = "Arial" VisObj[4].N_FtSize = 12; VisObj[4].N_FtWeight = "bold"; VisObj[4].BgColor = "#FF00FF"; VisObj[4].Color = "#000000"; VisObj[4].OnClickFunc = "inputNumVal"; VisObj[5] = new fbValOut (344,635,"PLC_1.B102.outValue",0,"Dosierung: ;real;4;0;kg","Zucker"); VisObj[5].Named = 1; VisObj[5].Width = 120; VisObj[5].FtSize = 12; VisObj[5].Font = "Arial" VisObj[5].N_FtSize = 12; VisObj[5].N_FtWeight = "bold"; VisObj[5].BgColor = "#FF00FF"; VisObj[5].Color = "#000000"; VisObj[5].OnClickFunc = "inputNumVal"; VisObj[6] = new fbCcIcon (72,171,"PLC_1.Y101_1.Status",0,"icons/valve_h","Y101_1") VisObj[6].OnClickFunc = "useCmdButton"; VisObj[7] = new fbCcIcon (506,281,"PLC_1.Y101_2.Status",0,"icons/valve_v","Y101_2"); VisObj[7].OnClickFunc = "useCmdButton"; VisObj[8] = new fbCcIcon (72,71,"PLC_1.P101_1.Status",0,"icons/pump_r","P101_1") VisObj[8].OnClickFunc = "useCmdButton"; VisObj[9] = new fbCcIcon (72,594,"PLC_1.Y102_1.Status",0,"icons/valve_h","Y102_1"); VisObj[9].OnClickFunc = "useCmdButton"; VisObj[10] = new fbCcIcon (506,486,"PLC_1.Y102_2.Status",0,"icons/valve_v","Y102_2"); VisObj[10].OnClickFunc = "useCmdButton"; VisObj[11] = new fbCcIcon (72,694,"PLC_1.P102_1.Status",0,"icons/pump_r","P102_1"); VisObj[11].OnClickFunc = "useCmdButton"; VisObj[12] = new fbCcBox (386,45,"PLC_1.B101.Status",0,"Dosierung"); VisObj[12].Width = 120; VisObj[12].OnClickFunc = "useCmdButton"; VisObj[13] = new fbVerBar (146,300,"PLC_1.B101.Level",0,250,"Level"); VisObj[14] = new fbVerBar (146,499,"PLC_1.B102.Level",0,250,"Level");Erläuterung
Das wesentliche einer Visalisierung sind die dynamischen Elemente.// Deklaration der Navigationselemente im Bild // zulässige Elemente sind fbNavButton, fbNavText, fbNavGrafic var ActionObj = new Array(); ActionObj[0] = new fbCmdButton(0,0,"nichts") ActionObj[1] = new fbHelpButton(560,730,"Hilfe","") ActionObj[1].HelpTxt = "Spielen Sie ruhig herum! Wenn Sie auf ein Visualisierungselement klicken, erscheint ein Steuer- oder Eingabeelement. Damit können Sie dieses Beispiel bedienen."Erläuterung