SCL und Lokaldaten

derwestermann

Level-2
Beiträge
628
Reaktionspunkte
65
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin!

Ich könnte schon wieder abdrehen. Erst bringt mir diese SCL-Funktion nur die ausgelesene Länge aus dem String:

Quelle := STRNG_I(MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 14));

Dann will ich sehen, was diese grindige MID-Funktion so ausgibt. Aber selbst, wenn ich das Programm auf das anhängend zu sehende reduziere, kann ich den Baustein nicht laden.

Hiiiiiilfääääääää!!!!!
 

Anhänge

  • SCL_Scheisse.jpg
    SCL_Scheisse.jpg
    166,1 KB · Aufrufe: 40
VAR
Stapel : ARRAY [1..9] OF STRUCT
Anzahl : INT;
Quelle : INT;
Quellebene : INT;
Ziel : INT;
Zielebene : INT;
END_STRUCT;
S_Quelle : STRING[4];
S_Quellebene : STRING[4];
S_Ziel : STRING[4];
S_Zielebene : STRING[4];

END_VAR
BEGIN
S_Quelle := MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 14);
S_Quellebene := MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 17);
S_Ziel := MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 20);
S_Zielebene := MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 23);
Stapel[1].Quelle := STRNG_I(S_Quelle);
Stapel[1].Quellebene := STRNG_I(S_Quellebene);
Stapel[1].Ziel := STRNG_I(S_Ziel);
Stapel[1].Zielebene := STRNG_I(S_Zielebene);
______________________________________________________________

Offensichtlich geht das erstens nicht auf Strings in Globaldaten-DB zu schreiben, ich habe die benötigten Strings, wie zu sehen, in den statischen Daten eingerichtet. Und offensichtlich geht der direkte Weg nicht:

Quelle := STRNG_I(MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 14));

Irgendwo steht auch zu lesen, der Baustein MID benötigt symbolische Variablen. Stimmt, kann ich bestätigen......

Aber wenn mir das mit den Lokaldaten einer erklären kann, wird mein Dank ihn ewig verfolgen.

Ersma
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Die Fehlermeldung auf Deinem Bild entstammt der Tatsache, dass der FB zuviel Lokaldaten zu allozieren versucht (Standardwert auf kleinen CPU: 256 Byte pro Prioritätsklasse, auf grösseren CPU konfigurierbar).

Die Fehlermeldung hatte ich auf der CPU315 auch schon.

Gruss

Markus
 
Und die 317-2 hat halt nunmal max. 1024 Byte Lokaldaten pro Prio-Ebene.

Ich hab dein Problem nochmal nachprogrammiert, und dabei festgestellt, dass jede einzelne deiner vier Testzeilen (aus dem Screencopy-jpg):
Code:
"db_dummy".Quellebene := MID(IN := "DB_OPC-Daten".auftrag_1_bs[1],L := 2,P := 17);
nach dem Compilieren 260 Byte Lokaldaten braucht. Es werden für das Ergebnis von MID 256 Bytes Lokaldaten benötigt, die anschließend mit SFC20 in den "db_dummy" umkopiert werden. Nur ist dieser SCL-Compiler so dämlich, dass er diese temporärern Bereiche nicht mehrfach verwendet, sondern für jede deiner 4 Testzeilen entsprechend viele Lokaldaten belegt.
 
Zurück
Oben