FB_Dpv1ReadPNET

FB_Dpv1ReadPNET 1:

Der Funktionsbaustein "FB_Dpv1ReadPNET" liest einen oder mehrere Parameter eines Sinamics Profidrive via DPV1 (Profidrive specification 3.1) via Profinet. Das DPV1 Lesetelegramm muss mit F_CreateDpv1ReadReqPkgPNET erstellt werden, bevor an bExecute eine steigende Flanke ansteht. Das DPV1 Antworttelegramm muss mit F_SplitDpv1ReadResPkgPNET ausgewertet werden, nach dem bBusy eine fallende Flanke anzeigt.

Die Ausführung dieses Funktionsbausteins benötigt einige Zeit, abhängig von der Anzahl der Parameter, die gelesen werden sollen. Der Funktionsbaustein sendet das DPV1 Telegramm und pollt nach einem Antworttelegramm.

Intern werden Instanzen von ADSREAD und ADSWRITE benutzt.

Siehe Sample05.zip.

VAR_INPUT

VAR_INPUT
    bExecute         : BOOL;

    (* drive access info *)
    aNetId           : T_AmsNetId; (* NetID of Profibus Master EL6631 *)
    iProfinetPort    : UINT; (* Port of ProfiDrive *)
    iDriveId         : USINT; (* 0..255 possible *)

    pDpv1ReqData     : POINTER TO ARRAY [1..iMAX_DPV1_SIZE_PNET_REQ] OF BYTE;
    iDpv1ReqDataLen  : UDINT;
    pDpv1ResData     : POINTER TO ARRAY [1..iMAX_DPV1_SIZE_PNET_RES] OF BYTE;
    iDpv1ResDataLen  : UDINT;
    tTmOut           : TIME;
END_VAR

bExecute: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.

aNetId: Die AmsNetId des Profibus Master Gerätes (siehe ADS-Tab des Profibus Master Gerätes in der I/O-Konfiguration im System Manager).

iProfinetPort: Die Profinet Port-Nummer des Antriebs. Das ist eine Adresse für mehrere Achsen, spezifiziert im TwinCAT System Manager in der I/O-Konfiguration.

iDriveID: Die ID ist 1 für die ControllerUnit, 2 für das Antriebsobjekt A, 3 für das Antriebsobjekt B eines Doppel/Dreifach-Antriebs. Die Drive ID wird in der Starter Software gesetzt. 1..16 ist möglich.

pDpv1ReqData: Zeiger auf ein Array von 240 Bytes, das das DPV1 Lesetelegramm enthält. Dieses Telegramm muss von der Funktion F_CreateDpv1ReadReqPkg erstellt werden, bevor das DPV1 Lesen via bExecute aktiviert wird.

iDv1ReqDataLen: Maximale Länge des DPV1 Datapuffer (240 bytes).

pDpv1ResData: Zeiger auf ein Array von 240 Bytes, das das DPV1 Leseantworttelegramms enthält. Dieses Telegramm muss von der Funktion F_SplitDpv1ReadResPkg ausgewertet werden nachdem auf bBusy eine negative Flanke erscheint.

iDv1ResDataLen: Maximale Länge des DPV1 Antwort-Datapuffers (240 bytes).

tTmOut: Bestimmt das Timeout der von den ADS-Kommandos nicht überschritten werden soll.

VAR_OUTPUT

VAR_OUTPUT
    bBusy           : BOOL;
    bError          : BOOL;
    bErrorValues    : BOOL;
    iErrId          : UDINT;
    iErrorClass     : BYTE;
    iErrorCode      : BYTE;
END_VAR

bBusy: Der Ausgang geht auf TRUE sobald der Funktionsbaustein via bExecute aktiviert wurde und bleibt so lange TRUE, wie der Baustein keine Antwort erhalten hat.

bError: Bei ADS Fehlern geht der Ausgang auf TRUE und bBusy auf FALSE.

bErrorValues: Ist TRUE wenn der DPV1 Read nicht oder nur teilweise erfolgreich war. Die Fehlerursachen werden über die Fehler-ID geliefert (sowie Class und Code).

nErrId: Liefert die ADS Fehlernummer oder funktionsbausteinspezifische Fehlernummern, wenn bError = TRUE.

nErrClass: Profidrive Fehlerklasse

nErrCode: Profidrive Fehlercode

VAR_IN_OUT

VAR_OUTPUT
    iRequestRef : USINT; (* 1..127; 0: reserved *)
END_VAR

iRefRequest: Referenz, die mit jedem Telegramm automatisch hochgezählt wird. Die Referenz wird für die Zuordnung der Antworten auf die Schreib/Lese-Anforderungen benötigt.

Funktionbausteinspezifische Fehlercodes

Beschreibung

0x2

falsche Antwortreferenz

0x3

DPV1 Read fehlerhaft oder teilweise fehlerhaft

0x4

falsche Antwort-ID

other error IDs

siehe ADS Fehlercodes

Fehlerklassen

Beschreibung

Fehlercode

0x0 - 0x9

reserviert

-

0xA

Anwendungsfehler

0x0: Lesefehler
0x1: Schreibfehler

0x2: Modulfehler
0x3 - 0x7: reserviert
0x8: Versionskonflikt
0x9: nicht unterstützt
0xA - 0xF: benutzerabhängig

0xB

Zugriffsfehler

0x0: ungültiger Index (kein Datenblock DB47, Parameterzugriff wird nicht unterstützt)
0x1: Schreiblängenfehler
0x2: ungültiger Slot
0x3: Typkonflikt
0x4: ungültiger Bereich
0x5: Zustandskonflikt (Zugriff auf DB47 temporär nicht möglich wegen interner Prozesszustände)
0x6: Zugriff verweigert
0x7: ungültiger Bereich (Schreibfehler im DB47 Header)

0x8: ungültiger Parameter
0x9: ungültiger Typ
0xA - 0xF: benutzerabhängig

0xC

Resourcefehler

0x0: Lesekonflikt
0x1: Schreibkonflikt
0x2: Resource beschäftigt
0x3: Resource nicht erreichbar

0x4 - 0x7: reserviert
0x8 - 0xF: benutzerabhängig

0xD - 0xF

Benutzerdefinierte Fehler

-

Voraussetzungen

Entwicklungsumgebung

Zielplattform

IO Hardware

Einzubindende SPS-Bibliotheken

TwinCAT v2.11.0, Build > 1553

TwinCAT v2.11.0 R2, Build > 2024

PC (i386)

 

Beckhoff EL6632

TcIoFunctions.Lib

( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib werden automatisch eingebunden )