![]() |
Lazarus Funktion als Baustein nutzen
Hallo :) hoffe ich habe das richtige Forum getroffen.
Ich bin eher unerfahren und hätte eine Frage. Bei der Programmierung einer SPS kann ich wiederholende Funktionen einmal Programmieren und dann als fertigen Baustein nutzen, mit veränderten Ein- und Ausgangswerten. Also z.B. eine Motorsteuerung, AN AUS NOTAUS LINKS- UND RECHTSlAUF... Kann ich vergleichbares in Lazarus erstellen? Als Beispiel: procedure TForm1.NAME1Click(Sender: TObject); begin IF NAME3 > 12 then NAME2.cells[0,1] := 'Pommes'; NAME2.cells[1,0] := 'Döner'; end; Es soll so sein, dass ich die Funktion in sich geschlossen habe und von außen nur die Eingabe (NAME1,NAME2) und Ausgabe (NAME2) habe. NAME1 = Button1 , Button2... NAME2= Stringgrid1, Stringgrid2... NAME3= 12,31,2... Ist das möglich, was nehme ich dazu? Vielen Dank |
AW: Lazarus Funktion als Baustein nutzen
|
AW: Lazarus Funktion als Baustein nutzen
Dies lässt sich problemlos umsetzen, allerdings empfehle ich Dir, dich vorgängig mit den allgemeinen Grundlagen zu befassen.
Den Motor starten kannst Du z.B. mit einer Function à la
Delphi-Quellcode:
Die Logik der SPS kannst Du vermutlich vom Ansatz her übernehmen.
function Motor_X_Achse(Drehrichtung : String; Geschwindigkeit : Integer) : String;
begin ... Result := Aktueller_Status_des_Motor; end; |
AW: Lazarus Funktion als Baustein nutzen
Hallo, danke für eure schnelle Antwort.
Die Motorsteuerung war nur ein Beispiel um meine Frage besser zu verstehen. Es geht eigentlich um eine Liste, Stringgrid. Ich habe eine erzeugt, mit Inhalt und je nach integer die Größe bestimmt usw.. und nun würde ich gerne eine andere Steinggrid an anderer Stelle mit anderen Werten aber selber Logik benutzen. Klar, ich könnte das ganze kopieren und stringgrid1 mit stringgrid2 tauschen, dachte voelleicht gibt es aber eine schönere Lösung. Ich hoffe es ist einigermaßen verständlich was ich möchte. Bei einer Funktion ändere ich ja eher das rechts vom := Ich würde gerne das linke ändern. Variable := bleibt fest. Variable := bleibt fest. ...... Variable soll dann stringgrid1.cells, steinggrid2.cells und so weiter sein. Dankeschön schonmal. Entschuldige wenn ich es etwas kompliziert schreibe, aber step7 funktion (nicht funktionsbaustein) trifft es vom Prinzip her am ehesten. |
AW: Lazarus Funktion als Baustein nutzen
Vielleicht sowas in der Art:
Delphi-Quellcode:
Die zu füllenden Werte könntest du theoretisch als zweiten Parameter in einem (zweidimensionalen) Array übergeben.
procedure TForm1.FillGrid(Grid: TStringGrid);
begin Grid.Cell[0, 1] := 'Cell 1'; Grid.Cell[0, 2] := 'Cell 2'; Grid.Cell[0, 3] := 'Cell 3'; Grid.Cell[0, 4] := 'Cell 4'; end; procedure TForm1.Button1Click(Sender: TObject); begin FillGrid(StringGrid1); end; procedure TForm1.Button2Click(Sender: TObject); begin FillGrid(StringGrid2); end; |
AW: Lazarus Funktion als Baustein nutzen
Guten Morgen, dass wäre auch eine Idee.
Nur nochmal für mich als Sicherheit, ich kann in einem Array keine “Objekte“ speichern? Also in etwa so.verzeihe mir die Form, aber ich bin grade am Handy. Array = label1 , label2..' Button.click Array1 := “hallo“; Buttonxy.click Array2 := “huhu“; |
AW: Lazarus Funktion als Baustein nutzen
Ein Array kann für alle möglichen Datentypen erstellt werden. Du kannst dir auch deine Objekte in die etwas reingeschrieben werden soll in einer TObjectList speichern.
Delphi-Quellcode:
Da du deine Delphi Version nicht genannt hast kann ich nicht sagen, ob es bei dir bereits Generics gibt oder nicht. Es gäbe also viele Möglichkeiten Objekte zu speichern. Hier kommt es auf den Anwendungsfall an und wie sinnvoll dann das Ganze ist.
type
MyComponentsArray = array of TComponent; // Oder auch array of TObject oder array of TStringGrid // Oder als ObjectList MyComponentsList = TObjectList<TComponent>; // Oder TObjectList<TStringGrid> oder einfach nur TObjectList --> Dann bist du für das Casten selbst verantwortlich implementation procedure ArrayTest; begin SetLength(MyComponentsArray, 2); MyComponentsArray[0] := StringGrid1; MyComponentsArray[1] := StringGrid2; end; procedure ObjectListTest; begin MyComponentsList.Add(StringGrid1); MyComponentsList.Add(StringGrid2); end; |
AW: Lazarus Funktion als Baustein nutzen
Gute Frage, ich nutze es auf dem Pi, Raspbian Jessy. Lazarus 1.2.x .
|
AW: Lazarus Funktion als Baustein nutzen
Zitat:
Hast es ja schließlich auch im richtigen Unterforum gepostet. :thumb: Allerdings kenne ich mich mit Lazarus überhaupt nicht aus und kann daher auch nicht sagen ob es diese Typen gibt oder nicht. |
AW: Lazarus Funktion als Baustein nutzen
Da Aviator hat bestimmt ein sehr guten Zugang aufgezeigt in dem praktisch das Grid als View nimmt und nicht die Logik in das Grid einbaut. An das halte ich mich auch.
Mit Objekten im Array. Du hast vermutlich ein Free Pascal Compiler 2.6.4 oder einen 2.6.2. Sieht du im help/about oder auf der Kommandozeile fpc. Ich kann mir nicht vorstellen, dass in den hohen Version vom FPC Generics noch limitiert wären auf Basisdatentypen ... Offiziell ist der Support seit 2.2 da ![]() --- Brauchst du aber gar nicht. Du hast 2 Möglichkeiten in 2 Richtungen. a) Soll das Array eine fixe Anzahl von Elementen halten oder eine unlimitierte/dynamische Anzahl b) Was ist die beste Basisklasse die du brauchst oder machst du je Art von Control ein eigenes Array Im Falle a) und die Länge sei dynamisch, dann arbeite mit SetLength b= Suche dir ein Basisklasse die genug kann. Wenn du 2 Grids verwaltest bspw. weißt du eh, dass ein Grid hast... Garbage Collector hast du keinen. Tupel Notation gehen nicht. Ob die Tupel die 2013 andiskutiert wurden jemals ins Fliegen kamen ... Zitat:
|
AW: Lazarus Funktion als Baustein nutzen
Hallo Aviator,
oh sehr schade, trotzdem vielen Dank für deine Hilfe, ich denke ein wenig werde ich davon benutzen können, sobald ich genau weiß, was der beste Weg nach Rom ist :D Hallo MichaelT, 2 Möglichkeiten klingt gut, allerdings muss ich mir beide erst ein wenig angucken. Ich hätte gedacht, dass es sowas fertig schon gibt, in der Speicherprogrammierbaren Steuerung ist das ein Standardteil, was immer zum Einsatz kommt. Notfalls kopiere ich meine ganze Logik, ist natürlich nicht so schön und unübersichtlich wird es auch. :/ Vielen Dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz