S5 Programm unklar

DiGo1969

Level-2
Beiträge
139
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo S5 Programierer,
ich habe ein Problem beim Übersetzen eines S5 Programms nach S7.

Die Anschaltung des FB den ich übersetzten möchte sieht so aus:
Code:
[FONT=Courier New]                         FB 107[/FONT]
[FONT=Courier New]                     +--------------+[/FONT]
[FONT=Courier New]                     !   SET        ![/FONT]
[FONT=Courier New]          M 16.4   --!RES           ![/FONT]
[FONT=Courier New]          +60      --!STA           ![/FONT]
[FONT=Courier New]          +35      --!LEN           ![/FONT]
[FONT=Courier New]          DB 50    --!DB            ![/FONT]
[FONT=Courier New]11111111 11111111  --!IN            ![/FONT]
[FONT=Courier New]11111111 11111111  --!OUT           ![/FONT]
[FONT=Courier New]                     +--------------+[/FONT]


Der Inhalt des FB 107 lautet:
Code:
[FONT=Courier New]0001   FB 107[/FONT]
[FONT=Courier New]0002   Netzwerk 1[/FONT]
[FONT=Courier New]0003[/FONT]
[FONT=Courier New]0004   Name :SET           SET FLAG-WORD(S) TO FFFF[/FONT]
[FONT=Courier New]0005   Bez  :RES   E/A/D/B/T/Z: E  BI/BY/W/D: BI[/FONT]
[FONT=Courier New]0006   Bez  :STA   E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF[/FONT]
[FONT=Courier New]0007   Bez  :LEN   E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF[/FONT]
[FONT=Courier New]0008   Bez  :DB    E/A/D/B/T/Z: B[/FONT]
[FONT=Courier New]0009   Bez  :IN    E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KM[/FONT]
[FONT=Courier New]0010   Bez  :OUT   E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KM[/FONT]
[FONT=Courier New]0011   ;[/FONT]
[FONT=Courier New]0012   ;                   ******************************>[/FONT]
[FONT=Courier New]0013   :                   *         DESCRIPTION         >[/FONT]
[FONT=Courier New]0014   :                   ******************************>[/FONT]
[FONT=Courier New]0015   :                   * RES  = TROUBLE RESET        >[/FONT]
[FONT=Courier New]0016   :                   * STA  = 1.FLAG-WORD ADDRESS  >[/FONT]
[FONT=Courier New]0017   :                   * LEN  = LENGTH OF FLAG-WORDS >[/FONT]
[FONT=Courier New]0018   :                   * DB   = DATA-BASE FOR MATHEM.>[/FONT]
[FONT=Courier New]0019   :                   * IN   = CODE FOR FIRST       >[/FONT]
[FONT=Courier New]0020   :                   *        FLAG-WORD            >[/FONT]
[FONT=Courier New]0021   :                   * OUT  = CODE FOR LAST        >[/FONT]
[FONT=Courier New]0022   :                   *        FLAG-WORD            >[/FONT]
[FONT=Courier New]0023   :                   ******************************>[/FONT]
 
 
[FONT=Courier New]Netzwerk 2                 TROUBLE RESET[/FONT]
[FONT=Courier New]0024   :[/FONT]
[FONT=Courier New]0025   :UN  =RES           IF NO "RES" THEN[/FONT]
[FONT=Courier New]0026   :SPB =M001          JUMP TO LABEL M001[/FONT]
[FONT=Courier New]0027   :[/FONT]
[FONT=Courier New]0028   :B   =DB            OPEN DATA-BASE[/FONT]
[FONT=Courier New]0030   :[/FONT]
[FONT=Courier New]0031   :LW  =STA           SAVE 1.FLAG-WORD ADDRESS[/FONT]
[FONT=Courier New]0032   :T   DW 6[/FONT]
[FONT=Courier New]0033   :[/FONT]
[FONT=Courier New]0034   :LW  =LEN           SAVE LENGTH OF FLAG-WORD(S)[/FONT]
[FONT=Courier New]0035   :T   DW 7[/FONT]
[FONT=Courier New]0036   :[/FONT]
[FONT=Courier New]0037   :LW  =IN            LOAD CODE FOR FIRST FLAG-WORD[/FONT]
[FONT=Courier New]0038   :B   DW 6           USE ADDRESS OF 1.FLAG-WORD[/FONT]
[FONT=Courier New]0039   :L   MW 0           AND LOAD 1.FLAG-WORD[/FONT]
[FONT=Courier New]0040   :OW[/FONT]
[FONT=Courier New]0041   :B   DW 6           USE ADDRESS OF 1.FLAG-WORD[/FONT]
[FONT=Courier New]0042   :T   MW [/FONT][FONT=Courier New]0           AND TRANSFER TO 1.FLAG-WORD[/FONT]
[FONT=Courier New]0043   :[/FONT]
[FONT=Courier New]0044   :L   DW 7           IF LENGTH OF FLAG-WORD(S) <= 1[/FONT]
[FONT=Courier New]0045   :L   KH 0001        (ONLY ONE FLAG-WORD TO TRANSFE>[/FONT]
[FONT=Courier New]0046   :<=F                THEN[/FONT]
[FONT=Courier New]0047   :SPB =M001          JUMP TO LABEL M001[/FONT]
[FONT=Courier New]0048   :SPA =M002          ELSE JUMP TO LABEL M002[/FONT]
[FONT=Courier New]0050   :[/FONT]
[FONT=Courier New]0051 M003 :L KH FFFF       LOAD 11111111 11111111 IN ACCU[/FONT]
[FONT=Courier New]0052   :                   USE FLAG-WORD ADDRESS[/FONT]
[FONT=Courier New]0053   :B   DW 6           AND TRANSFER TO FLAG-WORD[/FONT]
[FONT=Courier New]0054   :T   MW 0[/FONT]
[FONT=Courier New]0055   :                   LOAD FLAG-WORD ADDRESS[/FONT]
[FONT=Courier New]0056 M002 :L   DW 6        + 2 BYTE[/FONT]
[FONT=Courier New]0057   :I 2                SAVE NEW FLAG-WORD ADDRESS[/FONT]
[FONT=Courier New]0058   :T   DW 6[/FONT]
[FONT=Courier New]0059   :                   LOAD LENGTH OF FLAG-WORDS[/FONT]
[FONT=Courier New]0060   :L   DW 7           - 1 WORD[/FONT]
[FONT=Courier New]0061   :D 1                SAVE NEW LENGTH OF FLAG-WORDS[/FONT]
[FONT=Courier New]0062   :T   DW 7[/FONT]
[FONT=Courier New]0063   :L   KH 0001        IF NEW LENGTH OF FLAG-WORDS[/FONT]
[FONT=Courier New]0064   :>F                 > 1 THEN[/FONT]
[FONT=Courier New]0065   :SPB =M003          JUMP TO LABEL M003[/FONT]
[FONT=Courier New]0066   :[/FONT]
[FONT=Courier New]0067   :LW  =OUT           LOAD CODE FOR LAST FLAG-WORD[/FONT]
[FONT=Courier New]0068   :B   DW 6           USE ADDRESS OF LAST FLAG-WORD[/FONT]
[FONT=Courier New]0070   :L   MW 0           AND LOAD LAST FLAG-WORD[/FONT]
[FONT=Courier New]0071   :OW[/FONT]
[FONT=Courier New]0072   :B   DW 6           USE ADDRESS OF LAST FLAG-WORD[/FONT]
[FONT=Courier New]0073   :T   MW 0           AND TRANSFER TO LAST FLAG-WORD[/FONT]
[FONT=Courier New]0074 M001 :BE[/FONT]

Mein Problem beim übersetzten nach S7 liegt darin, das ich nicht weiß, was der Befehl in Zeile 0038 bzw. 0068 bedeutet.
- wenn dies ein Aufruf der Variable DW 6 sein soll, warum ist dann die
Zeile LW =IN.davor?
- wenn dies ein Transfer sein soll, warum wird dann in Zeile 32 das
DW 6 beschrieben?
Oder passiert estwas indirekt, wovon ich keine Ahnung habe.

Vielen Dank für Eure Mithilfe schon mal im Voraus!!!
Dirk
 
Hallo Dirk,

der Bearbeite-Befehl ist eine Möglichkeit, in der S5 indirekt zu adressieren.

Bei:
B DW 6
L MW 0

bedeutet das: Lade das Merkerwort in den AKKU 1, das im DW 6 angegeben ist.

LW =IN bedeutet: Lade den Inhalt des Formaloperanden IN in den AKKU1, ist wie eine IN-Variable in S7.

In S7-Code sähe es so aus:
Code:
// Erst mal der Ersatz für B DW 6
L DBW 6 // Adresse des MW laden
SLD 3 // ins Pointerformat
LAR1 // ins Adressregister
// Ersatz für LW =IN
L #IN 
// Ersatz für L MW 0
L MW[AR1,P#0.0]
OW
...

LW =IN und B DW 6 müssen vertauscht werden, da der B-Befehl in der S5 den AKKU1 unverändert lässt.

Grüße
Gebs
 
Zuletzt bearbeitet:
Da steht:
LW =IN
L DB50.DW6
OW


Die Adresse des DB wird weiter oben geladen
B DW6 Lade aus aktuellem DB Wort 6
L MW0 Lade das mit B vorher gespeicherte Wort.

Is' S5-Syntax!
 
Zurück
Oben