CPU 313 2 DP Merkwürdige Funktion

Guste

Level-1
Beiträge
338
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Gemeinde.
An einer CPU 313 2 DB habe ich eine merkwürdige Nichtfunktion

CPU 313 2DP
Interessante Funktion kennt das jemand.
Der DB300,DBX2.0 wird nur in diesem Netzwerk gesetzt und rückgesetzt lt. Querverweis.
Im Netzwerk 18 sind alle Setzbedingungen vorhanden, aber das Bit wird nicht gesetzt.
Ersetze ich den Der DB300,DBX2.0 durch M60.0 so funktionierts


Netzwerk 18

DB300.DBX 2.0 wird nicht gesetzt ???

U(
O DB300.DBX 7.3
O DB300.DBX 7.4
)
U DB300.DBX 16.0
U(
U DB300.DBX 0.2
L S5T#500MS
SE T 90
NOP 0
NOP 0
NOP 0
U T 90
)
S DB300.DBX 2.0
U(
O DB300.DBX 4.0
O DB300.DBX 3.0
)
R DB300.DBX 2.0
NOP 0


Netzwerk 19


Ersetzte ich DB300.DBX 2.0 durch M60.0 so ist alles I.O

U(
O DB300.DBX 7.3
O DB300.DBX 7.4
)
U DB300.DBX 16.0
U(
U DB300.DBX 0.2
L S5T#500MS
SE T 90
NOP 0
NOP 0
NOP 0
U T 90
)
S M 60.0
U(
O DB300.DBX 4.0
O DB300.DBX 3.0
)
R M 60.0
NOP 0

CPU 313 2DP
Interessante Funktion kennt das jemand.
Der DB300,DBX2.0 wird nur hier gesetzt und Rückgesetzt.
Im Netzwerk 18 sind alle Setzbedingungen vorhanden, aber das Bit wird nicht gesetzt.
Ersetze ich den Der DB300,DBX2.0 durch M60.0 geht funktionierts


Netzwerk 18


DB300.DBX 2.0 wird nicht gesetzt

U(
O DB300.DBX 7.3
O DB300.DBX 7.4
)
U DB300.DBX 16.0
U(
U DB300.DBX 0.2
L S5T#500MS
SE T 90
NOP 0
NOP 0
NOP 0
U T 90
)
S DB300.DBX 2.0
U(
O DB300.DBX 4.0
O DB300.DBX 3.0
)
R DB300.DBX 2.0
NOP 0


Netzwerk 19


Ersetzte ich DB300.DBX 2.0 durch M60.0 so ist alles I.O

U(
O DB300.DBX 7.3
O DB300.DBX 7.4
)
U DB300.DBX 16.0
U(
U DB300.DBX 0.2
L S5T#500MS
SE T 90
NOP 0
NOP 0
NOP 0
U T 90
)
S M 60.0
U(
O DB300.DBX 4.0
O DB300.DBX 3.0
)
R M 60.0
NOP 0
 
Versuchs mal mit --> gehe zur Verwendungsstelle
--> Überlappender Zugriff auf Speicherbereiche.

Riecht als würde DBB2 oder DBW1 noch mal verwendet...
 
Hallo

Du kannst ja mal alle anderen Bausteinaufrufe ausklammern // call fc xy.
und auch alle anderen Netzwerke überspringen SPA Mxxx.

So dass du nur noch diese Anweisungen bearbeitest.

Ich weiß nicht ob du speicherindirekt adressierst, dabei wird
mit "Gehe zu Verwendungsstelle" nicht alles angezeigt.

Gruß
Bernhard
 
Das habe ich natürlich schon versucht.
Das einzige was ich mach ist

L DBXX.DBW1
T DB300.DBB1
da kann ja im Bereich DBB 2 nix passieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gut, ich korrigiere mich...

Der Übertrag wird NICHT ins nächste Byte geschoben.

Aber bei Werten größer 256 kommt Käse raus, halt nur das was an Bits so in dem Byte stand. Weiss ja nicht ob es so sein soll, ich find's halt nicht schön ein Wort in ein Byte runterzubrechen.
 
Zuletzt bearbeitet:
Da wird nichts passieren - sorry ... Es ist einfach nur ggf. nicht so schön.
Aber ... was wäre, wenn denn einmal irgendwo im Programm statt "T DBBx" der Befehl "T DBWx" stehen würde ? Dann hätten wir schon den Salat - das könnte uns aber die Querverweisliste verraten ... Ich würde aber ggf. mal nach so etwas suchen ...

Gruß
Larry
 
Ich habe schon des öfteren Worte in ein Byte geladen.
Oft einfach um Speicherplatz zu sparen. Kommt noch von der S5 Zeit her.
Es muß aber schon was mit dem zu tun haben.
Gut ich nehm dann eben das Low Byte vom Wort und schiebe es rüber. macht ja nix.
In dem Wort stehen mom nur Zahlen bis 4. Dürfte so gesehen wegen dem Überlauf nix machen.

Gruß Guste
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, in S5-Zeiten hat es evtl. auch Sinn gemacht. Aber wir sind fast im Jahr 2012. Siemens hat den CPUs mehr Speicher spendiert und es gibt TIA...
Du solltest dir überlegen, diesen Stil mal langsam abzulegen. Und das meine ich jetzt ganz ernst, ohne Dir irgendwas zu wollen. Es dürfte sehr wahrscheinlich sein, dass dein "Problem" ein Resultat dieser Programmierweise ist.
Wortzugriffe auf ungerade Adressen führen wahrscheinlich überproportional häufig zu Adressüberschreitungen. Und schon hat man den Salat...
 
Das habe ich natürlich schon versucht.
Das einzige was ich mach ist

L DBXX.DBW1
T DB300.DBB1
da kann ja im Bereich DBB 2 nix passieren.


--> tja da würd im dbb2 schon was passieren!!
--> soviel ich weiß, wird stehst empfohlen, ungerade adr. Im w-Bereich zu unterlassen.
--> Grund: probier mal
--> 1.
--> L dbxx.dbw0
--> T dbxy.dbw10
--> Bytes müßten ausgekreuzt sein.

--> 2.
--> L dbxx.dbw5
--> T dbxy.dbw12
--> Bytes nicht verdreht

--> schau dir mal in der step 7 Hilfe den strukturellen Aufbau der Wörter bzw. Doppelwörter an...sieht man dann recht schnell.

Grüße
Plcfritz
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fassen wir mal zusammen:

Das einzige was ich mach ist
L DBXX.DBW1
T DB300.DBB1
da kann ja im Bereich DBB 2 nix passieren.

Stimmt.

Nein Bernhard Indirekt adressiere ich nicht.

Fällt auch aus.

Bleibt noch der Vorschlag von 4L bezüglich der Visu und eventuell die Referenz des DBX2.0.

@Guste: kannst Du einen Screenshot der Referenz des DBX2.0 posten?
 
was soll denn da passieren? ich verstehs nicht!
es passiert ganz genau überhaupt gar nichts im DBB2 so siehts aus und so wird es bleiben!

Stimmt im dbb2 nicht aber:

L dbw1 --> Akku 1 --> sieht dann so im akku1 aus: dbb1 / dbb2
Transferiert du jetzt
T DBB1 so wird aus akku1 das ursprüngliche dbb2 geladen (T Byte = Akku 1 L-L)

... Oder lieg ich da falsch

Was für diese Aussage zutrifft ist:
L mw1
T mw10
Für ein bitschieberegister muss in diesem Fall nun die bytereihenfolge nicht mehr aufgekreuzt werden.
L mw0
T mw10
In diesem Fall schon ?!?

Ist bei mir schon länger her deshalb kann es auch sein, dass ich falsch liege.

Grus
Plcfritz
 
Zurück
Oben