-> Hier kostenlos registrieren
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. So wie ich es sehe, bleibt das Programm beim Scan hängen. Es ist DCP_Identify.xBusy = True, aber selbst nach mehreren Minuten bekomme ich kein Done-Signal. Das Beispiel aus der Hilfe https://help.codesys.com/webapp/BZr...ntify;product=ProfinetCommon;version=3.5.15.0 habe ich als Grundlage genommen und entsprechend angepasst. Hier mein aktueller Code:
var:
Code:
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
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. So wie ich es sehe, bleibt das Programm beim Scan hängen. Es ist DCP_Identify.xBusy = True, aber selbst nach mehreren Minuten bekomme ich kein Done-Signal. Das Beispiel aus der Hilfe https://help.codesys.com/webapp/BZr...ntify;product=ProfinetCommon;version=3.5.15.0 habe ich als Grundlage genommen und entsprechend angepasst. Hier mein aktueller Code:
var:
Code:
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:
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