Step 7 Bei verwenden von indirekter Adressierung in PLS-Sim geht AG ins Stop

websiedler

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Liebe SPS-Gemeinde,

sobald ich auf eine temp-variable #Adr mittels indirekter Adressierung zugreife, geht das AG in Stop (Simulation). Ok, lade ich den OB121 dazu, verhindert er genau dies, aber über die indirekte Adressierung wird nichts geladen oder kopiert.

Code:
L     #SlaveAdr     
L     2
/I    

L     #MasterAdr
+I    
T     #Adr

L     PEB [#Adr]          // Ab dieser Stelle wird nicht geladen und AG geht in Stop
T     LB     4
Den Baustein habe Ich in FB41 geschrieben, #MasterAdr und #SlaveAdr sind Eingänge, #Adr ist eine Temp-Variable. Der Baustein wird in OB1 aufgerufen.
Dann habe Ich nach Lösungsansätze im Internet gesucht und das hier gefunden.
https://people.fh-landshut.de/~sbr/Vorlesung_SPS_Okt_2010_Teil2.pdf

Also einen anderen Code ausprobiert, und zwar diesen.
Code:
L 9               
T MD 50 
            
L EB [MD 50]       // Und wieder geht an dieser Stelle AG in Stop, und es wird nichts geladen.
T MW [MD 50]
Hat jemand solche Erfahrungen mit der Simulation gemacht? Liegt das an PLC-Sim, oder ist hier irgend wo ein Denkfehler.
Danke für Eure Antworten.
Gruß websiedler.
 
Also einen anderen Code ausprobiert, und zwar diesen.
Code:
L 9               
T MD 50 
            
L EB [MD 50]       // Und wieder geht an dieser Stelle AG in Stop, und es wird nichts geladen.
T MW [MD 50]
.

Die 9 ist false, ein byte adres muste mit ein vielfach von 8 angesprochen worte. Wenn Sie EB 9 abfragen wollte must in MD50 9*8 = 72 stehn.

Code:
L 9
SLW3      //= * 8 um dass bitadresse zu bekommen
T MD50
L  EB [MD50]    // EB9
T  MW [MD50]  //MW 9   ( Inhalt von EB 9 steht in MB10)
Mit abfrage von ein PEB is das genau so, und das adresse van der PEB must via die HW config in PLCSim eingetrage sind.


Joop
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort.
Leider hilft das mit der indirekten Adressierung hier nicht weiter, denn an der besagten Stelle lädt er nicht.
Code:
L     9
L     8
*I    


T     MD    50                    // Hier lädt er die "72" 
L     EB [MD 50]                 // ab hier macht er nichts mehr
T     MW [MD 50]               //
Habe Ich das so richtig verstanden, Joop?
 
an der besagten Stelle lädt er nicht.
Code:
L     9
L     8
[COLOR="#FF0000"]*I[/COLOR]             [COLOR="#FF0000"]// für Adressberechnungen besser *D benutzen[/COLOR]


T     MD    50                    // Hier lädt er die "72" [COLOR="#FF0000"]hier schreibt er 72 (= P#9.0) in das MD50[/COLOR]
L     EB [MD 50]                  // ab hier macht er nichts mehr [COLOR="#FF0000"]hier wird ein [B]BYTE[/B] geladen[/COLOR]
T     [COLOR="#FF0000"]MW[/COLOR] [MD 50]                  // [COLOR="#FF0000"]aber in ein [B]WORD[/B] geschrieben[/COLOR]
Ist das tatsächlich exakt der Code, den Du testest oder hast Du Dich beim Abtippen vertippt?
Der Code ist zwar nicht ganz schön, sollte aber funktionieren.

Was steht denn im Diagnosepuffer von PLCSIM?
Hast Du auch die HWKonfig (die Systemdaten) in PLCSIM geladen?
Welche Versionen von PLCSIM und Step7 verwendest Du?

PS:
Was meinst Du mit "ab hier macht er nichts mehr" - an der Stelle geht PLCSIM in Stop oder läd es nur nicht das, was Du erwartest?

Harald
 
Zuletzt bearbeitet:
Es geht um den Code.
Code:
L     #SlaveAdr     // In Standard steht 2
L     2                 // In Standard steht 2
/I                       // In Standard steht 1

L     #MasterAdr    [FONT=Verdana]// Standard = 352[/FONT]
+I                       [FONT=Verdana]// Standard = 353[/FONT]
T     #Adr            [FONT=Verdana]// Standard = 353
[/FONT]
L     PEB [#Adr]    [FONT=Verdana]// Standard = 0, Akku 2 = 353[/FONT][FONT=Verdana] 
[/FONT][FONT=Verdana]LB     4               [/FONT][FONT=Verdana]// Standard = 0, Akku 2 = 353
[/FONT]
#MasterAdr & #SlaveAdr sind Input(int), #Adr ist eine Temp-Variable(DWord), und im Output sind Adr1...bis..Adr8(bool) von 4.0 bis 4.7.
Im OB1 aufruf sollte eigentlich, an den Ausgängen etwas ausgegeben werden? Tut es bei mir nicht.

Jetzt geht AG nicht ins Stop, gibt aber am Ausgang auch nichts aus. Heute Mittag stand im Diagnosepuffer ab der stelle, wo der zweizeiler der indirekte Adressierung steht, dass der OB121 benötigt oder ein Function Request Block fehlt.

Den anderen Code habe Ich aus dem Internet zum gegentesten (siehe link weiter oben) gefunden, und stutze um so mehr.
@Harald: Ja, mit der Multiplikation in Double anstelle von Integer wirst du recht haben. Ich dachte, der Anfangswert sei "int", sorry. Der Rest des Codes, habe Ich 1 zu 1 entnommen, ausser dem schieben von 3 (SLW 3), das habe Ich weggelassen :)
Step 7 v5.5
PLC-Sim v5.4 +SP4
Vielen Dank für die Antworten.
 
Bei PLCSIM muss bei Direktzugriffen auf die Peripherie (PEx, PAx) vorher die Hardware-Konfiguration übertragen werden.
 
Zurück
Oben