ADS Read out für ganze Klemme°°°!!!

daniel1987

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leutz,

habe das problem das ich gerne eine KL1808 von Beckhoff per ADS komplett auslesen möchte wie beim ADSREAD einen einzelnen eingang. Sinn davon soll weniger Arbeit und Datentransfer sein, das problem dabei ist aber ich brauche diese Daten danach auch einzeln wieder als BOOLsche Variablen zum weiterverarbeiten.

Habs mal mit ADSREADEX versucht aber irgendwie... naja.

Hat einer von euch nen vorschlag???????

Danke im Vorraus

Grüße
Daniel
 
Aufgrund der dürftigen Informationen kann ich nur versuchen zu erraten, was du mit ADS eigentlich machst:
- die 8 Eingänge sind mit booleschen I/O Variablen in einer I/O Task verknüpft
- die ADS-Applikation greift auf Port 301 der I/O Task per IndexGroup 0xF021 und BitAdresse = ByteAdresse * 8 + BitOffset

Stattdessen kannst du per IndexGroup 0xF020 und ByteAdresse alle Bits als Byte auslesen, die entsprechende Adressierung der booleschen Variablen in der I/O Task natürlich vorausgesetzt.

Gruß,
witkatz
 
Willst du nun die Adressen oder die Bits haben?
Wenn die Bits in TwinCAT I/O durch Adressierung zu einem Byte zusammengefasst sind, dann lässt sich das Byte als Einheit mit einem Befehl lesen. In der Applikation kann dann durch Binäroperation UND mit einem Bitmuster jedes einzelne Bit abgefragt und in ein boolesches Array zugewiesen werden.
Du gibst nicht an in welcher Sprache deine ADS Applikation geschrieben ist, also nehme ich mir die Freiheit und füge ein Beispiel in C# an:

Code:
        private void button1_Click(object sender, EventArgs e)
        {
            byte InputVar = 0;
            InputVar = (byte)tcClient.ReadAny(0xF020, 0, InputVar.GetType());
            bool[] arrInputVar = ByteToBoolArr(InputVar);
        }
        bool[] ByteToBoolArr(byte b)
        {
            bool[] BoolArr = new bool[8];
            byte Mask = 1;
            for (int i = 0; i <= 7; i++)
            {
                BoolArr[i] = (b & Mask) == Mask;
                Mask <<= 1;
            }
            return BoolArr;
        }
Gruß,
witkatz
 
Pass auf ganz simpel:

1. Eine CX --->Master
2. Eine BC--->Koppler

am BC eine Eingangskarte 8 eingänge
CX soll diese auslesen via ADS als Byte.
Aus diesem Byte will ich wieder meinetwegen 8 Lämpchen Schalten (BOOL) quasi dig. out!

mehr also nicht!

Mfg
 
Zurück
Oben