TIA Drehgeber auslesen aus einem CMMT-AS-C2-3A-MP-S1 mit 1500er CPU

AutismPrime95

Level-2
Beiträge
60
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich verzweifle hier grade an diesem Controller. Ich hab alles fertig konfiguriert und alles läuft an sich Einwandfrei. Zur Ansteuerung wurde der Sina_Pos Baustein genutzt.
Allerdings hat mich jetzt der Entdeckergeist gepackt und ich wollte mit dem Festo Telegramm 910 in Verbindung mit der Festo Automation Suite etwas herum probieren. Der "Festo_ExtendedProcessData_DB" aus der "Festo_Drives_Lib" liest mir das Telegramm 910 ein. Mein Ziel ist es einfach nur den aktuellen Drehgeberwert darüber auszulesen. Allerdings kommt dieser aus dem Festo Automation Suite als LINT raus. Diesen kann ich jetzt nicht einfach als Variable deklarieren, da es ja 64Bit sind und hier gerate ich ins stocken. Als Siemens CPU habe ich eine der 1500er Reihe und sollte LINT auch unterstützen.

Wie kann ich denn nun diesen LINT einlesen? Muss das über einen Datenbaustein geschehen? Vielleicht hat jemand schon ähnliches probiert und kann seine Erfahrungen preisgeben.
 
Die 1500 kann lange Integers..

hier gibts eine Anleitung von Festo:

Hier hats schon mal jemand versucht:

Hier gibts dazu noch was in spanisch:

Hier wird das Telegramm 910 im Bezug auf einen Parallelgreifer erwähnt.. vielleicht lässt sich das ja auf cmmt übertragen


Aus diesem Handbuch: https://media.festo.com/assets/atta...=kPQzSTQqW2bpAZdhu4fz+osfZ7Eq046xvr9xOqXHA6o= Seite 879
1744200003620.png

32 Byte sind möglich.. da wird es mit Lint schon schwierig
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube ich war da sowieso auf dem Holzweg, in der Festo Drives Library gibt es den Baustein Festo_PNU_RW_Single.

Mit diesem kann man wohl gezielt auf einen Parameter schauen und diesen auslesen bzw. auch schreiben. Allerdings lässt sich der Positions-Istwert wieder nur als LINT auslesen und ich bekomme es einfach nicht sinnvoll konvertiert. Ich sehe ja im Festo Automation Suite, wie er ausschauen müsste.
 
wohin willst du den denn konvertieren? real?

vllt lreal?
 
Eigentlich möchte ich nur ein INT haben. Ich habe keine so genaue Positionieraufgabe, dass ich Nachkommastellen für meinen Istwert brauche.

Allerdings lässt sich der Datentyp des Istwertes im Festoprogramm nicht ändern und ich bin gezwungen den LINT auszulesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich möchte ich nur ein INT haben. (...)
Allerdings lässt sich der Datentyp des Istwertes im Festoprogramm nicht ändern und ich bin gezwungen den LINT auszulesen.
Verstehe ich dich richtig: Du erhältst einen LINT (64 Bit Ganzzahl) und willst den als INT (16 Bit Ganzzahl) haben?

Dann siehe TIA Hilfe "Explizite Konvertierung von LINT"
z.B. in SCL: #MyIntVar := LINT_TO_INT(#MyLIntVar);
in FUP/KOP nimm die CONV-Anweisung (ohne IEC-Prüfung geht auch MOVE, funktioniert so aber nur bei Siemens)

PS: Falls die Encoder-Werte größer als der Wertebereich von INT werden und du weniger Auflösung haben willst, dann kannst du vor dem Konvertieren den LINT-Wert erst durch einen Faktor dividieren (oder um x Bits vorzeichenrichtig nach rechts schieben).
Oder für beibehalten der Auflösung den Wertebereich des LINT verkleinern mit MOD (oder durch vorzeichenrichtiges ausblenden der oberen 48 Bits: nur die unteren 15 Bits (Bit0 bis Bit14) nehmen und das höchstwertige "Vorzeichen"-Bit Bit47 zu Bit15 verschieben).
 
Zuletzt bearbeitet:
Zurück
Oben