MOVE Befehl mit CPU313 2DP

axl86

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


Habe ein Problem mit dem "Move" Befehl.

Wollte mir diesen zur Vereinfachung für folgenden Programmteil zb verwenden:

Letztes Netzwerk:

U M 5.0
SPB M001

U M 5.1
SPB M002
BEA

M001: L DB56.DBW 4
L 3000
*I
T DB20.DBW 20
BEA
M002: L DB56.DBW 4
L 5000
*I
T DB20.DBW 20
BEA

Diesen Programmteil wollte ich durch folgende Änderung vereinfachen:

Netzwerk 5:

U M 5.0
SPBNB _008
L DB56.DBW 4
L 3000
*I
T DB20.DBW 20
_008: NOP 0

Netzwerk 6:

U M 5.0
SPBNB _009
L DB56.DBW 4
L 5000
*I
T DB20.DBW 20
_009: NOP 0

Verwende ich letzten Programmteil verhält sich die Steuerung sehr eigenartig.
Ich habe in einem Anderen FB zb. einen Merker mit einer SR Funktion eingesetzt, der sich durch diese Programmänderung nicht mehr zurücksetzen lässt...
Mir kommt es vor, als gäbe es undefinierbare eingriffe durch diesen MOVE Befehl.

Wie verwendet man diesen richtig?
Diese vereinfachung wollte ich nur machen, damit diese Sprungfunktion, die man immer am ende eines FBs programmieren muss, nicht mehr am Ende sein muss und ich mehrere in einem FB verwenden kann.


Vielen Dank schonmal für die Hilfe.
Ich hoffe man kann es verstehen, was ich meine.

Gruß
Axel
 
In deinem 2. Beispiel wolltest du warscheinlich im Netzwerk 6 ...
Code:
[B][COLOR=Red]      U     M      5.1[/COLOR][/B]
      SPBNB _009
      L     DB56.DBW    4
      L     5000
     *I
      T     DB20.DBW   20
_009: NOP   0
... schreiben ...

Für mich ist der Code so erstmal richtig. Was mir auffällt sind die hohen Faktoren, die du nimmst ... Im obigen Beipiel dürfte im DB56.DBW4 nur maximal 6 drinstehen, da du sonst einen Integer-Überlauf bekommst ... Hast du das berücksichtigt ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nachdem ich das mal lesbar dargestellt habe ist mir in deiner lösung folgendes aufgefallen:

Code:
*
      [B][COLOR=Red]U     M      5.0[/COLOR][/B]
      SPBNB _009
      L     DB56.DBW    4
      L     5000
      *I    
      T     DB20.DBW   20
_009: NOP   0
da müßte IMHO M 5.1 stehen

[edit] larry war schneller, der kann bestimmt code auch ohne code-tags lesen :rolleyes: [/edit]
 
Ich denke Dein Problem könnte an der Verwendung des Befehls SPBNB liegen.

Je nach Ergebnis sicherst Du Dein VKE ins BIE (drücke einfach mal auf F1 wenn Du auf SPBNB bist).
Wenn also beide Merker nicht 1 sind steht im BIE ne Null und verhindert die Ausführung des nächsten Bausteins.

Dieses verhinderteventuelle die Ausführung der Bausteine danach.

In der Hilfe ist die Funktion sehr gut beschrieben.

Ich würde mal ein SPBN probieren.

Gruß Mütze
 
Zuletzt bearbeitet:
Ja, das habe ich schnell als beispiel zusammengestellt, da ich das schon nicht mehr im Programm habe.
Solch große Zahlen verwende ich nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das habe ich schnell als beispiel zusammengestellt, da ich das schon nicht mehr im Programm habe.
Solch große Zahlen verwende ich nicht.

Dann befürchte ich, dass der Zusammenhang mit dem Rest deines Bausteins zu suchen ist ... So ist das im Augenblick erstmal korrekt - wenn sich dein Programm "komisch" verhält, dann liegt das an etwas anderem ...
Laß doch mal etwas mehr davon sehen ...
 
Ok, folgendes habe ich nun in meinem richtigen Programm probiert:

U M 5.0
SPBN _007
L #FU2l
T DB20.DBW 8
_007: NOP 0

funktioniert immer noch nicht.

#FU2l ist ein Temporäres DWORD.

mit L #FU2l
T DB20.DBW 8

funktionierts...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ich glaube ich habe das Problem gefunden...

Ich musste die Geschwindigkeiten für die SEW FUs umrechnen ... dazu habe ich 8 Temporäre DWORDs verwendet.

Für meinen MOVE Befehl musste ich noch zusätzlich einen hinzufügen - das war der Fehler.
Nun hab ich sie im STAT also auch im DB drin und nun funktionierts.

Kann es sein das es was ähnliches wie ein "Überlauf" gegeben hatte - das die TEMP zu voll waren?

Danke für eure Antworten... so, nun is Feierabend.

Gruß
Axel
 
... die TEMP's werden nicht "zu voll", es sei denn du versuchst Zahlen größer +32767 oder kleiner -32766 hineinzuschreiben. Dann erhälst du schonmal unsinnige Werte.
TEMP's haben aber das Problem, dass ein Wert, den du im Zyklus 1 ausgerechnet hast im Zyklus 2 nicht mehr darin steht ... Vielleicht hat es ja daran gelegen ...

Gruß
LL
 
Zurück
Oben