Codeübergabe am FB Baustein mit SCL

Blackforest

Level-2
Beiträge
92
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Habe mal wieder meine kreative Phase und stehe vor einem Problem

Ich möchte einem Baustein eine Funktion übergeben, das ganze will ich in eine Zeile schreiben, da der Baustein sonst zu groß wird.

Dem Baustein möchte ich sagen z.B

Hole Messwert 1
Lade interne Funktion 10
mache am PLS 2 Komma stellen

also muß ich die Kombination 1,10,2 übergeben
jetzt habe ich für den Eingangswert einen string parametriert
Wenn ich den Baustein aufrufe kann ich weder '1,10,2' noch "1,10,2"
noch #1,10,2# übergeben. Kann ich überhaut Texte übergeben uund wie ?
 
Hallo,
eine Übergabe, wie du die dir wahrscheinlich vorstellst, geht so nicht.
Du kannst einen String nicht im Klartext übergeben (das läuft nur als Pointer). Wenn du einen bereits deklarierten und zugewiesenen String an die Funktion übergeben willst, so geht das natürlich, aber den musst du in der Funktion dann auch wieder zerlegen ... Nach meiner Meinung wäre es hier wesentlich einfacher und übersichtlicher, mit mehreren Parametern in der Übergabe zu arbeiten ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Codeübergabe

Hallo Larry

das ging aber schnell. Habe die Problematik verstanden. Nur wenn ich einzelübergabe mache wie in meinem Beispiel 32 Werte a 3 Werte habe ich schnell mal 96 Eingansvariablen am Var_Input. Ich könnte das ganze auch
direct reinschreiben, aber da fällt der Montagemann drausen wieder tot um.

Was gibt es denn sonst noch für möglichkeiten BCD oder sowas
Real hab ich auch schon ausprobiert, da bekomme ich aber nur 2 Funktionen rein. Die vor dem Komma und die Nach dem Komma
 
... da müßtest du mir ein paar mehr Info's geben - vielleicht fällt mir dann dazu noch etwas Schönes ein. Was soll dein FB bzw. FC denn letztlich machen ?
Mit REAL würde ich nicht arbeiten, da du mit der Stellenzahl begrenzt bist und es dadurch (und durch das Zustandekommen von Exponent und Mantisse) zu netten Rundungsfehlern kommen kann.
 
Codeübergabe

Hintergrund

Also habe mir mit SCL einen Baustein geschrieben, der 100 % Funktioniert und auch schon im Einsatz ist. Der Baustein enhält alle Funktionen die ich momentan brauche. Brauche ich eie Weitere Funktion mache ich einfach eine dazu. D.H ich kann für alle kleinanlagen das gleiche Programm verwenden.
Funktionen sind
// 0 keine Funktion
// 1 Pegel > ein über
// nachfolgend aus unter
// 2 Pegel < ein unter
// nachfolgend aus über
// 3 Pegel > ein über aus gleichzeitig unter <
// 4 Pegel < ein unter aus gleichzeitig über >
// 5 Einschaltverzögerung Sekunde Beginn mit Start ein Ende bei Start aus
// 6 Auschaltverzögerung Sekunde Beginn mit Start aus Ende bei Start ein
// 7 Einschaltverzögerung Minute Beginn mit Start ein Ende bei Start aus
// 8 Auschaltverzögerung Minute Beginn mit Start aus Ende bei Start ein
// 9 Timer schaltet bei gleich ein, wenn aus, schaltet bei gleich ein, wenn aus
//10 Arbeitszeit / Pausenzeit Sekunde bei Pause 0 ist dauer ein
// nachfolgend ist Pausenzeit
//11 Arbeitszeit / Pausenzeit Sekunde bei Pause 0 ist dauer ein
// nachfolgend ist Pusenzeit

zu diesen Funktionen übergebe ich noch wieviele Kommastellen am PLS angezeigt werden sollen

Weiterhin benötige ich z.b für die Funktion 1 und 2 einen Messwert
also sieht meine Var_Input so aus

Gruppe_1:INT; // 1 Gruppe für anzeige PLS
Istwert_1:INT; // 1 Pegelabfrage
Kom_1:int; // 1 vorgewählte Kommastelle
FunC_1:int; // 1 vorgewählte Funktion

das ganze mal 32 gibt ein Riesen ding
so hab ichs auch nur aus den 4 Zeilen wollte ich eine Machen
zB. 1,1,1,1

1, = Gruppe 1
1, = Messwert 1
1, = eine kommastelle als Anzeige
1, = Funktion 1

wenn es keine bessere Lösung gibt laß ichs halt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine möglichkeit wäre das als UDT anzulegen

Gruppe_1:INT; // 1 Gruppe für anzeige PLS
Istwert_1:INT; // 1 Pegelabfrage
Kom_1:int; // 1 vorgewählte Kommastelle
FunC_1:int; // 1 vorgewählte Funktion
und diese wiederum in einen Datenbaustein als ARRAY 1..32 vom Typ des UDT.

Die Parametrierung erfolgt dann allerdings im Datenbaustein.


Gruss Daniel
 
Zuletzt bearbeitet:
Wie wäre es mit einer DWORD Konstante?

Die geht von D#16#00000000 bis D#16#FFFFFFFF

Wenn man sich nun darauf einigt welche Stelle welche Funktion hat:

Code:
     ++-------Messstelle
     ||
     ||++-----Funktion
     ||||
     ||||++---Kommastellen
     ||||||
     ||||||++-Reserve Byte
     ||||||||
D#16#01100200

Ich würde da aber einfach drei Eingänge nehmen und mir den ganzen Zirkus einfach sparen ;o)
 
... dazu habe ich noch Fragen :

- wieso "das Ganze mal 32" ?
- die Funktionen habe ich noch nicht verstanden ... bzw. die Sache mit "<" und ">"

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das schreit ein wenig nach einer udt, wie D.Albinus schon schrieb.
Die udt als IN im FB deklarieren, dann kann man "Außen" am FB die UDT-Variablen aus dem angelegten DB anparametrieren. Und im FB kann man mit den Variablen aus der udt weiterarbeiten, das ist dann auch recht übersichtlich.
 
// 0 keine Funktion
// 1 Pegel > ein über
// nachfolgend aus unter
// 2 Pegel < ein unter
// nachfolgend aus über
// 3 Pegel > ein über aus gleichzeitig unter <
// 4 Pegel < ein unter aus gleichzeitig über >
// 5 Einschaltverzögerung Sekunde Beginn mit Start ein Ende bei Start aus
// 6 Auschaltverzögerung Sekunde Beginn mit Start aus Ende bei Start ein
// 7 Einschaltverzögerung Minute Beginn mit Start ein Ende bei Start aus
// 8 Auschaltverzögerung Minute Beginn mit Start aus Ende bei Start ein
// 9 Timer schaltet bei gleich ein, wenn aus, schaltet bei gleich ein, wenn aus
//10 Arbeitszeit / Pausenzeit Sekunde bei Pause 0 ist dauer ein
// nachfolgend ist Pausenzeit
//11 Arbeitszeit / Pausenzeit Sekunde bei Pause 0 ist dauer ein
// nachfolgend ist Pusenzeit
Mir wird da schon beim Lesen schwindelig. Sieht irgendwie nach einem dunkelschwarzen Wald aus, wo man sich sehr leicht verläuft :ROFLMAO: . Du solltest das ganze Konzept noch einmal überdenken.

Wenn wirklich -zig Parameter übergeben werden müssen, dann nur als UDT, wie schon empfohlen wurde.


Gruß, Onkel
 
Habs kapiert

Danke Männer für eure Unterstützung

Frei nach dem Motto

Mann soll es so einfach wie möglich machen, man soll es sich jedoch nicht einfach machen.

Wähle ich die Variante mit den 3 Eingängen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wie wäre es eventuell, wenn du mit den Eckdaten noch eine Index-Nummer mit übergibst. Auf diese Weise könntest du (bei gleicher Instanz) auch auf Nebenwerte oder schon ermittelte Resultate wieder zugreifen.
Um da allerdings wirklich Tipps geben zu können, wäre es (für mich) wirklich wichtig, zu verstehen was du da genau machst ... Das ist im Augenblich (noch) nicht der Fall ...

Gruß
LL
 
Index

Hallo LL

das mit dem Index geht nicht, da ich

999 Messungen
9999 Gruppen
999 Funktionen
4 Kommastellen

also sollte ich

999,9999,999,4 nur als Sting darstellen

32 mal will ich das in einem Baustein aufrufen, da ich , da dies nicht ein normales Programm ist, sondern fast schon eine Statmachine ist, da
im Baustein viele Datenbausteine aufgeruen und wieder abgespeichert werden. Wollte ich die Funktion nur einmal in einem FB aufrufen, müßte ich
bei 32 verschiedenen Funktionsaufrufen 32 mal meine DB öffnen. Hab ich mal ausprobiert geht, habe allerdings ne Zykluszeit von 250 ms. Mit dieser kompaktversion liege ich bei 20 ms, was mir reicht.

logisch könnte die Strings in UDT oder Datenbausteine schreiben, das möchte ich aber aus verschiednen Sicherheitsgründen nicht.

Somit habe ich jetzt

32 x
999 Messungen
9999 Gruppen
999 Funktionen
4 Kommastellen
also 32 x 4 int Eingänge am FB

Traumvorstellung wäre gewesen

32 x 1 String
(=999,9999,999,4)

Wie sagte meine Oma beim nehen
langes Fädchen faules Mädchen

Gruß
 
... da du ja nicht wirklich konkreter werden willst ...

Also, ich vermute, dass es durchaus eine Möglichkeit für das, was du vorhast gibt ...
Grundsätzlich würde ich aber auf jeden Fall bei der Parameter-Übergabe an den FB so verfahren, dass du ihm die "String-Inhalte" als Einzelwerte übergibst. Das macht auch die Sache mit der Rückwandelung im FB einfacher ...

Wiese hast du 32mal die 4 Eingänge ? Du könntest doch genauso auch so verfahren (Index-Variante) :
Code:
Call FB_Statemaschine , DB_xyz
   Index := 01
   Messung := 27
   Gruppe := 1
   Funktion := 4
   Kommastelle := 3
Call FB_Statemaschine , DB_xyz
   Index := 02
   Messung := 27
   Gruppe := 1
   Funktion := 4
   Kommastelle := 3
Call FB_Statemaschine , DB_xyz
   Index := 03
   Messung := 27
   Gruppe := 1
   Funktion := 5
   Kommastelle := 2
usw.
Ob das so Sinn macht weiß ich allerdings nicht ...
Aber du kannst ja mal darüber nachdenken ...

Gruß
LL
 
Zurück
Oben