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?
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 ???
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
Hi
Zitat von: peewit in 11. Januar 2012, 21:17:54
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
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]
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
ZitatWas 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