Schrittketten in AWL gegeben falls mit Sprungmarken?

babylon05

Level-1
Beiträge
180
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte ein Schrittkette aufbauen in AWL, habe aber irgendwie einen Hänger folgender Aufbau.

Ich habe 6 Eingänge die mit einer positiven Flanke abgefragt werden und dann gespeichert werden und 3 Verknüpfungen dazu.
Es soll in einem FB nach einander die 1-6 Eingänge eingelesen werden und mit den 3 Verknüpfungen abgearbeitet werden.
Also wenn Eingang 1 ist gehe zur 1 Verknüpfung und arbeite die ab, ist die Verknüpfung vom logischen nicht 1 dann springe zur 2 Verknüpfung und arbeite die ab, ist die auch nicht 1 gehe zur
3. Verknüpfung und arbeite die ab, ist die auch nicht 1 Rücksetze den gespeicherten Eingang 1.

Zweiter Fall: Wenn Eingang 1 ist gehe zur 1 Verknüpfung und arbeite die ab, ist die Verknüpfung vom logischen nicht 1 dann springe zur 2 Verknüpfung und arbeite die ab, ist die auch nicht 1 gehe zur
3. Verknüpfung und arbeite die ab und Resette die Speicherung Eingang 1. Danach prüfe ob der der 2. Eingang (gespeichert ist) und gehe wieder die 3 Verknüpfungen durch, bis man bei Eingang 6 ist.

Dann beginnt alles wieder von vorne. Also wenn alle 3 Verknüpfungen logisch 0 sind kann der Zyklus beendet werden, sollte eins der Verknüpfung 1 sein muss er erst alle 6 Eingänge durchprobiern, erst dann ist ein Zyklus durch.

Hintergrund ist:

Die 6 Eingänge sind Alarmeingänge hinter jeder der 6 Eingänge verbirgt sich ein SMS-Text. Dieser Text soll an 1-3 Rufnummern (sind die Verknüpfungen) rausgeschickt werden (FB48).

Netzwerk 1
Code:
[CODE]// Störungen auswerten
      U     #EMA
      FP    #Flankenmerker_01
      S     #Aufrufbedingung_1
      SPBN  N1

N1:   U     #BMA
      FP    #Flankenmerker_02
      S     #Aufrufbedingung_2
      SPB   A2
      SPBN  N2

N2:   U     #Wasserschaden
      FP    #Flankenmerker_03
      S     #Aufrufbedingung_3
      SPB   A3
      SPBN  N3

N3:   U     #Heizungausfall
      FP    #Flankenmerker_04
      S     #Aufrufbedingung_4
      SPB   A4
      SPBN  N4

N4:   U     #Stromausfall
      FP    #Flankenmerker_05
      S     #Aufrufbedingung_5
      SPB   A5
      SPBN  N5

N5:   U     #allg_Stoerung
      FP    #Flankenmerker_06
      S     #Aufrufbedingung_6
      SPB   A6
      SPBN  E1

A1:   U     #Aufrufbedingung_1
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_1
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

A2:   U     #Aufrufbedingung_2
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_2
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

A3:   U     #Aufrufbedingung_3
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_3
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

A4:   U     #Aufrufbedingung_4
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_4
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

A5:   U     #Aufrufbedingung_5
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_5
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

A6:   U     #Aufrufbedingung_6
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_6
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1

B1:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_1
      L     1
      ==I   
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr1
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      S     #Speicher1
      SPB   C1
      SPBN  B2

B2:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_2
      L     1
      ==I   
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr2
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      S     #Speicher2
      R     #Speicher1
      SPB   C1
      SPBN  B3

B3:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_3
      L     1
      ==I   
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr3
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      S     #Speicher3
      SPB   C1
      SPBN  E1
[/CODE]

Netzwerk 2
Code:
// Prüfen, ob Meldung 1 gesendet werden soll
C1:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      SPBN  E1

// Aufruf des SMS_SEND
      CALL  "SMS_SEND" , "IDB_FB48"
       MPI_TS_ADAPTER:=1
       PHONE_NO      :=#Telefon_Nr_Move
       SCENTER_NO    :=#Servicecenter_Nr
       MESSAGE       :=#SMS_Text_Move
       BUSY          :=#Send_1_Busy
       STATUS        :=#Send_1_Status



// Prüfung der Aufrufergebnisse auf das Ende der Bearbeitung

      U     #Send_1_Busy                // ist BUSY == 0 ?
      SPB   Ende                        // nein, SMS_SEND bearbeitet den Auftrag noch 

      L     0                           // ja, Bearbeitung ist abgeschlossen
      L     #Send_1_Status
      ==I                               // STATUS == 0 ?
      SPB   ok_1                        // ja, es ist kein Fehler aufgetreten
      L     W#16#7000                   // nein,  
      ==I                               // hat sich SMS_SEND zurückgesetzt ?
      SPB   Ende                        // ja, SMS_SEND erneut aufrufen

Netzwerk 3.....
......


Mit einer Rufnummer geht es.

mfg babylon05
 
Netzwerk 1
Code:
[FONT=courier new]// Störungen auswerten
       U     #EMA
       FP    #Flankenmerker_01
       S     #Aufrufbedingung_1
       [COLOR=#ff0000]SPBN  N1[/COLOR]

N1:    U     #BMA
       FP    #Flankenmerker_02
       S     #Aufrufbedingung_2
       SPB   A2
       [COLOR=#ff0000]SPBN  N2[/COLOR]

N2:    U     #Wasserschaden
       FP    #Flankenmerker_03
       S     #Aufrufbedingung_3
       SPB   A3
       [COLOR=#ff0000]SPBN  N3[/COLOR]

N3:    U     #Heizungausfall
       FP    #Flankenmerker_04
       S     #Aufrufbedingung_4
       SPB   A4
       [COLOR=#ff0000]SPBN  N4[/COLOR]

N4:    U     #Stromausfall
       FP    #Flankenmerker_05
       S     #Aufrufbedingung_5
       SPB   A5
       [COLOR=#ff0000]SPBN  N5[/COLOR]

N5:    U     #allg_Stoerung[/FONT]
Hab' mir den Rest (noch) nicht näher angesehen, aber warum machst Du die markierten Sprünge in die nächste Zeile? Die kommt doch sowohl mit als auch ohne Sprung als nächstes dran. Du kannst also die roten Zeilen auch einfach weglassen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann es sein, daß Du generell ein Problem mit dem AWL-Sprungkonzept hast? Z.B.:
Code:
[FONT=courier new]A1:   U     #Aufrufbedingung_1
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_1
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPB   B1
[/FONT]
[FONT=courier new]A2:   ...[/FONT]
Der CALL-Befehl ist (wie viele andere) nicht VKE abhängig. Du mußt ihn also überspringen, wenn Deine vorigen Bedingungen nicht erfüllt werden, also bei obigem Beispiel:
Code:
[FONT=courier new]A1:   U     #Aufrufbedingung_1
[/FONT][FONT=courier new]      [COLOR=#ff0000]SPBN   A2[/COLOR]
[/FONT][FONT=courier new]      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_1
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      [COLOR=#ff0000]SPA[/COLOR]   B1
[/FONT]
[FONT=courier new]A2:   ...[/FONT]

Außerdem werden Deine Anrufbedingungen gesetzt, damit werden Deine Texte in jedem nachfolgendem Zyklus immer wieder überschrieben.
Beides trifft auch für Deine Telefonnummern zu. Du kannst also maximal an eine Telefonnummer senden.

PS: Das SPA B1 hab' ich nach Deinem Programmcode verbessert/verwendet. Wenn Deine Bedingungen vernünftig gestellt werden, kann man u.U. auch drauf verzichten und den linearen Programmablauf fortsetzen

Verbessere erst mal die bis jetzt aufgeführten Sachen, dann sehen wir weiter.
G8, ;)
 
Zuletzt bearbeitet:
Hi hucki

so habe mal den Programmcode angepasst, habe bis jetzt mit Sprungmarken noch nichts groß gemacht.

Was mache ich eigentlich wenn Anrufbedingung 6 nicht erfüllt ist, spring ich dann zum Bausteinende?, bzw. wenn die ja erfüllt ist, dann übergibt er ja die erste Telefonnummer an den FB48, wenn er eine SMS gesendet hat soll er ja , falls die 2. Telefonnummer aktiviert wurde mit 1:
Code:
L Telefon_1
L 1
==I
ja wieder von oben einlesen und abarbeiten die Kette
 
Poste bitte mal den jetzigen Stand, denn kaum einer hier hat Lust, immer alles abzutippen.
Bei mir musst Du Dich leider bis heut' Abend gedulden (muss jetzt arbeiten ;)), aber vlt. hilft Dir noch wer anderes weiter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so hier der aktuelle Stand:

Netzwerk 1
Code:
 U     #EMA
      FP    #Flankenmerker_01
      S     #Aufrufbedingung_1
      SPB   A1

      U     #BMA
      FP    #Flankenmerker_02
      S     #Aufrufbedingung_2
      SPB   A2

      U     #Wasserschaden
      FP    #Flankenmerker_03
      S     #Aufrufbedingung_3
      SPB   A3

      U     #Heizungausfall
      FP    #Flankenmerker_04
      S     #Aufrufbedingung_4
      SPB   A4

      U     #Stromausfall
      FP    #Flankenmerker_05
      S     #Aufrufbedingung_5
      SPB   A5

      U     #allg_Stoerung
      FP    #Flankenmerker_06
      S     #Aufrufbedingung_6
      SPB   A6

A1:   U     #Aufrufbedingung_1
      SPBN  A2
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_1
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A2:   U     #Aufrufbedingung_2
      SPBN  A3
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_2
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A3:   U     #Aufrufbedingung_3
      SPBN  A4
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_3
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A4:   U     #Aufrufbedingung_4
      SPBN  A5
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_4
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A5:   U     #Aufrufbedingung_5
      SPBN  A6
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_5
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A6:   U     #Aufrufbedingung_6
      SPBN  A1
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_6
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

B1:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_1
      L     1
      ==I   
      SPBN  B2
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr1
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      SPA   B4

B2:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_2
      L     1
      ==I   
      SPBN  B3
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr2
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      SPA   B4

B3:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_3
      L     1
      ==I   
      SPBN  B3
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr3
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      SPA   B4

Netzwerk 2

Code:
// Prüfen, ob Meldung 1 gesendet werden soll
B4:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      SPBN  Ende

// Aufruf des SMS_SEND
      CALL  "SMS_SEND" , "IDB_FB48"
       MPI_TS_ADAPTER:=1
       PHONE_NO      :=#Telefon_Nr_Move
       SCENTER_NO    :=#Servicecenter_Nr
       MESSAGE       :=#SMS_Text_Move
       BUSY          :=#Send_1_Busy
       STATUS        :=#Send_1_Status



// Prüfung der Aufrufergebnisse auf das Ende der Bearbeitung

      U     #Send_1_Busy                // ist BUSY == 0 ?
      SPB   Ende                        // nein, SMS_SEND bearbeitet den Auftrag noch 

      L     0                           // ja, Bearbeitung ist abgeschlossen
      L     #Send_1_Status
      ==I                               // STATUS == 0 ?
      SPB   ok_1                        // ja, es ist kein Fehler aufgetreten
      L     W#16#7000                   // nein,  
      ==I                               // hat sich SMS_SEND zurückgesetzt ?
      SPB   Ende                        // ja, SMS_SEND erneut aufrufen

// (im nächsten Zyklus)

      NOP   0                           // nein, ein Fehler ist aufgetreten.
      S     #SMS_1_Sendefehler          // SMS-Sendefehler
      R     #Aufrufbedingung_1          // Löschen der Aufrufbedingung
      R     #Aufrufbedingung_2
      R     #Aufrufbedingung_3
      R     #Aufrufbedingung_4
      R     #Aufrufbedingung_5
      R     #Aufrufbedingung_6
      SPA   Ende

//Die Bearbeitung des FB SMS_SEND wurde fehlerfrei beendet
ok_1: U     #Aufrufbedingung_1
      SPBN  C1
      R     #Aufrufbedingung_1          // Löschen der Aufrufbedingung
      R     #SMS_1_Sendefehler          // Löschen des Sendefehlers
      SPB   A2
C1:   U     #Aufrufbedingung_2
      SPBN  C2
      R     #Aufrufbedingung_2
      R     #SMS_1_Sendefehler
      SPB   A3
C2:   U     #Aufrufbedingung_3
      SPBN  C3
      R     #Aufrufbedingung_3
      R     #SMS_1_Sendefehler
      SPB   A4
C3:   U     #Aufrufbedingung_4
      SPBN  C4
      R     #Aufrufbedingung_4
      R     #SMS_1_Sendefehler
      SPB   A5
C4:   U     #Aufrufbedingung_5
      SPBN  C5
      R     #Aufrufbedingung_5
      R     #SMS_1_Sendefehler
      SPB   A6
C5:   U     #Aufrufbedingung_6
      SPBN  Ende
      R     #Aufrufbedingung_6
      R     #SMS_1_Sendefehler
      SPB   Ende

Netzwerk 3

Code:
Ende: U     #SMS_1_Sendefehler
      =     #Sammelstoerung

Netzwerk 4

Code:
BE

Vielleicht habe ich ein Denkfehler, er soll ja wenn Aufrufbedingung_1 1 ist und er eine SMS geschickt hat, ja prüfen ob Aufrufbedingung_2 1 ist und nach und nach die Schritte abarbeiten.
 
Code:
  ...
    ==I                               // hat sich SMS_SEND zurückgesetzt ?
      SPB   Ende                        // ja, SMS_SEND erneut aufrufen

// (im nächsten Zyklus)

      NOP   0                           // nein, ein Fehler ist aufgetreten.
      S     #SMS_1_Sendefehler          // SMS-Sendefehler
      R     #Aufrufbedingung_1          // Löschen der Aufrufbedingung
...

Dein #SMS_1_Sendefehler wird nie gesetzt, denn wenn sich SMS_SEND zurückgesetzt hat und das VKE ist 1 wird gesprungen, wenn
nicht gesprungen wurde ist das VKE ß und es wird auch nicht gesetzt.
Oder wolltest du statt "NOP 0" "SET" nehmen?
(Nach weiteren Punkten habe ich nicht geschaut, könnten also noch mehr Fehler drin sein.)

PS: Schau dir mal den FAQ "Wie kann ich einen Zustandsautomaten (State Machine) für die SIMATIC in der Programmiersprache AWL erstellen?" an: Siemens Industry Online Support - Automation Service, Automation Support, Simatic Service, Simatic Support, Technical Support, Technical Consulting
Ich rufe immer einen Baustein in einem Schritt auf und überprüfe im nächsten das Ergebnis. Je nach Ergebnis verzweige ich dann in weitere Schritte.
 
wenn
nicht gesprungen wurde ist das VKE ß und es wird auch nicht gesetzt.
Oder wolltest du statt "NOP 0" "SET" nehmen?
SET ist nicht nötig.
Hilfe zu AWL schrieb:
SPB Springe, wenn VKE = 1
[...]
Wenn VKE = 1, unterbricht SPB <Sprungmarke> den linearen Programmablauf und springt an das Sprungziel. Der lineare Programmablauf wird am Sprungziel fortgesetzt.
[...]
Wenn VKE = 0, wird der Sprung nicht ausgeführt. Das VKE wird auf "1" gesetzt, und der Programmablauf wird mit der folgenden Anweisung fortgesetzt.

Harald
 
Bevor ich mich weiter in Deinen Code hinein versetzte, schwirren mir ein paar Fragen durch den Kopf:


1. Was soll eigentlich Deiner Vorstellung nach passieren, wenn mehrere Fehler gleichzeitig auftreten? (Bei Stromausfall dürfte z.B. auch die Heizung betroffen sein.)

2. Muß der Text für die SMS wirklich in jedem Zyklus neu geschrieben werden oder reicht das auch beim 1. Auftreten?

3. Braucht der FB SMS_SEND zum SMS senden mehrere Zyklen oder schafft der das in einem?
(Hatte ich noch nichts mit zu tun.)​

4. Im folgendem Code (und bei B2/B3) soll doch der BLKMOV bestimmt nur aufgerufen werden, wenn eine der Aufrufbedingung EIN ist UND das #Telefon_x gleich 1 ist? Im Augenblick zählt für den Sprung nur das Ergebnis des Vergleichs:
Code:
B1:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
      L     #Telefon_1
      L     1
      ==I   
      SPBN  B2
      CALL  "BLKMOV"
Wenn ja, dann mußt Du das auch entsprechend verknüpfen:
Code:
[FONT=courier new]B1:   U     #Aufrufbedingung_1
      O     #Aufrufbedingung_2
      O     #Aufrufbedingung_3
      O     #Aufrufbedingung_4
      O     #Aufrufbedingung_5
      O     #Aufrufbedingung_6
[/FONT][FONT=courier new]      [COLOR=#ff0000]U([/COLOR][/FONT]
[FONT=courier new]      L     #Telefon_1
      L     1
      ==I   
[/FONT][FONT=courier new]      [COLOR=#ff0000])[/COLOR][/FONT]
[FONT=courier new]      SPBN  B2
      CALL  "BLKMOV"[/FONT]

5. Sollen immer alle 3 Telefone verständigt werden?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Hucki, Danke für deinen Wiedereinsatz in meiner Schrittkette.

zu 1. Wenn mehrere Fehler z.B. gleichzeitig kommen, soll nach einander die SMS'en kommen, halt nur einmal, auch wenn der Fehler weiter ansteht.

zu 2. ich def. den Zyklus bzw. ein Zyklus ist Prüfe die 6 Eingänge nacheinander, sollte alles 0 sein ist der Zyklus abgelaufen, Ist mind. eine Bedingung 1 dann dauerd der Zyklus solange bis bis er geprüft hat, ob er 3 Telefonnummern hat und wenn ja das er 3 SMS verschickt hat.

zu 3. ich hatte das auch schon mal anderes gemacht, für jeden Eingang den FB48 mit Instanzdb einzeln aufgerufen, was natürlich 6 DB's kostet, hatte das mit einem multi DB probiert dort gab es den Bug das er nur max. 11 Zeichen in der SMS zu ließ und mehr wie 11 Zeichen keine SMS verschickte

zu 4. ja genau, ich tue mich mit AWL noch ein bißchen schwar da ich immer alles in KOP gemacht habe, obwohl viele sagen AWL sei besser

zu 5. normalerweise 1 oder 2 im Urlaub dann aber schon 3 das mein Nachbar mal nachschaut

Am liebsten hätte ich das in dem FB48 geschrieben der wurde aber in SCL geschrieben.

Theoretisch müsste das Programm bei Send der SMS warten, bis die gesendet wurde und danach den 2.3.4.5.6. Eingang nach einander anfragen

mfg
 
zu 1. Wenn mehrere Fehler z.B. gleichzeitig kommen, soll nach einander die SMS'en kommen, halt nur einmal, auch wenn der Fehler weiter ansteht.
Das funktioniert jetzt bei Dir definitiv nicht wie gewünscht. Wenn zwei Bedingungen gleichzeitig vorliegen, werden sie am Ende auch zusammen gelöscht.
Ich denke, Du wirst nicht um die Einrichtung eines F(irst)I(n)F(irst)O(ut)- Speichers drum herum kommen, in dem Du die Fehlerereignisse in der Reihenfolge ihres Eintretens nach einträgst und mit dem SMS_SEND in dieser Reihenfolge auch rausschickst. In der FAQ gibt es eine Anleitung für solche FIFO-Speicher.


zu 2. ich def. den Zyklus bzw. ein Zyklus ist Prüfe die 6 Eingänge nacheinander, sollte alles 0 sein ist der Zyklus abgelaufen, Ist mind. eine Bedingung 1 dann dauerd der Zyklus solange bis bis er geprüft hat, ob er 3 Telefonnummern hat und wenn ja das er 3 SMS verschickt hat.
Da hab' ich mich wohl nicht verständlich genug ausgedrückt. Ich rede vom Programmzyklus der SPS -> Lesen Eingänge, Abarbeitung Programm, Schreiben Ausgänge -> und das ganze wieder und wieder.
Mit dem CALL-Befehl springt die Befehlsabarbeitung in den angegebenen FB. Wurde der FB abgearbeitet, wird in die Zeile nach dem CALL-Befehl zurückgesprungen und dort wieder weiter gemacht. Wenn dieser Rücksprung erfolgt, ist dann die SMS komplett geschrieben und versendet oder muss im nächsten Programmzyklus wieder in diesen FB gesprungen werden, um weiter an der SMS zu arbeiten?
Ich hoffe, ich hab mich jetzt verständlicher ausgedrückt.


zu 3. ich hatte das auch schon mal anderes gemacht, für jeden Eingang den FB48 mit Instanzdb einzeln aufgerufen, was natürlich 6 DB's kostet, hatte das mit einem multi DB probiert dort gab es den Bug das er nur max. 11 Zeichen in der SMS zu ließ und mehr wie 11 Zeichen keine SMS verschickte
Auch hier wieder Missverständnis.
Theoretisch stell' ich mir das so vor:
Zyklus X
- Fehler kommt
- passender Text wird mit BLKMOV übertragen
- SMS wird an Tel1 versendet, auf Tel 2 für nächsten Programmzyklus weiterschalten
Zyklus X+1
- Fehler noch da
- bei Dir: passender Text wird mit BLKMOV übertragen - wieso (nochmal)? Der ist doch schon da, der Aufruf bei der Flanke würde m.M.n. reichen.
- SMS wird an Tel2 versendet, auf Tel3 für nächsten Programmzyklus weiterschalten
...
Zyklus X+n
- SMS wird an Tel3 versendet, Fehler rücksetzen


zu 4. ja genau, ich tue mich mit AWL noch ein bißchen schwar da ich immer alles in KOP gemacht habe, obwohl viele sagen AWL sei besser
Nicht prinzipiell. (Meine Meinung!)
Wenn Dir KOP leichter fällt bzw. Du Dich damit sicherer fühlst, dann verwende es doch dort, wo es möglich ist. Zu AWL kannst Du dann immer noch jederzeit umschalten.
Mach' ich gerade bei Verknüpfungen auch oft so und lösch' dann z.B. die unter AWL nicht benötigten BLD-Befehle weg. Allerdings kann man durch dieses Löschen auch nicht mehr zurück schalten.
Letztendlich werden auch bei KOP/FUP im Hintergrund AWL-Befehle ausgeführt. Vor allem Rechnereien lassen sich mit AWL einfacher schreiben und Pointer, wie für den FIFO, sind nur damit möglich - aber für Verknüpfungen halte ich die Bildsprachen für geeigneter (auch auf die Gefahr hin, hier wieder einen Glaubenskrieg auszulösen).


zu 5. normalerweise 1 oder 2 im Urlaub dann aber schon 3 das mein Nachbar mal nachschaut
Dann sollte da (wenn's sonst erst mal richtig läuft) noch eine Möglichkeit rein, zu steuern, an welche Nummern alles gesendet wird. Dafür kann man z.B. ein WORD verwenden, in dem für jede anzurufende Nummer ein Bit gesetzt wird. (Byte würde reichen, ist aber in der S7-300/400 bescheidener zu verarbeiten). Aber ich denke, darauf kommen wir später zurück und behalten es erstmal nur im Hinterkopf.


Am liebsten hätte ich das in dem FB48 geschrieben der wurde aber in SCL geschrieben.
Theoretisch müsste das Programm bei Send der SMS warten, bis die gesendet wurde und danach den 2.3.4.5.6. Eingang nach einander anfragen
Gewartet wird sicher nicht, denn das Programm muss in einer gewissen Zykluszeit komplett abgearbeitet werden, sonst geht die SPS auf Störung. Wenn ein Zyklus dafür nicht ausreicht, dann wird die SMS-Erstellung in mehreren Zyklen häppchenweise fertiggestellt/versendet. Darauf zielte übrigens meine 3. Frage.
Damit dann anschließend die folgenden Meldungen verschickt werden, kommst Du (wie bereits unter 1. gesagt) m.M.n. nicht um einen vernünftigen FIFO_Speicher herum. Lass Dich davon nicht entmutigen, das klingt komplizierter als es ist.

PS: Was spricht eigentlich dagegen SCL zu lernen? ;)
Nein, ist schon OK. Ich würde den FB48 nicht verändern, denn Du benutzt ihn ja für verschiedene SMS.


PPS:
in meiner Schrittkette
Übrigens ist Dein Programm nicht das, was man üblicherweise unter einer Schrittkette versteht. Damit solltest Du Dich also auch noch mal befassen.
;)



Leider kann ich mich heute mit Deinem Programm nicht mehr eingehender beschäftigen, da ich morgen früh um 4:00 Uhr nach Wuppertal muss.
Ich muss Dich von meiner Seite aus deshalb auf Freitag vertrösten, sorry.
 
Zuletzt bearbeitet:
Hallo,

wenn wir auch über das Konzept zur Lösung Deiner Aufgabe diskutieren dürfen/wollen:

Ich meine (und hucki wohl auch), Du benötigst einen FIFO/Queue als Auftrags-Liste und zwei Poll-Routinen. Eine Routine überwacht die Alarmeingänge. Immer wenn ein Alarm-Ereignis auftritt, dann müsste das Pogramm schauen, welche Empfänger für diesen Alarm aktiviert sind und für jeden aktiven Empfänger einen Sendeauftrag (Meldungscode + Empfängercode + ggf. Meldungsbegleitwerte + ggf. Zeitstempel) in den FIFO legen. Das passiert für alle Empfänger im selben OB1-Zyklus! Sollten mehrere Alarme im gleichen OB1-Zyklus aktiv werden - kein Problem, dann eben für jeden Alarm und jeden zugeordneten Empfänger einen Sendeauftrag merken (in den FIFO legen).

Eine zweite Routine überwacht den FIFO. Enthält er mindestens einen Sendeauftrag, dann wird dieser aus dem FIFO entnommen, der Meldungstext erzeugt, die Empfänger-Telefonnummer ermittelt und "in aller Ruhe" gesendet und danach wieder in den FIFO geschaut, ob Sendeauftrag(e) vorliegen.

Ich meine, die Logik bei diesem Konzept ist übersichtlicher als bei Deinem bisherigen Programm und es ist notfalls zum größten Teil in FUP/KOP programmierbar.


Bezüglich des "Bugs", daß SMS_SEND bei Dir nur 11 Zeichen sendete: hast Du die Fehlersuche aufgegeben? Ich kann es irgendwie nicht glauben, daß es am FB48 SMS_SEND liegen soll ...

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Im folgenden Code, müsste er solange versuchen Fehlerfall 1 zu verschicken bis er behoben wurde. Dann erst Fehlerfall 2 oder Sammelstörung. Man könnte auch die Block_Move Bausteine nur jeweils einmal aufrufen und mit Zeigern arbeiten. Soll er bei Busy auch einfach wieder zu A1 springen oder braucht der FB dann einen neuen OB Zyklus? Ich kenne mich da nicht so gut aus ;)
So nach 10-maligem Editieren sollte es passen. Ich würde die Sammelstörung in einem anderen Baustein abhandeln. Da die Sammelstörung bestimmt auch mit anderen Störungen zusammen hängt. Wenn wirklich nur #SMS_1_Sendefehler auf die Sammelstörung geht. Kann man auch gleich #SMS_1_Sendefehler direkt abfragen.

Code:
      U     #EMA
      FP    #Flankenmerker_01
      S     #Aufrufbedingung_1

      U     #BMA
      FP    #Flankenmerker_02
      S     #Aufrufbedingung_2

      U     #Wasserschaden
      FP    #Flankenmerker_03
      S     #Aufrufbedingung_3
 
      U     #Heizungausfall
      FP    #Flankenmerker_04
      S     #Aufrufbedingung_4

      U     #Stromausfall
      FP    #Flankenmerker_05
      S     #Aufrufbedingung_5

      U     #allg_Stoerung
      FP    #Flankenmerker_06
      S     #Aufrufbedingung_6

      UN     #Aufrufbedingung_1
      UN     #Aufrufbedingung_2
      UN     #Aufrufbedingung_3
      UN     #Aufrufbedingung_4
      UN     #Aufrufbedingung_5
      UN     #Aufrufbedingung_6
BEB

A1: U     #Aufrufbedingung_1
      SPBN  A2
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_1
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A2:   U     #Aufrufbedingung_2
      SPBN  A3
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_2
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A3:   U     #Aufrufbedingung_3
      SPBN  A4
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_3
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A4:   U     #Aufrufbedingung_4
      SPBN  A5
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_4
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A5:   U     #Aufrufbedingung_5
      SPBN  A6
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_5
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
      SPA   B1

A6:   UN     #Aufrufbedingung_6 
      BEB                          
      CALL  "BLKMOV"
       SRCBLK :=#SMS_Text_6
       RET_VAL:=#Wert
       DSTBLK :=#SMS_Text_Move
  
B1:   
      L     #Telefon_1
      L     1
      ==I   
      SPBN  B2
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr1
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      SPA   B4

B2:   
      L     #Telefon_2
      L     1
      ==I   
      SPBN  B3
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr2
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move
      SPA   B4

B3:   
      L     #Telefon_3
      L     1
      ==I   
      SPBN  noNR
      CALL  "BLKMOV"
       SRCBLK :=#Telefon_Nr3
       RET_VAL:=#Wert
       DSTBLK :=#Telefon_Nr_Move

Netzwerk 2

Code:
// Prüfen, ob Meldung 1 gesendet werden soll
B4:  
// Aufruf des SMS_SEND

       CALL  "SMS_SEND" , "IDB_FB48"
       MPI_TS_ADAPTER:=1
       PHONE_NO      :=#Telefon_Nr_Move
       SCENTER_NO    :=#Servicecenter_Nr
       MESSAGE       :=#SMS_Text_Move
       BUSY          :=#Send_1_Busy
       STATUS        :=#Send_1_Status

// Prüfung der Aufrufergebnisse auf das Ende der Bearbeitung

      U     #Send_1_Busy                // ist BUSY == 0 ?
      BEB                       // nein, SMS_SEND bearbeitet den Auftrag noch 

      L     0                           // ja, Bearbeitung ist abgeschlossen
      L     #Send_1_Status
      ==I                               // STATUS == 0 ?
      SPB   ok_1                        // ja, es ist kein Fehler aufgetreten
      L     W#16#7000                   // nein,  
      ==I                               // hat sich SMS_SEND zurückgesetzt ?
      SPB A1                              // ja, SMS_SEND erneut aufrufen
                                                    
  
noNR: NOP 0                                                    // nein, ein Fehler ist aufgetreten.
      S     #SMS_1_Sendefehler          // SMS-Sendefehler oder keine Telenummer vorhanden
      R     #Aufrufbedingung_1          // Löschen der Aufrufbedingung
      R     #Aufrufbedingung_2
      R     #Aufrufbedingung_3
      R     #Aufrufbedingung_4
      R     #Aufrufbedingung_5
      R     #Aufrufbedingung_6
     BEA
      

//Die Bearbeitung des FB SMS_SEND wurde fehlerfrei beendet
ok_1: U     #Aufrufbedingung_1
      SPBN  C1
      R     #Aufrufbedingung_1          // Löschen der Aufrufbedingung
      R     #SMS_1_Sendefehler          // Löschen des Sendefehlers
SPA A1
C1:   U     #Aufrufbedingung_2
      SPBN  C2
      R     #Aufrufbedingung_2
      R     #SMS_1_Sendefehler
SPA A1
C2:   U     #Aufrufbedingung_3
      SPBN  C3
      R     #Aufrufbedingung_3
      R     #SMS_1_Sendefehler
SPA A1
C3:   U     #Aufrufbedingung_4
      SPBN  C4
      R     #Aufrufbedingung_4
      R     #SMS_1_Sendefehler
SPA A1
C4:   U     #Aufrufbedingung_5
      SPBN  C5
      R     #Aufrufbedingung_5
      R     #SMS_1_Sendefehler
SPA A1
C5:   UN     #Aufrufbedingung_6 
BEB
      R     #Aufrufbedingung_6
      R     #SMS_1_Sendefehler
SPA A1
 
Zuletzt bearbeitet:
Danke für euere vielen Vorschläge, war viel zu lesen für mich, werde mal die Lösung von Marius86 heute abend mal testen.

@PN/DP und hucki, muss erst mal lesen was überhaupt FIFO und 2 Poll Routinen sind, ich denke wenn es einfacher geht mache ich es natürlich einfacher :smile:
 
So habe jetzt den Baustein an Marius86 Beispiel angepasst, folgende Erkentnis:
Er sendet max. an einer der 3 Telefonnummern, wenn z.B. 2 aktiviert wurden, nimmt er die erste in der Reihenfolge.
Über eine Variablen Tabelle habe ich mal ganz langsam mit 10 Sekunden Zeitversatz alle 6 eingänge belegt. dort kamen auch die Texte genau nach Reihenfolge an.
Wenn ich aber alle 6 Eingänge nacheinander so schnell wie möglich auf 1 setze überspringt er welche, statt 6 verschiedene kommen z.B. sparadisch nur 4 SMS an.

Ich schätze mal das er sich da irgendwie verhaspelt.


Ich habe jetzt mal zu FIFO was gefunden so richtig verstanden habe ich es aber nicht, wenn mal einer ein Beispiel Posten könnte wäre ich dankbar
um zu sehen, was man damit bezweckt, genau so die Poll Routinen.

mfg babylon05
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Schrittkette in AWL würde ich über eine Sprungliste lösen, jetzt mal abgesehen von den anderen Vorschlägen zu deinem Thema, such mal nach der Anweisung SPL in der Hilfe!

Hier ein Auszug:

Code:
L MB0 //Lade die Nummer des Sprungziels in AKKU1-L-L.
SPL LSTX //Sprungziel, wenn AKKU1-L-L > 3 ist.
SPA SEG0 //Sprungziel, wenn AKKU1-L-L = 0 ist.
SPA SEG1 //Sprungziel, wenn AKKU1-L-L = 1 ist.
SPA COMM //Sprungziel, wenn AKKU1-L-L = 2 ist.
SPA SEG3 //Sprungziel, wenn AKKU1-L-L = 3 ist.
LSTX: SPA COMM 
SEG0: * //Zulässige Anweisung.
* 
SPA COMM 
SEG1: * //Zulässige Anweisung.
* 
SPA COMM 
SEG3: * //Zulässige Anweisung.
* 
SPA COMM 
COMM: * 
*

Grüße Pico
 
Ungetestet, aber so in etwa würde ich da herangehen ->

1.Netzwerk - aufgetretenen Fehler mit höchster Priorität erfassen und Nr. zuweisen:
Code:
[FONT=courier new]      L     1
[/FONT][FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_1[/FONT]
[FONT=courier new]      FP    #Flankenmerker[1][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      L     2[/FONT]
[FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_2[/FONT]
[FONT=courier new]      FP    #Flankenmerker[2][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      +I    [/FONT]
[FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_3[/FONT]
[FONT=courier new]      FP    #Flankenmerker[3][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      +I    [/FONT]
[FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_4[/FONT]
[FONT=courier new]      FP    #Flankenmerker[4][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      +I    [/FONT]
[FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_5[/FONT]
[FONT=courier new]      FP    #Flankenmerker[5][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      +I    [/FONT]
[FONT=courier new]      T     #FehlerNr[/FONT]
[FONT=courier new]      U     #Fehler_6[/FONT]
[FONT=courier new]      FP    #Flankenmerker[6][/FONT]
[FONT=courier new]      SPB   FEE[/FONT]

[FONT=courier new]      SPA   FM                          //kein neuer Fehler einzutragen[/FONT]

[FONT=courier new]FEE:  NOP   0[/FONT]

2. Netzwerk - wenn gewünscht, gleichzeitige Fehler niederer Priorität für den nächsten Zyklus unterdrücken:
Code:
[FONT=courier new]      U     #Prioritaet                 //nur höhere Prio eintragen?
[/FONT][FONT=courier new]      SPBN  FLE                         //Nein - Routine überspringen[/FONT]

[FONT=courier new]      L     #FehlerNr[/FONT]
[FONT=courier new]      SPL   LST1                        //Sprungleiste entsprechend #FehlerNr[/FONT]
[FONT=courier new]      SPA   FLE                         //0 nicht definiert[/FONT]
[FONT=courier new]      SPA   FL1[/FONT]
[FONT=courier new]      SPA   FL2[/FONT]
[FONT=courier new]      SPA   FL3[/FONT]
[FONT=courier new]      SPA   FL4[/FONT]
[FONT=courier new]      SPA   FL5[/FONT]
[FONT=courier new]LST1: SPA   FLE[/FONT]
[FONT=courier new]
[/FONT][FONT=courier new]FL1:  U     #Fehler_2                   //Fehlerzustand dieses Zyklus auf[/FONT]
[FONT=courier new]      =     #Flankenmerker[2]           //Flankenmerker übertragen[/FONT]
[FONT=courier new]FL2:  U     #Fehler_3[/FONT]
[FONT=courier new]      =     #Flankenmerker[3]            [/FONT]
[FONT=courier new]FL3:  U     #Fehler_4[/FONT]
[FONT=courier new]      =     #Flankenmerker[4][/FONT]
[FONT=courier new]FL4:  U     #Fehler_5[/FONT]
[FONT=courier new]      =     #Flankenmerker[5][/FONT]
[FONT=courier new]FL5:  U     #Fehler_6[/FONT]
[FONT=courier new]      =     #Flankenmerker[6][/FONT]
[FONT=courier new]
[/FONT][FONT=courier new]FLE:  NOP   0[/FONT]

3. Netzwerk - Fehler in FIFO-DB eintragen:
Code:
[FONT=courier new]      TAR1  #dTempAR1                   //Adressregister 1 sichern
[/FONT][FONT=courier new]      AUF   #FehlerDB[/FONT]

[FONT=courier new]      L     #Zeiger_Schreiben           //Aktueller Speicherplatz[/FONT]
[FONT=courier new]      L     2                           //Byteanzahl je Speicherplatz[/FONT]
[FONT=courier new]      *I    [/FONT]
[FONT=courier new]      SLD   3                           //Pointerformat erzeugen (Wert auf Byteadressstelle verschieben)                              [/FONT]
[FONT=courier new]      LAR1                              //in das Adressregister laden                 [/FONT]

[FONT=courier new]      L     #FehlerNr[/FONT]
[FONT=courier new]      T     DBW [AR1,P#0.0]             //FehlerNr in FIFO eintragen (Pointer + Start-Versatz im DB)[/FONT]

[FONT=courier new]      L     1[/FONT]
[FONT=courier new]      L     #Zeiger_Schreiben[/FONT]
[FONT=courier new]      +I                                //Zeiger um einen Platz erhöhen[/FONT]
[FONT=courier new]      L     10[/FONT]
[FONT=courier new]      <I                                //noch kleiner als 10? (Maximaler Speicherplatz)[/FONT]
[FONT=courier new]      SPB   ZS_N[/FONT]
[FONT=courier new]      L     0                           //auf Anfang zurücksetzen[/FONT]
[FONT=courier new]ZS_N: T     #Zeiger_Schreiben           //Neuer Wert des Zeigers[/FONT]

[FONT=courier new]      LAR1  #dTempAR1                   //gesichertes Adressregister in AR1 zurückschreiben[/FONT]

4. Netzwerk - gibt's zu meldende Fehler:
Code:
[FONT=courier new]FM:   L     #Zeiger_Schreiben
[/FONT][FONT=courier new]      L     #Zeiger_Lesen[/FONT]
[FONT=courier new]      <>I   [/FONT]
[FONT=courier new]      =     #Alarm[/FONT]
[FONT=courier new]      NOT                               //wenn kein Alarm zu melden[/FONT]
[FONT=courier new]      BEB                               //Baustein beenden[/FONT]

5. Netzwerk - zu meldenden Fehler auslesen:
Code:
[FONT=courier new]      U     #SMS_Text_eingetragen       //Text bereits übertragen
[/FONT][FONT=courier new]      SPB   FTE[/FONT]

[FONT=courier new]      TAR1  #dTempAR1                   //Adressregister 1 sichern[/FONT]
[FONT=courier new]      AUF   #FehlerDB[/FONT]

[FONT=courier new]      L     #Zeiger_Lesen               //Aktueller Speicherplatz[/FONT]
[FONT=courier new]      L     2                           //Byteanzahl je Speicherplatz[/FONT]
[FONT=courier new]      *I    [/FONT]
[FONT=courier new]      SLD   3                           //Pointerformat erzeugen (Wert auf Byteadressstelle verschieben)                              [/FONT]
[FONT=courier new]      LAR1                              //in das Adressregister laden                 [/FONT]

[FONT=courier new]      L     DBW [AR1,P#0.0]             //FehlerNr aus FIFO auslesen (Pointer + Start-Versatz im DB)[/FONT]
[FONT=courier new]      LAR1  #dTempAR1                   //gesichertes Adressregister in AR1 zurückschreiben[/FONT]

[FONT=courier new]      SPL   LST2                        //Sprungliste[/FONT]
[FONT=courier new]      SPA   FTE                         //0 nicht definiert[/FONT]
[FONT=courier new]      SPA   FT1[/FONT]
[FONT=courier new]      SPA   FT2[/FONT]
[FONT=courier new]      SPA   FT3[/FONT]
[FONT=courier new]      SPA   FT4[/FONT]
[FONT=courier new]      SPA   FT5[/FONT]
[FONT=courier new]      SPA   FT6[/FONT]
[FONT=courier new]LST2: SPA   FTE[/FONT]

[FONT=courier new]FT1:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_1[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FT2:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_2[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FT3:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_3[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FT4:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_4[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FT5:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_5[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FT6:  CALL  "BLKMOV"[/FONT]
[FONT=courier new]       SRCBLK :=#SMS_Text_6[/FONT]
[FONT=courier new]       RET_VAL:=#Wert[/FONT]
[FONT=courier new]       DSTBLK :=#SMS_Text_Move[/FONT]
[FONT=courier new]      SPA   FTC[/FONT]

[FONT=courier new]FTC:  L     0[/FONT]
[FONT=courier new]      L     #Wert[/FONT]
[FONT=courier new]      ==I   [/FONT]
[FONT=courier new]      S     #SMS_Text_eingetragen[/FONT]

[FONT=courier new]FTE:  NOP   0[/FONT]


Für mehr ist es mir heut' zu spät, sorry.

Auf jeden Fall darf der #Zeiger_Lesen erst erhöht werden, wenn die SMS an alle gewünschten Telefonnummern rausgegangen ist. Gleichzeitig mit dem Erhöhen des Zeigers wird der Flag #SMS_Text_eingetragen wieder zurückgesetzt.

Je nachdem wie groß Du im Netzwerk 3 die max. Anzahl an Speicherplätzen wählst, hast Du so auch die Möglichkeit, die Fehler später zurück zu verfolgen. Auf jeden Fall muß die Anzahl so groß gewählt werden, dass die neuen Eintragungen die noch zu meldenden Fehler nicht einholen (überrunden) können.
Wenn man im Netzwerk 3 und 5 auch die Byteanzahl je Speicherplatz erhöht, könnte man in den Fehler-DB z.B. an die Stelle "
T DBW [AR1,P#2.0]" noch das aktuelle Datum + Uhrzeit eintragen.
 
Zurück
Oben