DI nach ASCI-Wandeln

simaticfan

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich versuche schon 1 Tag lang den Baustein FC5 (DI_STRING)
zu verwenden,
aber ich krieg das einfach nicht hin mit dem Ausgangsparameter.
Ich habs jetzt auf einer Temp-Variable, aber wie bekomme ich das
aus dem Baustein raus in z.B. einen Datenbaustein.
I/O-Variablen meckert er immer an.
Besten Dank im Voraus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Probier es mal so!!

Danke erstmal für den schnellen Tip!
Aber sollte das auch mit Datenbaustein als Endziel gehen?

Bei mir geht die CPU(319-3 PN/DP) in Stop,
wenn ich ein DBD als Ziel angebe!?
(s.Anhang)
Der DB ist in der CPU vorhanden.

Oder hab ich da was falsch verstanden?
 

Anhänge

  • Code_Test.bmp
    367 KB · Aufrufe: 14
Hallo,
deinen TEMP1 solltest du als STRING deklariert haben. Außerdem empfiehlt es sich bei der Verwendung von Siemens-Bausteinen zur String-Behandlung ganz grundsätzlich den übergebenen String zu initialisieren - dass heißt in den Header-Bytes desselben die deklarierte Länge und die tatsächliche Länge eintragen.
Dann sollte alles zu deiner Zufriedenheit funktionieren ...

Gruß
Larry
 
Hallo,
dein String kann ja maximal so lang werden, wie die Ursprungszahl + Vorzeichen + 2 Headerbytes. Da sollte 100 schon genügen.

Aber by the way ... warum legst du den String, wenn du ihn in einen DB haben willst, nicht auch gleich dort an und läßt den SFC dahin schreiben ?
Ganz besonders gut geht das dann auch noch über einen symbolischen Zugriff ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
dein String kann ja maximal so lang werden, wie die Ursprungszahl + Vorzeichen + 2 Headerbytes. Da sollte 100 schon genügen.

Aber by the way ... warum legst du den String, wenn du ihn in einen DB haben willst, nicht auch gleich dort an und läßt den SFC dahin schreiben ?
Ganz besonders gut geht das dann auch noch über einen symbolischen Zugriff ...

Gruß
Larry

Danke Larry, aber ich hatte ja schon lange versucht direkt aus dem FC5 in
meinen Ziel-DB zu schreiben, nur habe ich das nie hinbekommen.
Kannst du mir kurz mitteilen, was ich da an Parametern einzugeben hätte?
 
Da sollte 100 schon genügen

man sollte den string aber vorher initialisieren da er sonst schon 256 bytes lang wird.

deswegen wird ihm auch die CPU auf Stop gehen da der DB zu kurz ist.

probiers mal so..... Ich kanns zwar nicht testen aber sollte gehen.

LAR1 P##test
L 4 // STRING-Länge
T LB [AR1,P#0.0] // im MAX Len Byte des Strings eintragen
L 4 // tatsächliche Länge des Strings
T LB [AR1,P#1.0]

CALL "DI_STRNG"
I :=ED4
RET_VAL:=#test

CALL "BLKMOV"
SRCBLK :=#test
RET_VAL:=#retval_sfc20
DSTBLK :=DB100.DBD0
 
man sollte den string aber vorher initialisieren da er sonst schon 256 bytes lang wird.

deswegen wird ihm auch die CPU auf Stop gehen da der DB zu kurz ist.

probiers mal so..... Ich kanns zwar nicht testen aber sollte gehen.

LAR1 P##test
L 4 // STRING-Länge
T LB [AR1,P#0.0] // im MAX Len Byte des Strings eintragen
L 4 // tatsächliche Länge des Strings
T LB [AR1,P#1.0]

CALL "DI_STRNG"
I :=ED4
RET_VAL:=#test

CALL "BLKMOV"
SRCBLK :=#test
RET_VAL:=#retval_sfc20
DSTBLK :=DB100.DBD0


Also wegen der Länge habe ich den DB zwischenzeitlich auf 350Bytes verlängert, geht aber trotzdem nicht.
Deinen Tip teste ich gleich mal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... das mit dem Initialisieren hatte ich ja schon geschrieben. Es muß natürlich nur die deklarierte Länge eingetragen werden - den Rest macht der Siemens-FC dann schon, aber der muß natürlich schon wissen, was geht.

Wenn du in den DB direkt schreiben willst, so geht das so :
Dein DB wäre DB85 - dem gibst du den symbolischen Namen DB85 (oder was dir sonst so beliebt).
In dem DB legst du dann den String an - z.B. myString [100]
Nun kannst du dem FC direkt den Ziel-Baustein übergeben als :
Code:
CALL "DI_STRNG"
I :=ED4
RET_VAL:="DB85".myString
Gruß
Larry
 
Das mit dem Blockmove ist doch doppelt gemoppelt.

Wenn der DB richtig ist klappe das auch.

Lege im DB einen String an (100 Zeichen sind zwar schön aber blödsinn, da es kein DINT mit 100 Zeichen geben kann )
String[12] reicht hierfür aus.

Dem DB gibst du eine Symbolischen namen, z.B. DI_String dann den Aufruf wie unten.
 

Anhänge

  • di1.jpg
    di1.jpg
    11,2 KB · Aufrufe: 7
  • di2.jpg
    di2.jpg
    8,6 KB · Aufrufe: 9
Also ich hab dein Beispiel verwendet,
Geht aber auch in Stop!
Anbei die Screen-Copy.
Hab ich da evtl. eine Variable noch falsch deklariert oder?
 

Anhänge

  • Code_Test2.bmp
    553,7 KB · Aufrufe: 12
Zuviel Werbung?
-> Hier kostenlos registrieren
DB85.DBD0 ist kein Pointer, der SFC20 erwartet einen Pointer als Beschaltung.

Kannst DU mal eine Quelle oder Screeshot vom DB und deinem Baustein machen und hochladen ?
 
OK Leute,
erstmal super vielen Dank für die Geduld mit mir.
Ich muss jetzt leider los.
Ich versuche mir das morgen nochmal in Ruhe anzuschauen
und meld mich dann.
Allen einen schönen Feierabend.
bis dann.
 
Also vielen Dank nochmal an Alle.
Ich hab's jetz direkt ohne BLKMOV,
so wie von Larry Laffer vorgeschlagen, am Laufen.
:D
Kaum macht mann's richtig, schon funktionierts!
 
Zurück
Oben