mit Zähler ins Minus zählen

Pockebrd

Level-1
Beiträge
327
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte eine Bewegung mit Impulszähler in zwei Richtungen positionieren.
Ausgangspunkt ist die Mitte, mit dem Wert 0
In eine Richtung zähl / addier ich die Impulse bis zu einem gewissen Wert der die Bewegung stopt.
Jetzt möchte ich die Position vom Ausgangswert 0 in die entgegengsetzte Richtung verfahren. Das heist mein Zähler soll ins Minus zählen.
Und das macht er nicht.
Ich hab ein DINT Add und DINT sub Zähler, die jeweils den Wert in ein DBx.DBDx schiebt.
Wie bekomm ich den Wert von 0 ins Minus gezählt ?

Gruß Markus
 
Hallo Pockebrd,

Du bist doch schon lange genug "on Board". ;)
Stell doch bitte Deinen Programmcode ins Forum, um so effektiver kann Dir geholfen werden.
 
Wie groß soll bzw muss der Zahlenbereich sein?
Mit einem +1 bzw -1 kannst du Zählen, das funktioniert mit einem DBW zum Beispiel.
Bei der Auswertung muss dich eben um das MSB kümmern.


bike
 
@ 190B, kann ich machen. Gehör ich schon zu den alten Hasen

@AntoineMayer, Könnte ich machen. Den Ausgangspunkt (die Mitte) möchte ich verschieben können. Da dachte ich wenn sie geändert wird lade ich die 0 in den DB. Oder wie du meinst könnte auch immer die 10 in den DB schieben.

Aber zurück zur Frage, kann ich nicht ins Minus zählen ?
 
@ 190B, kann ich machen. Gehör ich schon zu den alten Hasen

@AntoineMayer, Könnte ich machen. Den Ausgangspunkt (die Mitte) möchte ich verschieben können. Da dachte ich wenn sie geändert wird lade ich die 0 in den DB. Oder wie du meinst könnte auch immer die 10 in den DB schieben.

Aber zurück zur Frage, kann ich nicht ins Minus zählen ?

Habe ich geschrieben.
Mit I- und den Zugriff auf ein DBW oder MW oder sonst was.
Das Minus wird durch das Bit 15 dir gezeigt


bike
 
Hallo Pockebrd,

sieht doch gut aus.

Ich habe das ganze auch mal angetestet, siehe Anhang. Bei mir zählt er ins Minus. Ich habe mein MD 120 in der PLCSim aber erst als Int einstellen müssen, als Dezimalzahl hat er etwas anderes angezeigt.
 

Anhänge

  • Plus_Minus Zähler.JPG
    Plus_Minus Zähler.JPG
    136,1 KB · Aufrufe: 43
Zuviel Werbung?
-> Hier kostenlos registrieren
@ bike, wir haben glaub gleichzeitig geschrieben, hab deine Antwort erst später gesehn.
Dank Eurer Antworten hab ich mir das ganze nochmals angeschaut. Jetzt hab ich festgestellt das es an meinem Programm liegt.
hab den Zähler selbst bei Null gestopt.
geht doch................
Danke für die Hilfe und nicht weiterzählen lassen.

Ich mach das gerade auch mit dem PLCSIM, kann das sein das die Simulation ne lange Zykluszeit hat. Ich zähl so mit 2-5 HZ,
aber die Anzeige kommt nicht hinter her. So all par Sekunden kommt der Aktuelle Wert in der Anzeige.
 
Also normal sollte PLCSIM relativ schnell sein.
Selbst in meinen VM's funktioniert das "normal"
Da stellt sich die berühmte Frage mit welcher Software von BigS du arbeitest.



bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit V5.3.
Hab momentan auch etwas Probleme mit dem Arbeitspeicher.

Jetzt hast du dir die Antwort selbst gegeben. ;)

Speicher lässt sich durch nichts ersetzen außer durch Speicher.

Also wenn meine VM weniger als 1Gb bekommt, schimpft die ständig, dass geswapped werden muss.


bike
 
Hin und wieder ein Tastenklick zu viel, und alles steht.
Dachte wenns läuft dann sollte es laufen, hab bisher immer über die CPU simuliert.
 
Hin und wieder ein Tastenklick zu viel, und alles steht.
Dachte wenns läuft dann sollte es laufen, hab bisher immer über die CPU simuliert.

Das dachte ich auch bist ich BigS und Win$ kennen gelernt habe.
Versuche es einmal in VM, da kannst du den Speicher zusichern und wenn es Problem gibt, dann ist nur die VM betroffen.
Das geht auch mit 512 MB für die VM. In der VM ist das Speichermanagement besser organisiert.


bike
 
Hallo Pockebrd,

der Zähler sieht doch gut aus.

Kleine Verbesserung vielleicht:
Bei der Beschaltung des ADD_DI bzw. SUB_DI würde ich, da es sich um eine Doppelwort handelt, statt "1" ändern auf "L#1". Bei "1" wird der Akku nur mit 16 Bit geladen, bei "L#1" mit 32 Bit, das kann in seltenen Fällen zu Problemen führen. 32 Bit-Befehle auch möglichst mit 32 Bit beschreiben.

Wenn Du die "1" bzw. "L#1" durch eine Variable ersetzt, dann könntest Du die Zählweite individuell beeinflussen.

Zum Schluß noch, jetzt die Geschichte als Universal-FC oder FB (z. B. für die Flanken) und Du hast eine Lösung die immer wieder verwendet werden kann.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, dann weiß ich jetzt auch was das mit dem L# zu tun hat. Dachte das tut mit und ohne L#

Wie meinst du das mit der Geschichte, wenn ich mein Baustein in nem anderen Baustein als Zähler Aufrufen möchte ?
 
ok, dann weiß ich jetzt auch was das mit dem L# zu tun hat. Dachte das tut mit und ohne L#

Tut es auch. Je nach Beschreibung des AKKU 1 bzw. 2 kann es Probleme geben, also bei DINT immer mit "L#" zuweisen!

Wie meinst du das mit der Geschichte, wenn ich mein Baustein in nem anderen Baustein als Zähler Aufrufen möchte ?

Es ist immer gut, wenn solche Funktionen wie Dein Zähler als eigener Baustein in ein Programm eingefügt werden können. Stichwort "eigene Bibliothek". Die einzelnen Verknüpfungen "UND, ODEr, FLANKE, ADD_DI, ..." in ein Programm einfügen anstatt den Zählerbaustein zu nehmen ist unprofessionell. Du hast den Zähler ausgetestet und so kann man ihn unkompliziert aus der Bibliothek in ein Programm einfügen. das Ganze macht schließlich weniger Arbeit, spart Arbeitsspeicher und muss nur einmal bei der Erstellung getestet werden.
 
Tut es auch. Je nach Beschreibung des AKKU 1 bzw. 2 kann es Probleme geben, also bei DINT immer mit "L#" zuweisen!
Um das mal zu ergänzen:
INT ist ja nur 16 Bit lang während DINT 32 Bit lang ist.
Wenn man eine INT Zahl lädt, wird der Wert in die HIGH-Bytes des Akkus geladen, in die LOW-Bytes wird 0 geladen.
Im Grunde genommen ist es zwar unsauber, aber nicht weiter schlimm, solange man mit positiven INT-Werten arbeitet, allerdings ergeben sich bei negativen INT große Abweichungen gegenüber dem DINT-Pendant:
Negative Zahlen werden in Binärsystem gebildet, indem die Bitfolge der positiven Zahl invertiert und anschließend 1 addiert wird.
Die Invertierung von zum Beispiel 1 in DINT ist 1111_1111_1111_1111_1111_1111_1111_1110, die Invertierung von 1 INT ist 1111_1111_1111_1110, -1 DINT ist also 1111_1111_1111_1111_1111_1111_1111_1111, -1 INT ist 1111_1111_1111_1111 (FFFF), wenn jetzt also -1 als INT geladen wird steh im AKKU1 FFFF, wenn das jetzt aber mit DINT weiterverarbeitet wird, ist FFFF nicht mehr -1 sondern 0000FFFF = 65535.
 
Zurück
Oben