Guten Tag,
Ich verwende TwinCAT um die Steuerung eines Antriebes zu realisieren. Ich habe herausgefunden, dass es grundsätzlich zwei Wege gibt, um die Motorparameter in TwinCAT abzulesen und diese mit Hilfe der Scope Funktion darstellen zu lassen.
Wenn ich die erste Variante verwende mit der Funktion "SoE Read by DriveRef" (siehe Code), bekomme ich halt die richtige Motorparameter, aber die Auflösung der Kurven bzw. die Frequenz mit der die Parameter abgelesen werden ist sehr gering.
Deswegen verwende ich aktuell die zweite Variante, und zwar die Motorparameter direkt bei der I/O Option -> EtherCAT -> IndraDrive C (in Solution Explorer) als Process Data (PDO) zu definieren, und diese in eine Variable zu übertragen und dann über die Scope FUnktion darstellen lassen. Hiermit ist die Auflösung der aufgenommenen Kurven deutlich besser als bei der ersten Varianten. Nicht desto trotz, liegt das Problem darin, dass beim Ablesen der Antriebsgeschwindigkeit und Beschleunigung die Skalierung der Werte überhaupt nicht mit den reellen Werten übereinstimmt, aber die Verläufe der Kurven sind korrekt. Wichtig zu erwähnen ist, dass die Position des Antriebes keinen Skalierungfehler aufweist mit der zweiten Varianten. Die Abbildung 1 zeigt eine gemessene Antriebsfahrt mit beiden Varianten, um meinen Problem zu verdeutlichen.
Abbildung 1.PNG
Weiß vielleicht jemand woran es liegt, dass ich bei der zweiten Variante NUR bei den Geschwindigkeit und Beschleunigung einen Skalierungsproblem habe? Und wie kann ich das lösen?
Im Anhang werde ich auch die Motorparameter speichern.
LDD120-250-250-037-01-1-X-02-IDR-BAS-ENS-EN2-V01.zip
Vielen Dank im Voraus,
Max.
Ich verwende TwinCAT um die Steuerung eines Antriebes zu realisieren. Ich habe herausgefunden, dass es grundsätzlich zwei Wege gibt, um die Motorparameter in TwinCAT abzulesen und diese mit Hilfe der Scope Funktion darstellen zu lassen.
Wenn ich die erste Variante verwende mit der Funktion "SoE Read by DriveRef" (siehe Code), bekomme ich halt die richtige Motorparameter, aber die Auflösung der Kurven bzw. die Frequenz mit der die Parameter abgelesen werden ist sehr gering.
Code:
PROGRAM Antriebsgeschwindigkeit
VAR
fbRead :FB_SoERead_ByDriveRef;
stDriveRef :ST_DriveRef; (*Drive Referenz verwendet in TcDrive.lib*)
Parameter :WORD; (*SoE IDN: e.g. "S_0_IDN+1" bedeutet S-0-0001 oder "P_0_IDN + 23 bedeutet P-0-0023*)
IstGeschwindigkeit :DINT;
rGeschwindigkeit :REAL;
END_VAR
(*ST_PlcDriveRef in ST_DriveRef Umwandeln*)
stDriveRef.sNetId := F_CreateAmsNetId(Data.stPlcDriveRef.aNetId);
stDriveRef.nSlaveAddr := Data.stPlcDriveRef.nSlaveAddr;
stDriveRef.nDriveNo := Data.stPlcDriveRef.nDriveNo;
stDriveRef.nDriveType := Data.stPlcDriveRef.nDriveType;
//Geschwindigkeitablesen
Parameter := S_0_IDN+40; (*Geschwindigkeit-Istwert, S-0-0040*)
fbRead(
bExecute := TRUE,
nIdn := Parameter,
nElement := 16#40,
pDstBuf := ADR(Data.IstGeschwindigkeit),
cbBufLen := 8,
tTimeout := DEFAULT_ADS_TIMEOUT,
stDriveRef := stDriveRef,
);
Data.rGeschwindigkeit:=0.001*0.01667*Data.IstGeschwindigkeit; // rGeschwindigkeit ist in mm/s
IF NOT fbRead.bBusy THEN
fbRead(bExecute := FALSE);
END_IF
Abbildung 1.PNG
Weiß vielleicht jemand woran es liegt, dass ich bei der zweiten Variante NUR bei den Geschwindigkeit und Beschleunigung einen Skalierungsproblem habe? Und wie kann ich das lösen?
Im Anhang werde ich auch die Motorparameter speichern.
LDD120-250-250-037-01-1-X-02-IDR-BAS-ENS-EN2-V01.zip
Vielen Dank im Voraus,
Max.