Step 7 E/A Adresse via Bausteineingang übergeben

applikateur

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

bin wieder mal am verzweifeln mit dem Simatic Manager und würde Eure Hilfe brauchen.

Ich muss einen Baustein nach "unten" übersetzen damit dieser unter Step7 V5.6 funktioniert. Im TIA ist ein Bausteineingang I_ADR_OFFSET (Int) vorhanden.

Könnte das mit dem SFC20 funktionieren? Wenn ja, bin ich einfach zu blöd, weil bei mir funktioniert es nicht :( .

Code:
Dummy := BLKMOV(SRCBLK :=  P#E400.0 BYTE 2// IN: ANY       ,DSTBLK := P#DB600.DBX0.0 BYTE 2 // OUT: ANY
       ); // INT

Ich möchte einfach ein PEW (zb. EW400) in einen DB (Struct 16 BOOL) schreiben. Das ganze soll aber nicht statisch programmiert sein. Sprich ich möchte nicht jedes Bit einzeln in den DB schreiben wie zb. hier:
Code:
DB600.dbx0.0 := E400.0;
DB600.dbx0.1 := E400.1;
DB600.dbx1.0 := E401.0;
...

Bitte um einen Wink mit dem Brett.

Vielen Dank an alle.
 
Du willst einen Baustein aus TIA in SCL-classic übersetzen?
Du könntest für BLKMOV einen ANY zusammenbasteln (Aufbau des ANY siehe die Step7-Hilfe) oder wenn es nur wenige Bytes/Words sind, dann geht in SCL sowas:
Code:
DB600.DW0 := EW[I_ADR_OFFSET];
(siehe SCL-Hilfe >Index > Indizierter Zugriff auf Speicherbereiche der CPU)

Harald
 
Muss leider nochmal nerven, mach aber kein neues Thema auf. Hoffe das ist ok.
Gott sei Dank schmerzt Dummheit nicht immer...

Ich möchte in SCL (v5.6) die Länge eines Strings ermitteln. Soweit ich gelesen habe gibt es da die IEC_Blocks (LEN FC21).

Wenn ich jedoch:

Code:
VAR_INPUT
    I_ADROFFSET : INT;
    I_VARNUMMER : INT;
    I_VARCONTENT : STRING;
    I_START : BOOL;
END_VAR


VAR_OUTPUT
END_VAR


VAR_TEMP
    T_CNT_CLEANUP : INT;
    T_CNT_LEN_STRING : INT;
END_VAR








BEGIN
   
    T_CNT_LEN_STRING:= LEN(S :=  I_VARCONTENT// IN: STRING
                           ); // INT
                       
END_FUNCTION

Hier die Fehlermeldung:
Fehler.PNG

Was geht hier in meinem Kopf wieder schief. Wenn ich als Parameter für LEN einen String nehme 'abcdefg' bekomme ich keine Fehlermeldung, Nur wenn ich den String vom Bausteineingang übergebe.
Wenn ich den Eingangsstring via eine Temp Variable mache funktioniert es auch.

Ist eine 400er
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus,

auch so nicht

T_CNT_LEN_STRING:= LEN(S := I_VARCONTENT);

hatte ich schon vorher versucht.

/Edit: Ich machs einfach via Temp Variable, sollte ja kein Problem sein
 
Schade ... war so naheliegend ;o)
Die Sprachen sind alle so ähnlich und trotzdem eckt man immer wieder an, weil die eine dies nicht mag und die andere das nicht. Aber mit Zwischenspeichern in TempVariable geht es immerhin.

Gruss, Heinileini
 
Hi, die Siemens String Funktionen können nur mit gewissen Speicherbereichen arbeiten. Ich denke es ist Temp, Stat und DB. Ein String der über die Schnittstelle kommt liegt im Temp-Bereich des aufrufenden Bausteins. (V-LStack). Deshalb muss man umkopieren.
 
Zurück
Oben