fweber - 2021-06-18

Hallo,
ich habe einen EtherCat - Slave umgesetzt. Nun versuche ich Objekte/Variablen auf dem Slave mit den Funktionsbausteinen ETC_CO_SdoXXX zu schreiben bzw. zu lesen.
Ich habe Objekte/Variable die keine subindex haben
aber auch Objekte mit Subindex einträgen.

Nun zu den Problemen:
Write : ETC_CO_sdoWrite;
WriteAccess : ETC_CO_SdoWrite_Access;

  1. Schreiben des Objekts 16#8000 subindex 16#01 oder 16#02 oder ... Mit FB ETC_CO_SdoWrite_Access
    • Schreibzugriff schlägt fehl. Folgende Versuche durchgeführt:
      • WriteAccess(xExecute := TRUE, uiDevice := 1001 , wIndex:= 16#2008, bySubindex := 16#01, udiTimeOut := 500, pBuffer := ADR(subIndex1) , szSize := SIZEOF(subIndex1), eMode := ETC_CO_MODE. ETC_CO_AUTO, xCompleteAccess := FALSE); --> Fehlermeldung
      • WriteAccess(xExecute := TRUE, uiDevice := 1001 , wIndex:= 16#2008, bySubindex := 16#01, udiTimeOut := 500, pBuffer := ADR(subIndex1) , szSize := SIZEOF(subIndex1), eMode := ETC_CO_MODE. ETC_CO_AUTO, xCompleteAccess := TRUE); --> Es wird Subindex 16#01 richtig geschrieben, aber es wird auch Subindex 16#04 mit irgendwas beschrieben... sehr seltsames Verhalten
      • Auch ein Zugriff mit ETC_CO_sdoWrite.Write(...) mit allen möglichen Eingaben schlägt ebenfalls fehl.
    • Ein Schreibzugriff mit ETC_CO_SdoWrite_Access ist erfolgreich wenn ein Array (TestArray[0..3]) deklariert wird und folgendem: Beachte Subindex:= 16#01 und nicht 16#00
      • WriteAccess(xExecute := TRUE, uiDevice := 1001, wIndex:= 16#8000, bySubindex := 16#01, udiTimeOut := 500, pBuffer := ADR(TestArray[1]), szSize := SIZEOF(TestArray[0])*4, eMode := ETC_CO_MODE.ETC_CO_AUTO, xCompleteAccess :=TRUE);
  2. Schreiben des Objekts 16#8000 subindex 16#01 oder 16#02 oder ... Mit FB ETC_CO_SdoWrite
    • Es ist mit nicht gelungen ein Subindex zu schreiben....
      • Write(xExecute := TRUE, uiDevice :=1001, wIndex:= 16#2008, bySubindex := 16#01, udiTimeOut := 500, pBuffer := ADR(variable) , szSize := SIZEOF(vaiable), eMode := ETC_CO_MODE. ETC_CO_AUTO);

Leider werde ich durch die Informationen des Ethercat Example und die Beschreibung in der Bibliotheke nicht schlau. Ich persönlich findes es auch Schade das ich dort den Quellcode nicht einsehen kann... Liegt der nicht zu Verfügung würde ich eine ausführliche Erklärung jeder Variable Eingang/Ausgang erwarten... Es ist teilweise rätselraten angesagt was in den FB reinzugeben gilt... bespw. szSize ? Länge des zu erwarteten Strings? nee hier in dem Fall wohl eher eine Absicherung der lokalen Variable um nicht ins nirgendwo zu schreiben.

  1. Was ist ein Datentyp CAA.PVOID (pBuffer) und was ist ein Datentyp CAA.SIZE (szSize)? Wieso kann ich keinen Datentyp CAA.PIVOD deklarieren aber der FB nimmt diese entgegen? Ja es handelt sich wahrscheinlich um einen Void Pointer aber dann stellt sich mir die Frage warum ich keinen deklariern kann...

Ich freue mich auf Hilfe.

Viele Grüße
Florian

 

Related

Talk.ru: 1


Last edit: fweber 2021-06-18