TwinCAT.Ads.AdsErrorException: 'Ads-Error 0x705 : Parameter size is incorrect.

adwaf

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim auslesen des Index Offset = 0x00000012 in der IndexGroup = 0x2102 bekomme ich diesen Fehler:
NameValueType
$exception{"Ads-Error 0x705 : Parameter size is incorrect. (Ads-Error 0x705 : Parameter size is incorrect.)"}TwinCAT.Ads.AdsErrorException


Ich verwende diesen Code dafür (C#)

Code:
TcAdsClient adsClient;
adsClient= new TcAdsClient();
adsClient.Connect(501);

Strukture strukt = (Strukture)adsClient.ReadAny(0x2102, 0x00000012, typeof(Strukture));


[StructLayout(LayoutKind.Sequential, Pack = 0)]
public struct Strukture
{
    public uint data;
    public uint fileOffset;
    public byte[] path;
}


wdKjpV6TdQnOAAAAABJRU5ErkJggg==

Warum bekomme ich eine Exception, dass meine Parametergröße nicht passt obwohl ich die Richtigen Parameter verwende.
 OuUNNnBTlyAAAAAElFTkSuQmCC
 
Das Problem scheint mir die Deklaration
Code:
public byte[] path;
zu sein.

Unallokierter Speicher kommt in der SPS-Welt von TwinCAT so nicht vor. Und statt UINT nimm bitte UINT16. UINT16 entspricht dem Datentyp UINT in der SPS.

Was hast Du denn an dem Port 501 so vor?

Übrigens für den Zugriff auf eine TC2-Runtime musst Du (LayoutKind.Sequential, Pack = 0) verwenden und bei einer TC3 (LayoutKind.Sequential, Pack = 8 )
Wenn Du noch Fragen hast, ich habe einiges an Erfahrung auf dem Gebiet.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum sollte der Port 501 nicht passen wenn ich Fehler von der SPS auslesen will?
Ich habe den IndexOffset 0x00000001 in der Selben IndexGroup (<= Fehlercode) im Port 501 auslesen können.


Wie sollte ich das ByteArray in der Struktur sonst deklarieren?
 
Warum sollte der Port 501 nicht passen wenn ich Fehler von der SPS auslesen will?

Ich habe da zwar hier nichts darüber geschrieben, aber ....

Du kannst an dem Port 501 alles auslesen, was da vorhanden ist. Aber ob Du da Fehler aus der SPS finden wirst, bezweifle ich doch schon. Der Port 501 gehört zur NC. Die SPS funkt eher am Port 801... / 851...
Was auch immer Du am Port 501 vor hast - das wird schon passen.

Wie sollte ich das ByteArray in der Struktur sonst deklarieren?

Du musst es zumindest passend zu dem, was Du auslesen willst fest allokieren und dann noch marshallen. Dynamisch deklarieren wird nicht funktionieren.

Ich habe mir jetzt nicht die Mühe gemacht, herauszufinden, was Du am Port 501 vorhast. Wenn Du magst, kannst Du mir das gerne mal genauer beschreiben.
 
Ich habe jetzt mal interessenhalber doch in den Port 501 reingeschaut. ErrState mit dem Offset 1 habe ich gefunden. Was Du aber mit dem Offset 0x12 auslesen willst, kann ich hier jetzt gerade nicht erkennen. Ich weiß noch nicht einmal, ob wir über TC2 oder TC3 reden.
P501.jpg
 

Anhänge

  • P501.jpg
    P501.jpg
    73 KB · Aufrufe: 10

Dein Link verweist aber schon mal in den Zweig von TC2 - wobei ich nicht ganz sicher bin, welche Information ich dem entnehmen soll. Wahrscheinlich stimmt der Link aber nicht ganz.

In welchen Port ist der(Offset 12) dann sonst vorhanden?

Naja, Offset 12 kann in jedem geöffneten Port gefunden werden, weil das heißt nichts anderes in der selektierten Indexgruppe der Indexoffset 12. Was sich dort genau befindet, steht in der Dokumentation.

Das Ganze wirkt auf mich etwas konfus.

Vielleicht möchtest Du doch mal erklären, was Du vorhast. Möglicherweise ist nicht eine (Teil-)Lösung, sondern eine Ein-Nordung von größerem Nutzen.
 
Zuletzt bearbeitet:
Und was ich bis jetzt so gesehen habe sind die IndexGroups und Offsets in TwinCAT 2 und 3 die selben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo ist mein Fehler?

Du fragst nach...
NC-Port (ob 500 oder 501 sei mal dahingestellt).
Indexgruppe 0x2100+ID = 0x2102
Indexoffset 0x12

Welche Info suchst du denn nun?
 
Wie ich schon schrieb: Mit einem nicht allokierten Array geht es nicht. Du musst das Array auf die richtige Länge (260Byte) im Contstructor allokieren und für "Anzeige" und "Fileoffset" deklarierst Du richtigerweise mit UINT32. Dann das Ganze in der Deklaration gemarshallt und schon läuft es. Wo hängt es also?

Du musst nur das hier und das hier kombinieren.
 
Zuletzt bearbeitet:
Zurück
Oben