Konfiugration einer Klemme über ReadWriteTerminalReg

Darkghost

Level-2
Beiträge
210
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich würde gern einen Schrittmotor über die KL2531 steuern.
Hierzu habe ich erfahren (größtenteils über diese Forum) nochmals Danke, dass man ReadWriteTerminalReg dafür einsetzen kann.

So hab ich jetzt die CTRL und Status der Klemme mit dem Baustein verbunden.

https://infosys.beckhoff.de/index.p...adwriteterminalreg.htm&id=7377284559419945061
Hier steht zwar wie man es theoretisch macht und unter
https://infosys.beckhoff.com/index....31_kl2541_procdata.htm&id=3693273966225838191
steht die Register der Klemme u.s.w.
Alles gut dokumentiert.

Für mich ist aber aktuell das Problem, dass ich nicht weiss wie und mit welchen welchen Daten ich jetzt ReadWriteTerminalReg füttern muss.
Z.B. hab ich mal probiert Register [TABLE="width: 95%"]
[TR]
[TD="width: 10%"]R16[/TD]
[TD="width: 30%, colspan: 2"]Hardware-Versionsnummer[/TD]
[TD="width: 15%"]z.B. 0x0000[/TD]
[TD="width: 15%"]z.B. 0[SUB]dez[/SUB][/TD]
[TD="width: 9%"]R/W[/TD]
[TD="width: 9%"]EEPROM[/TD]
[/TR]
[/TABLE]

zu lesen. Dazu habe ich bei REGNO eine 16 eingetragen (Hex hab ich auch probeirt) und Read auf True gesetzt > Ergebnis Error 100 (Timeout-Fehler. Die zulässige Ausführungszeit wurde überschritten.)

ReadWriteTerminalReg.PNG

Wäre super, wenn mir jemand sagen könnte wie ich den Baustein ReadWriteTerminalReg bedienen muss, um z.B. den Motor in Pos X fahren zu lassen.

Grüße
Stefan
 
Meine erste Idee wäre, die TimeOut Zeit hoch zu setzen. 20ms sind zu wenig. Bedenke, diese FBs brauchen oft mehrere Zyklen für die Abarbeitung eines Befehls. Der Standard TimeOut den Beckhoff in den meisten Beispielen verwendet ist glaube ich 5s.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für das Feedback.

Habs jetzt mal auf 7s gestellt und leider bekomme ich jetzt gar keine Rückmeldung.
Hab Read extra auf einen Ausgang gelegt, um zu schauen, ob auch alles läuft.
Ausgang wird gesetzt.

Reg.PNG
 
Du übergibst deine Registernummer mit 16#. Das bedeutet es folgt eine Hexadezimale Zahl. Also wäre für 16Dez 10Hex richtig
Reaf ist Flankengetriggert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage zum Screenshot:
Wie kommt es dass die Read-Variable TRUE ist, der entsprechende Parameter im Baustein aber FALSE?
Das kann nur vorkommen wenn der Baustein nicht aufgerufen wird ober aber dich der Link graphisch in die Irre führt (da er nicht wirklich verbunden ist).

Guga
 
Danke für die Rückmeldungen.
Simulation ist es nicht, da der Ausgang an der SPS gesetzt wird, dass sieht man im System Manager als auch an er LED der Klemme.

@Guga, gut gesehen. Er war nicht verbunden. Hab den Eingang weggezogen und siehe da er war nicht angeschlossen.
Leider auch mit angeschlossenem Eingang bekomme ich den Fehler 100.
REg2.PNG

Ich hab mal die Config angehängt. Ist der Timeout richtig gesetzt?
An der Klemme habe ich aber noch keinen Schrittmotor angehängt. Dies sollte aber für die Abfrage der HW-Version dich keine Rolle spielen oder?

Grüße
Stefan
 

Anhänge

Wie oben schon erwähnt wurde muss du als Ziehlregister die 16 als Dezimalzahl angeben (und nicht hex).

Davon unbesehen stimmt mindestens noch etwas mit der Verknüpfung vom State nicht.
Wenn der Baustein nicht das korrekte Feedback (auch State) erhält dann gibt es natürlich gegebenenfalls einen Timeout.
Du hast hier einen Wert 14 (0xE). Prüfe bitte mal wo der herkommt.

Also: Setze mal deine Variablen (belibig) statisch und schaue im SystemManager ob dort die Werte in der Klemme ankommen. Und für die Eingangswerte wie Data und State "force" sie auf dem SystemManager-Leven und schau in der PLC was Sache ist.

Guga

P.S. Dein Projekt habe ich mir nicht angeschaut.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie Du geschrieben hast, habe ich die Verknüpfung zwischen State und Status gelöst.
Wenn ich im PLC nun auf RUN gehe, dann geht die Variable der Klemme "Status" auf 14.

Wenn ich jetzt
REGNO auf 10
Timeout auf 20s
Read auf True
setze, dann wechselt Status auf 138, CTRL auf 8A und Busy auf True.

reg3.jpg

Nach 20 Sek ungefähr geht die Klemme dann auf Error (Error 0 True und ErrorId 100)

reg4.jpg

Wenn ich dann Read auf False und wieder auf True setze dann wird wieder
Status auf 138, CTRL auf 8A und Busy auf True für die angegebene Tiemout Zeit gesetzt.
Leider bekomme ich keinen Wert über
CURREGVALUE ausgegeben.

In der Anleitung zum ReadWriteTerminalReg (https://infosys.beckhoff.de/index.p...adwriteterminalreg.htm&id=7377284559419945061) steht das man die Variablen STATE, DATAIN, CTRL, DATAOUT mit den entsprechenden IO-Variablen des Klemmenkanals im TwinCAT-System Manager verknüpfen muss.
Die Klemme hat aber nur Eingänge: Status, Position, ExStatus und Ausgänge; CTRL, Velocity und ExCtrl. Ich versucht mich da an das Beispiel der SMI Klemme zu halten und
Status mit STATE AT %I*: BYTE; und CTRL mit CTRL AT %Q* : BYTE; verbunden.
 
wäre ok (Registerkommunikation Register 10Hex)
Dein Status im Systemmanager hat aber keine Verknüpfung zu deinem STATE Eingang am Baustein.

Aber irgendetwas kann da noch nicht stimmen. Die Verknüpfung zu Status (Klemme) habe ich extra weggelassen (siehe Post 8) -> Davon unbesehen stimmt mindestens noch etwas mit der Verknüpfung vom State nicht.
Das würde ich auch so sehen, wenn ich Status mit
STATE AT %I*: BYTE; verknüpfe und die Eingaben wie oben beschrieben mache (REGNO auf 10,Timeout auf 20s,Read auf True) dann passiert am Baustein nichts mehr.

reg5.PNG

Ich glaub da hab ich noch nen Fehler. Ich habe den Eingang der Klemme Status mit der globalen Variable STATE verbunden und die Variable an STATE des Bausteins gehängt. Was eigentlich komisch ist, da beiden (klemme und Baustein) beides als Eingang definiert ist. Aber angelehnt an das SMI Beispiel (wo es funktioniert) müsste es eigentlich richtig sein. Des Weiteren ist es auch komisch das, obwohl Status bei der Klemme ein Eingang ist dort entweder eine 0, 14 oder 138 ausgegeben wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Keiner (oder wenigstens nicht ich) haben gesagt dass du die State-verknüpfung löschen sollst. Der Wert 14 ist nur nicht stimmig.
Ctrl + Status bilden eine Handshake zur Klemme. Mit Ctrl weiss die Klemme was sie tun soll (schreibt z.B. den zu lesenden Wert in den DataIn-Wert) und gibt über Ihren Status quasi ein Echo des Ctrl-Aus (sozusagen: Auftrag ausgeführt).

Ich habe aber noch eine Vermutung: Du darfst die Werte in dem Moment ausschliesslich von dem Baustein schreiben und nicht z.B. das Ctrl irgendwo anders noch beschreiben. Der ReadWriteTerminalReg hat intern eine STate-Maschine und schreibt vermutlich seine Werte jeweils nur 1x. Wenn du sie von wo anders ab und an überbügelst dann kann es nicht funktionieren.

Guga.
 
Das Trennen von State sollte ja nur temporär sein, um zu schauen woher die 14 kommt.
Leider hab ich bei Beckhoff keine Informationen gefunden, was die 14 bedeutet. Vermutlich ein interner Wert, der keine Erklärung bedarf?

Eigentlich schreibe ich nur Timeout, Read und Regno. Ich habe Tiemout und Regno auch schon direkt einem Wert zugewiesen.
Leider ist es so, dass wenn ich die die Variabel State mit dem Klemmeneingang Status und dem Eingang des Baustein verbinde geht der Baustein, wenn ich auf Run gehe, direkt in den Errorzustand.
 
Du findest die Bit-Codierung (Beschreibung) vom State und Ctrl in (fast jeder) KLxxxx-Klemme.
Ganz unten.... bei Control und Status-Byte.
Status 14 = 0xE. Für die Konfiguration/Register-Zugriff muss aber das Bit .7 gesetzt sein (mit 0 zu zählen anfangen). Es stimmt also irgend was nicht.

Und jetzt machst du mal was ganz anderes.
im SystemManager, auf der EA "forct" du auf dem Ctrl - Byte den Wert 0x8A und schaust was im State und im DataIn (ich glaube das ist die IstGeschwindigkeit) zurückkommt.

Das ist sozusagen die Funktion des Bausteins beim Lesen (schreiben ist deutlich komplexer....)

Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du findest die Bit-Codierung (Beschreibung) vom State und Ctrl in (fast jeder) KLxxxx-Klemme.
Ganz unten.... bei Control und Status-Byte.

-> Wo meinst Du denn in der Klemmer? Wo müsste ich denn da nachschauen?

Ich hab versucht den Kanal CTRL auf den Wert 0x8A zu forcen. Leider zeigt er dann anstatt dem Wert eine 0x00 an. Dieser scheint dann aber geforct zu sein.
Vorher habe ich die Konfig im System Manger aktiviert.
reg7.PNG

Ich hatte in einem anderen Thread mal gelesen, dass evtl. die Postion = DataOut für den Baustein ist und da Du jetzt das mit DataIn = IstGeschwindigkeit angesprochen hast, habe ich mal Postion mit DataIn und Geschwindigkeit mit DataOut. Jetzt komme ich nur bei CURREGVALUE den einen Wert 0128 ausgegeben.
reg6.PNG

Das sieht doch jetzt gar nicht so schlecht aus oder?
Was ich vermisse ist ne Doku über die Werte, die dort ausgegeben werden. Du hattest es schon in Deinem letzten Post angesprochen.
Weisst Du wo ich die Doku zu den Werten bei z.B.
CURREGVALUE finden kann?

Gruß
Stefan
 
Zurück
Oben