Wieso funktioniert z.B. DWORD_OF_BYTE?

Begonnen von Jicin, 30. Juni 2009, 15:35:26

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Jicin

Hallo zusammen,
ich habe eine etwas merkwürdige Frage:
Wieso liefert z.B. DWORD_OF_BYTE das "richtige" Ergebnis?
Zur Erinnerung:
DWORD_OF_BYTE := SHL(SHL(SHL(B3,8) OR B2,8) OR B1,8) OR B0;

In der CoDeSys-Hilfe steht, dass das Ergebnis des SHL Operators vom Typ des Eingangs abhängt.
Demnach müßte hier das Ergebnis immer 00_00_00_<B0> sein.

Hintergrund meiner Frage ist, dass ich gerade eine Steuerung teste, bei der das tatsächlich auch so ist..
die bisherigen Steuerungen haben wohl immer eine implizite Typkonvertierung durchgeführt.

Gibt es eine Einstellung um das wieder "richtig" hinzubekommen?
.. ich würde nur sehr ungern alle möglichen Funktionen umschreiben müssen...

hugo

die implizite typkonvertierung ist eine spezialität von codesys es nimmt bei verschiedenen typen immer den größeren der beiden
so dass das beispiel funktioniert.

welches system benutzt du? codesys? version?
wenn wir die lib verbessern können das es auch auf deinem system funktioniert tun wir das gerne benötigen aber deine inputs.

Jicin

Hallo,

ich benutze CoDeSys in der Version 2.3.9.13 mit einem IPC der Firma TRS.

Wie schon erwähnt steht in der Hilfe zu CoDeSys, dass eben nicht der größere
Typ (bei SHL, SHR, ..) verwendet wird, sondern genau der Typ, der als Eingabe kommt:
ZitatHinweis: Beachten Sie, dass die Anzahl der Bits, die für die Rechenoperation berücksichtigt wird, durch den
Datentyp der Eingangsvariable in vorgegeben wird. Handelt es sich hierbei um eine Konstante, wird der
kleinstmögliche Datentyp berücksichtigt. Der Datentyp der Ausgangsvariable bleibt ohne Auswirkung auf die Rechenoperation.
(in der Hilfe nach "SHL" suchen)

hugo

#3
grundsätzlich ist es so das in codesys und auch anderen sps programmiersystemen abhängig vom zielsystem jeweils andere libraries gelinkt werden.
also ist z.b. der code für shr vom jeweiligen zielsystem abhängig.
das erklärt warum codesys durchaus auf verschiedenen zielsystemen unterschiedliche ergebnisse bringen kann.
speziell bei string funktionen sind die unterschiede sehr gross.
ein simples statement wie shr hat uns bisher noch keine probleme bereitet.

bitte sag uns alle stellen die du bemerkst wo dieses problem auftritt und wir bauen den fix ins nächste release ein.
wir wollen das oscat auf möglichst allen systemen fehlerfrei läuft.

danke für deine hilfe, hugo

leider führt das dazu das ein codde der auf zielsystem A einwandfrei läuft auf einem anderen Zielsystem Fehler liefern kann.

Jicin

Hallo,
im Vorraus schonmal Danke für die Hilfe!
Ich hatte schon befürchtet, dass ich bei jedem neuen OSCAT-Release die Änderungen selbst nachziehen muss
... und auf OSCAT verzichten ist natürlich völlig indiskutabel ;)

Probleme sind mir bisher konkret bei den Funktionen WORD_OF_BYTE und DWORD_OF_BYTE begegnet.
theoretisch müsste es aber auch bei REVERSE.. im Allgemeinen eben alle Funktionen, die einen Shift auf einem Byte ausführen

hugo

ok in der nächsten release werden wir bei diesen funktionen den typecast forcieren

Jicin