S5->S7 der SFC20 Block_Move - Fragen zu Operanden

superkato

Level-1
Beiträge
220
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ich habe die S5 Bausteine FB190, 191, 192 und 193 zum kopieren Datenblöcken mit dem SFC20 ersetzt, wie es im Übersetzungshandbuch empfohlen wird.
Es ist mir nur nicht klar ob das wirklich so funktionieren kann.

Beispiel:
Ich hab im FC folgende TEMP Einträge:
conv_akku1 DWORD 0.0
conv_stw WORD 4.0
conv_index WORD 6.0


In einem Netzwerk hab ich bspw den OB191 so übersetzt.
Code:
[B]AUF DB97  [/B]             //DB 97 Aufrufen
[B]L   4[/B]            //AB DW4 (BIS DW24) NACH
[B]L   B#(200,241)[/B]   //BEREICH MB200-MB241  =42byte = 21 Wörter
// CALL OB191   //alte S5 funktion
[B]
CALL SFC 20 [/B]   //Statt OB 191 -> SFC20
[B]SRCBLK:= P#DB97.DBX4.0 WORD 21
RET_VAL:= MW260
DSTBLK:= P#M200.0 WORD 21[/B]

ich kopiere also von DB97 ab DW4 die 42 Bytes bzw. 21 Words ist das so in Ordnung?

Falls ja nächste Frage:

Jetzt gibts hier ein Fall mit dem OB190, ich hab das so gemacht:

Code:
[B]AUF DB [#conv_index]  [/B]  //DB  [#conv_index]  Aufrufen ---> was ist das  [#conv_index]  überhaupt?
[B]L   B#(200, 241) [/B]         //Merkerbytes von ......bis ....   --> ist das der schmiermerker? 
[B]L   MB 250[/B]       //In DB ab Datenwort
// CALL OB190   //alte S5 funktion

// so richtig?
[B]CALL SFC 20    //Statt OB 190 -> SFC20 
SRCBLK:= P#M200.0 BYTE 42    //da von 200 bis 241 -> 42bytes
RET_VAL:= MW260
DSTBLK:= P#M250.0 BYTE 42   // nach MB250 kopieren die 42 bytes bzw. 21 words[/B]

ist das nun so richtig?

woher weiß denn SRCBLK das ich mit P#M200.0 BYTE 42 die DB [#conv_index] meine?
oder ist das falsch und man macht das anders?


Für eure hilfe wäre ich sehr dankbar!
Gruß
SK
 
Zuletzt bearbeitet:
.
im ersten Code kopierst du aus dem DB97 in die Merker 200 aufwärts, ich
würde aber eine geradzahlige Anzahl von Bytes bevorzugen.

im zweitem Code spielt das DB [#conv_index] gar keine Rolle, weil du am
SFC20 die Quell- und Zielparameter explizit genannt hast.

Aber:
Dein Ret_Val liegt mitten im Zielbereich und wird dir deine Daten
verfälschen !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.

im zweitem Code spielt das DB [#conv_index] gar keine Rolle, weil du am
SFC20 die Quell- und Zielparameter explizit genannt hast.

aber nur weil ich davon ausgehe das sie richtig sind.
Ich frage mich ob die Quelleangabe stimmt wenn dort das so vorher steht:


AUF DB [#conv_index]
L B#(200, 241) //Merkerbytes von ......bis ....
L MB 250 //CALL OB190


Ah stimmt Retval wird dann auhc eine temp!
 
AUF DB [#conv_index]
L B#(200, 241) //Merkerbytes von ......bis ....
L MB 250 //CALL OB190

Der Code ist nur noch eine "Leiche" aus S5.

AUF DB [#conv_index] öffnet den DB mit der Nummer #conv_index, wahrscheinlich steht irgendwo im Code vorher ein T #conv_index.
Dei beiden nächsten Zeilen machen nichts mehr, können also gelöscht werden.
 
Ah ok danke Ralle und Softmachine!

Also ist es so korrekt wie ich das mache ? Bzw. den OB191/190 so interpretiert?

Falls ja , vielen dank jungs !
 
Zurück
Oben