Autor Thema: _ARRAY_SHUFFLE anwenden ?!?!  (Gelesen 8125 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

mike_roh_soft

  • Gast
_ARRAY_SHUFFLE anwenden ?!?!
« am: 11. Januar 2012, 19:04:09 »
Hi,

ich glaub ich sitz schon zu lange vorm PC.

Ich möchte die Funktionen aus der Lib anwenden z.B. _ARRAY_SHUFFLE
...
VAR_OUTPUT
arWuerfel     :ARRAY[1..6] OF BOOL;
END_VAR
...
_ARRAY_SHUFFLE(ADR(arWuerfel), SIZEOF(arWuerfel));

Die SPS aufm CX9010 steigt mir dabei aus!
Wenn ich die Zeile auskommentiere läuft die SPS!

Wie muss ich die Funktion verwenden damit es geht?

Danke

EDIT: Was bedeutet der Unterstrinch am Funktionsnamen?
« Letzte Änderung: 11. Januar 2012, 19:06:20 von mike_roh_soft »

mike_roh_soft

  • Gast
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #1 am: 11. Januar 2012, 20:32:29 »
Hää ... nun gehts obwohl ich nix geändert habe...

Ich rufe die _ARRAY_SHUFFLE() für einen Zyklus auf. Aber es sind immer die zwei gleichen bits im ARRAY auf 1 ???

Offline peewit

  • Moderator
  • *****
  • Beiträge: 2 378
    • Profil anzeigen
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #2 am: 11. Januar 2012, 21:17:54 »
hallo

array_shuffle arbeitet mit einem array of REAL (siehe DOKU)

das heisst es werden immer REAL-Werte (32bit BINAER) untereinander vertauscht
dein bool_array belegt intern relativ sicher pro bool nur ein byte, somit kann nichts vernünftiges rauskommen


dein-test:  arWuerfel : ARRAY[1..6] OF BOOL
belegt in der praxis 6 bytes, das belegt umgerechnet den platz von 1,5 REAL-WERTE
und 1,5 REAL-Werte kann man nun uach nicht mischen


du könntest notfalls ein array_of_real benutzen und das array folgend belegen
arWuerfel : ARRAY[1..6] OF REAL := 1,0,1,1,0,1;

das kann man ja auch wieder sauber mit REAL_TO_BOOL wandeln
ein array of dword sollte genauso funktionieren, das frist weniger performance als real



du hattest noch eine frage:     Was bedeutet der Unterstrich am Funktionsnamen?

das heisst anfänger sollten die finger davon lassen, da mit diesen bausteinen der speicher per pointer direkt manipuliert wird
und bei falscher handhabung kann es zu problemen (auch abstürzen) kommen.

Siehe doku _Kapitel 2.2
« Letzte Änderung: 11. Januar 2012, 21:22:02 von peewit »

Offline gravieren

  • Entwickler
  • *****
  • Beiträge: 578
    • Profil anzeigen
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #3 am: 11. Januar 2012, 22:42:14 »
Hi

dein-test:  arWuerfel : ARRAY[1..6] OF BOOL
belegt in der praxis 6 bytes, das belegt umgerechnet den platz von 1,5 REAL-WERTE
und 1,5 REAL-Werte kann man nun uach nicht mischen

Einspruch --> 6 Bit   -->  1 Byte

0er und 1er sortieren ist cool.

Oder habe ich hier einen Denkfehler.


Gruß Karl

Offline peewit

  • Moderator
  • *****
  • Beiträge: 2 378
    • Profil anzeigen
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #4 am: 11. Januar 2012, 23:17:45 »
hallo

1. wenn man performant mit boolschen variablen arbeiten will, kann man es nur einem BYTE pro BOOL Wert lösen
denn das maskieren der bits beim lesen und schreiben ist viel zu aufwendig für die sps
manche compiler haben noch eine "Steinzeit-Option" um auf gepackte Bits umschalten zu können, das ist aber total sinnlos
und nicht zeitgemaess

2. wir wollen mit shuffle auch nicht sortieren sondern die werte per zufall verteilen !

3. das das wirklich so ist, könnt ihr euch in der bildschirm-hardcopy ansehen

 arBOOL : ARRAY[1..6] OF BOOL;
 arBYTE : ARRAY[1..6] OF BYTE;

beide datenarray belegen 6 bytes im speicher



[gelöscht durch Administrator]

mike_roh_soft

  • Gast
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #5 am: 12. Januar 2012, 11:13:58 »
Hi,
danke schon mal für die Antworten und Hinweise.
Die Variante mit ARRAY OF DWORD und DWORD_TO_BOOL funktioniert!

Ich bin nicht ganz so unerfahren aber auch kein Guru.
Mit der OSCAT-Lib habe ich erst seit 2Monaten zu tun.

Was bedeutet jetzt der Unterstrich?
Außer mich zu tadeln hast dazu nichts gesagt ;)
Ich will doch noch was lernen!

Gruß Mike
« Letzte Änderung: 12. Januar 2012, 11:27:15 von mike_roh_soft »

Offline peewit

  • Moderator
  • *****
  • Beiträge: 2 378
    • Profil anzeigen
Re: _ARRAY_SHUFFLE anwenden ?!?!
« Antwort #6 am: 12. Januar 2012, 16:00:39 »
Zitat
Was bedeutet jetzt der Unterstrich?
Außer mich zu tadeln hast dazu nichts gesagt ;)
Ich will doch noch was lernen!

das hatte ich aber vorhin schon geschrieben

siehe oscat_basic dokumentation kapitel 2.2
da ist genau zu deiner frage eine erklärung


viel spass noch mit oscat