Step 7 SCL (Variablen) indizierter Zugriff

Legosteine

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend liebes SPS Forum,

Ich möchte gerne die PEW Adresse im "Merker" eingeben (um ändern) und
dann den Digitalen Wert auslesen können.

Im Simulation Programm S7-PCLSIM funktioniert der Code,
wenn ich das Programm auf unsere Test- Hardware übertrage,
setzt sich die CPU sobald sie eine Zahl bekommt im Fehler Modus.

Code:
VAR
    Zahl:INT;
    digitalerwert:INT;
END_VAR 
digitalerwert:=WORD_TO_INT(PEW[Zahl]);
 
Das ist aber nicht lieb von der CPU, einfach so in "Fehler Modus" gehen ... nur wegen einer schnöden Zahl ... ;)

Dann schau halt in den Diagnosepuffer der CPU, da steht drin, warum an der CPU die SF-LED leuchtet. Höchstwahrscheinlich "Zugriffsfehler beim Lesen" auf eine nicht vorhandene Hardware-Adresse.

PS:
Wie immer die wichtigste Angabe: Welche CPU?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Folgende CPU wird verwendet CPU 315 2 DP.

Den Diagnosepuffer hatte ich ausgelesen gehabt.
Da stand was von OB 100 1XX hochladen oder so...
Muss ich morgen noch mal genau gucken ....

Die Hardware Adresse stimmt, wenn ich im Quell Code statt PEW[Zahl] die dreckte Zuweisung machen PEW256
lauft die CPU 1A.
 
Hallo,
dein Codeschnipsel ist ja so nicht vollständig. "Zahl" ist eine temporär deklarierte Variable. Zu welchem Zeitpunkt kommt den wie die gewünschte 256 in die Variable ?
Bedenke bitte : eine Temp.Variable kann sich nichts von Zyklus zu Zyklus "merken" und im Falle deines Codeschnipsels steht da für mich erstmal irgendetwas drin.

Gruß
Larry
 
Hallo,
dein Codeschnipsel ist ja so nicht vollständig. "Zahl" ist eine temporär deklarierte Variable. Zu welchem Zeitpunkt kommt den wie die gewünschte 256 in die Variable ?
Bedenke bitte : eine Temp.Variable kann sich nichts von Zyklus zu Zyklus "merken" und im Falle deines Codeschnipsels steht da für mich erstmal irgendetwas drin.

Gruß
Larry


Mein richtiger Code greift auf einen Globalen Datenbaustein zu.
Die Variablen werden dann vom Touch- Panel geändert.

Reicht die Info, sonst bau ich eben mein Arbeits Notebook auf und Poste den Code
Was genau willst du sehen.

Mein Gedanke:
Aber warum Funktioniert das dann in der Simulation von
STEP 7 5.5 und WINCC Flexible 2008.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann schau morgen nochmal GENAU nach - "oder so..." hilft nicht viel bei der Fehleranalyse.
Wenn Du Dein Problem danach trotzdem nicht lösen kannst, dann poste mal den ganzen Code den Du tatsächlich verwendest. Wie kommt bei Dir die 256 in die Variable "Zahl"? Steht da sicher 256 drin? In dem von Dir gezeigten Code gibt es keine Zuweisung an "Zahl".
[EDIT] OK, das hast Du schon auf Larrys Frage beantwortet


Aber warum Funktioniert das dann in der Simulation von
STEP 7 5.5 und WINCC Flexible 2008.
Wenn Du in PLCSIM auch die Hardware Konfig lädst (also Systemdaten mitladen), dann sollte das PLCSIM ebenfalls "in Fehler Modus" gehen - sprich SF-LED und Diagnosepuffer verhalten sich dann wie bei der realen Hardware.

Harald
 
Hier mein Code

//Auszug SCL Quelle FB15
Code:
FUNCTION_BLOCK FB15

VAR_TEMP
    // temporäre Variablen

END_VAR
VAR
    // statische Variablen

END_VAR 

"root".nuOfWordDigiIn1:=WORD_TO_INT(PEW["root".numberOfWordIn1]);

END_FUNCTION_BLOCK

//Globaler Datenbaustein DB13 "root"
Code:
Adresse Name Type Anfanfswert Kommentar
+20.0 numberOfWordIn1    INT    0    Analog Eingang - Messwerteingang z.B. 272    
+40.0 nuOfWordDigiIn1    INT    0    Analog Einagng - Digitalermesswert

// WinnCC
Verbinduung MP377 12 Touch zu CPU315 2 DP
Schnittstelle IF1B MPI/DP

Code:
// Für Eingabe für PEW
Einstellungen Eingabe/ Ausgabe
Prozessvariable Root.numberOfWordIn1
Anzeige -> Dartstellung Dezimal
Darstellungsformat 999

// Digitaler Wert Auslesen
Einstellungen Ausgabe
Prozessvariable Root.nuOfWordDigiIn1
Anzeige -> 
Dartstellung Dezimal
Darstellungsformat 99999

AI8x12Bit
272 bis 287
 
Zuletzt bearbeitet:
Fehlerbericht

Code:
Ereignis 1 von 100:  Ereignis-ID 16# 4563
STOP durch  Peripheriezugriffsfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden) 
Unterbrechungstelle im Anwenderprogramm:  Zyklisches Programm (OB 1)  
Prioritätsklasse:    1
FB-Nummer:    15
Bausteinadresse:      8 
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
08:27:51.623  14.10.2013
(Kodierung: 16# 4563  FF84  8E70  0101  000F  0008)


Ereignis 2 von 100:  Ereignis-ID 16# 2942
Peripherie-Zugriffsfehler, lesend  
P-Bereich , Wortzugriff, Zugriffsadresse:    272
Angeforderter OB: Peripheriezugriffsfehler-OB (OB 122)
OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
externer Fehler, kommendes Ereignis
08:27:51.623  14.10.2013
(Kodierung: 16# 2942  FE7A  0020  0110  0000  0000)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

hast Du nirgends eine Prüfung, ob der DB13.DBW20 (numberOfWordIn1) eine zulässige Adresse enthält?
Und was stand im Diagnosepuffer?

Harald

PS:
der symbolische Name numberOfWordIn1 ist irreführend oder zumindest absolut nichtssagend.. die Variable enthält eine Adresse und keine Anzahl
 
Moin,

hast Du nirgends eine Prüfung, ob der DB13.DBW20 (numberOfWordIn1) eine zulässige Adresse enthält?
Und was stand im Diagnosepuffer?

Harald

PS:
der symbolische Name numberOfWordIn1 ist irreführend oder zumindest absolut nichtssagend.. die Variable enthält eine Adresse und keine Anzahl

Was für eine Prüfung ???
Diagnosepuffer siehe Beitrag 8

Bin noch ziemlich Neu auf den SPS gebiet
 
In Beitrag 8 dieses Thread steht in der 2. Diagnose, dass versucht wird auf Per.Adresse 272 zuzugreifen - oben im Thread schreibst du von Adresse 256 ... 8)
Kann es sein dass du in deinem DB die 272 eingetragen hast und in der HW-Konfig die 256 ?

Gruß
Larry
 
In Beitrag 8 dieses Thread steht in der 2. Diagnose, dass versucht wird auf Per.Adresse 272 zuzugreifen - oben im Thread schreibst du von Adresse 256 ... 8)
Kann es sein dass du in deinem DB die 272 eingetragen hast und in der HW-Konfig die 256 ?

Gruß
Larry
Ja haben sich geandert sitze jetzt an meiner Hardware
Im Betrag 7 steckt die info

AI8x12Bit
272 bis 287

Neben Info

Es ist ein PT100 angeschlossen

Meßart: RT 100
Meßbereich: PT100 st

Klemme 2 bis 5
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... wie auch immer ...
Die Diagnose sagt, das versucht wird auf die Per.-Adresse 272 zuzugreifen und auch, dass es die nicht gibt ... Ich denke, da ist das Problem ...

Gruß
Larry
 
Code:
Ereignis 2 von 100:  Ereignis-ID 16# 2942
Peripherie-Zugriffsfehler, lesend  
P-Bereich , Wortzugriff, Zugriffsadresse:    272
bedeutet, daß es (zum Zeitpunkt des Zugriffs) keine Hardware-Adresse PEW272 gibt/gab.
typische Fehlerursache --> falsche oder keine HW Konfig geladen oder keine Baugruppe gesteckt oder Baugruppe defekt

Wolltest Du nicht eigentlich auf PEW256 zugreifen? [EDIT: OK, schon beantwortet]


Code:
Ereignis 1 von 100:  Ereignis-ID 16# 4563
STOP durch  Peripheriezugriffsfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden) 
Unterbrechungstelle im Anwenderprogramm:  Zyklisches Programm (OB 1)  
Prioritätsklasse:    1
FB-Nummer:    15
Bausteinadresse:      8
Das ist normale Folge des Peripheriezugriffsfehler, wenn kein OB122 geladen ist.
Allerdings wundert mich die niedrige "Bausteinadresse 8" an der der Fehler auftrat - gar nicht typisch für SCL.
Ist tatsächlich genau der FB15 geladen, welcher aus SCL erzeugt wurde?
Kannst Du vielleicht mal den AWL-Code zeigen, der von SCL erzeugt wurde? (den FB15 in einen anderen Bausteine-Ordner kopieren, dann kann man ihn im AWL-Editor öffnen).

Harald
 
hast Du nirgends eine Prüfung, ob der DB13.DBW20 (numberOfWordIn1) eine zulässige Adresse enthält?
Was für eine Prüfung ???
[...]
Bin noch ziemlich Neu auf den SPS gebiet

Na z.B. eine Prüfung (und ggf. Korrektur), ob numberOfWordIn1 eine gerade Zahl aus dem Bereich 272 bis 286 enthält - bevor das PEW[numberOfWordIn1] eingelesen wird!

Es darf nicht sein, daß die CPU in STOP geht, nur weil im HMI z.B. "121" oder "12345" eingegeben wird.


PS:
Muß diese Indirekt-Spielerei überhaupt sein? Wofür wird diese Funktion benötigt? Das kann man doch bestimmt auch anders (sauber) lösen ...

Harald
 
Zurück
Oben