shofmann - 2020-04-20

Hallo,
wir sind Hersteller eines Profinet-Devices und nutzen für die Endprüfung einen Raspberry. Bei der Endprüfung wird nur kontrolliert ob unser Gerät auf ein bestimmtes Kommando reagiert um sicher zu stellen, dass alles richtig eingestellt wurde. Um es den Kollegen im Prüffeld einfacher zu machen, wollen wir das Profinet-Device über die Codesys Visualisierung konfigurieren (den Stationsnamen vergeben). Mit den DCP-Befehlen sollte das eigentlich funktionieren, aber ich bekomme es nicht zum laufen. Das Beispiel aus der Hilfe https://help.codesys.com/webapp/BZrdbdwZj8wHvKT8tnZ0s2KzSd0%2FDCP_Identify;product=ProfinetCommon;version=3.5.15.0 habe ich als Grundlage genommen und entsprechend angepasst. Hier mein aktueller Code:
var:

VAR_INPUT
    xScan: BOOL;
    xReset: BOOL;
END_VAR
VAR_OUTPUT
    sStationName : STRING;
    xStationNameOk : BOOL;
END_VAR
VAR
    dcpScan : ProfinetCommon.DCP_Identify;
    dcpDevice : ProfinetCommon.DCP_DeviceData;
    dcpReset : ProfinetCommon.DCP_Reset;
    dcpSet : ProfinetCommon.DCP_Set;
    dcpGet : ProfinetCommon.DCP_Get;
    i : DINT;

    uiConstVendorWeetech : UINT := 1229;
    sConstStationName : STRING := 'TestSystemControl';
END_VAR

Code:

IF xScan THEN
    dcpScan.ControllerID := PN_Controller.MasterID;
    dcpScan.xExecute := TRUE;
    dcpScan();
END_IF

IF(dcpScan.xDone) THEN
    FOR i := 0 TO dcpScan.DetectedDevices.Count - 1 DO
        dcpDevice := dcpScan.DetectedDevices.Get(i);
        IF (dcpDevice.VendorID = uiConstVendorWeetech) THEN
            dcpSet.xExecute := TRUE;
            dcpSet.ControllerID := PN_Controller.MasterID;
            dcpSet.MAC := dcpDevice.MAC;
            dcpSet.Data.Options.StationName := TRUE;
            dcpSet.Data.StationName := sConstStationName;
            dcpSet.Data.StationName_SavePermanent := FALSE;
        END_IF
    END_FOR
END_IF

dcpSet();
IF dcpSet.xDone THEN
    //Ausgabe der aktualisierten Daten auf HMI
    FOR i := 0 TO dcpScan.DetectedDevices.Count - 1 DO
        dcpDevice := dcpScan.DetectedDevices.Get(i);
        IF (dcpDevice.VendorID = uiConstVendorWeetech) THEN
            dcpGet.xExecute := TRUE;
            dcpGet.ControllerID := PN_Controller.MasterID;
            dcpGet.MAC := dcpDevice.MAC;
            dcpGet.Options.StationName := TRUE;
        END_IF
    END_FOR
END_IF  

dcpGet();
IF dcpGet.xDone THEN
    sStationName := dcpGet.Data.StationName;
    IF sStationName = sConstStationName THEN
        xStationNameOk := TRUE;
    END_IF
END_IF

// Profinet Einstellungen zurücksetzen
IF xReset THEN
    dcpReset.xExecute := TRUE;
    dcpReset.ControllerID := PN_Controller.MasterID;
    dcpReset.ResetMode := 0;
    dcpReset();
END_IF

IF dcpReset.xDone THEN
    //Ausgabe der aktualisierten Daten auf HMI
    FOR i := 0 TO dcpScan.DetectedDevices.Count - 1 DO
        dcpDevice := dcpScan.DetectedDevices.Get(i);
        IF (dcpDevice.VendorID = uiConstVendorWeetech) THEN
            dcpGet.xExecute := TRUE;
            dcpGet.ControllerID := PN_Controller.MasterID;
            dcpGet.MAC := dcpDevice.MAC;
            dcpGet.Options.StationName := TRUE;
        END_IF
    END_FOR
END_IF  

dcpGet();
IF dcpGet.xDone THEN
    sStationName := dcpGet.Data.StationName;
    IF sStationName <> sConstStationName THEN
        xStationNameOk := FALSE;
    END_IF
END_IF

Ziel soll sein, dass das Device auf Knopfdruck konfiguriert wird, anschliessend wird die Endprüfung durchgeführt. Wenn man damit fertig ist, wird das Device wieder auf Auslieferzustand zurückgesetzt.
Habe ich da einen Fehler drin? Oder ist mein Ansatz komplett falsch?

MfG
Stephan