negatives dword - ist das möglich?

lefrog

Level-2
Beiträge
281
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich habe bei einer Anlage (S7-313C-2DP) von uns ein kleines Verständnisproblem. An diese SPS ist ein Servoumrichter von Stöber über Profibus angeschlossen. Ausserdem ist an die Steuerung ein OP7 angeschlossen, von dem aus die Zielpositionen des Servoreglers geändert werden können.

Der Servomotor bewegt ein Handlingsystem, welches kleine Glasscheiben von einem senkrecht stehenden Stapel auf ein wagerecht stehendes Band gelegt werden.

Nun soll nach dem ansaugen der Scheibe der Servo einen Weg X in negative Richtung relativ verfahren.

Die Daten für die Zielposition werden an den Regler als DWORD übergeben - jedenfalls ist das so in dem Instanz-DB deklariert.

Die Position - in dem Fall der relative Weg - wird als DWORD von dem OP7 in einem DB gespeichert, und von dem DB dann nach Änderung als DWORD in den Instanz-DB übergeben.

Wie kann ich das erreichen das dieser Wert als negativer Wert übergeben wird? Ich bin ratlos...

Viele Grüße, Tobias
 
Hallo,
wenn ich das Recht verstanden habe: kannst Du nicht mit -1 multiplizieren? bei Ganzzahlen *D oder *R bei Realzahlen.


mfg

dietmar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
mit MOVE kann man von DWORD nach DINT und zurück konvertieren.
Ob aber ein negativer Wert an der Stelle richtig ist, glaube ich nicht. Es wird vielleicht eine absolute Adresse (vielleicht sogar in BCD ) erwartet.
Gruß Wilfried
 
Hallo!

Genau das habe ich ja auch gedacht...

Ich habe also folgendes programmiert:

L DB90.DBD90
L -1
*D
T DB9.DBD12

.. soweit so gut.. nur wenn ich das so mache, dann steht, wenn in DB90.DBD90 1 eingetragen ist, in dem DB9.DBD12 in der Statusansicht 65535, wenn ich mit -1 multipliziere... Daher meine Frage - ich weiß nicht wo ich den Denkfehler mache..
In Protool, im Datenbaustein, überall ist die Variable als DWORD deklariert.

Viele Grüße, Tobias
 
Hallo!

Nach ein wenig Probieren mit dem Simulator habe ich folgendes herausgefunden

Und zwar funktioniert das, wenn ich folgendes Programmiere:

L DB90.DBD90
L L#-1
*D
T DB9.DB12

also anstatt -1 musste ich L#-1 eintragen - ist das so richtig?

Viele Grüße, Tobias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ist schon klar, bei z.B. Word kannst Du von 0 bis 65535 hochzählen, bei INT von -32768 bis +32767 das ist der Unterschied, also in INT ist 65535 = -1 also wandele alles in DI bei Ganzzahlen.

mfg

dietmar
 
Hallo!

Also das Problem an der ganzen Sache ist das, dass der Regler den Wert als DWORD haben muss. Das kann man nicht ändern...

Ich versuche morgen mal ob das so klappt, wie es mit dem Simulator geklappt hat - ich habe aber meine bedenken...

Viele Grüße, Tobias
 
Hallo,
gerade überzeug kling das nicht, mal ein Beispiel: wenn Du den Taschenrechner von Miocrosoft nimmst (unter Zubehör, den wissentschaftlichen) dann gib mal -1 ein, danach wandele es in bin um, und danach in dez , dann siehst das auch ein Wandlungsfehler ensteht.

mfg

dietmar
 
Hallo!

Vielleicht mache ich bei der ganzen Sache einen Denkfehler - ich weiß es nicht...
Ich habe aber in dem Regler den relativen Wert für den Rückzug immer negativ eingegeben - daher denke ich das das auch negativ übermittelt werden muss....

Hier einmal der Link zu der Beschreibung der Profibus-Karte für den Regler - vielleicht überseh ich bei der ganzen Sache auch einfach etwas... Ich muss zu meiner Entschuldigung sagen das dieses eines meiner ersten Profibus-Projekte ist... ;)

http://www.stoeber.de/TDE/MIBAL/SDS4000/441525_0002.pdf

Viele Grüße, Tobias
 

Anhänge

  • stoeber.jpg
    stoeber.jpg
    123,3 KB · Aufrufe: 79
Hallo,
Der Unterschioed zwischen L#-1 und -1 ist bei den negativen Zahlen exterm...
-1 ist eine 16 Bit Zahl, wo das Vorzeichen ganz links steht.

Bei L#-1 (32 Bit-Zahl) steht das Vorzeichen auch ganz links (Stelle 32)

Bei der Multiplikation wird die 16 Bit Zahl als Positive Zahl interpretiert und die 32 Bit Zahl als negativ, wegen dem Bit ganz links.

Nach dem Bild must Du den Verfahrweg negativ eingeben. Beachte die Normierung des Weges mm oder mm/10 etc., die Du im DWord vorgibts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im DB ist zwar DWORD als Format eingetragen, aber was genau du da hineinschreibst bleibt dir überlassen. Ich würde tatsächlich einen negativen Wert eintragen (mit L#-1 multiplizieren). Du könntest auch im DB aus DWORD eint DINT machen, dann kann man es besser beobachten.
 
Hallo!

Erst einmal vielen Dank für eure Unterstützung! ;)
Ich muss natürlich nicht mit -1, sondern mit -10 multiplizieren, wegen Kommastellen, wenn ich das richtig interpretiere...

Ich bin leider noch nicht dazu gekommen hier auszutesten ob das mit dem Faktor L#-10 klappt, bin aber nun doch ein wenig mehr zuversichtlich... ;)

Viele Grüße, Tobias
 
Zurück
Oben