dword

1schilcher

Level-1
Beiträge
137
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Allgemeine Frage

Hallo Leute, hab ein kleines Problem (für euch sicher keines)! Was ist eigentlich der Unterschied zwischen einem DWORD und einem Dint, bzw. einem Word und einem Int? Oder ist das das gleiche? Bitte helft einem Anfänger!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
word ist 16 bit, dword 32 bit

byte (8 bit) word (16 bit) und dword (32 bit) sind werte ohne vorzeichen und steggenommen auch keine zahlen zum rechnen es sind einfach bitwerte.

int ist 16 bit mit vorzeichen weil sint (short integer) eine 8bit zahl mit vorzeichen ist und Dint eine doppelt genaue int zahl mit 32 bit und vorzeichen ist.

desweiteren gibt es noch die USINT mit 8 bit (unsigned short integer) eine zahl ohne vorzeichen. Uint und UDint sind auch zahlen ohne vorzeichen mit 16 und 32 bit.
 
sorry sint ist iec61131-3 standard aber ich gebe den siemens leuten durchaus recht byte erfüllt den gleichen zweck
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie breit ist ein Integer ???

Hallo,

hugo schrieb:
int ist 16 bit mit vorzeichen

Das ist manchmal richtig und leider auch manchmal falsch. Ob ein Datentyp z.B. "Int" einen Typ als 16-Bitbreiten oder 32-Bitbreiten Datentyp (aber immer mit Signum) interpretiert wird, hängt immer von der eigenen Datentypdefinition des Compilers ab (egal ob SPS oder Hochsprache). Wenn der Compiler bestimmt, dass "Int" 16-Bitbreit ist, dann ist das so. Wenn der Compiler der Meinung ist, der Datentyp "Int" ist 32-Bitbreit oder gar 64-Bitbreit, dann musst Du dich auch danach richten. Enscheidend ist hier nur, wie der Compiler den entsprechenden Datentyp definiert. Also kurz gefasst und zur allgemeinen Aufklärung, der Compiler bestimmt den Datentyp und Du richtest Dich danach (mehr oder weniger unbewusst).

Gruss

Question_mark
 
Wo hasse dat denn her ????

Hallo,

hugo schrieb:
byte (8 bit) word (16 bit) und dword (32 bit) sind werte ohne vorzeichen und steggenommen auch keine zahlen zum rechnen es sind einfach bitwerte.
Keine Zahlen zum Rechnen ??? :ROFLMAO: :ROFLMAO:
War eNDe etwa Dein Ausbilder ???

Kannst Du mir jetzt mal ganz einfach begründen, warum man damit nicht rechnen kann ? 1+1 = 2, das klappt mit Datentyp "Byte", "Word", "DWord" bei mir ganz gut. Berichte doch mal über Dein Problem ...

Gruss

Question_mark
 
ich habe kein problem wie ich eben schreibe strenggenommen
das heisst auf deutsch die spec schreibt es so vor jedoch gehts in allen mir bekannten compilern also erst lesen dann antworten
unter strenggenommen meineich streng nach der iec61131-3 norm.
die norm definiert bitfolge datentypen (byte, word, dword und lword)
sowie die verschiedenen int und real datentypen.
nicht alle funktionen sind für alle datentypen definiert, und das ist durchaus implementierungsabhängig.
versuch mal bcd_to_int und dann bcd_to_word dann siehst du schnell den unterschied.
das eine ist eben eine zahl und das andere eine bitfolge.
als lektuere hierzu empfehlenswert:
hüthing verlag jens von aspen sps software entwicklung mit iec61131
oder
sringer verlag john / tiegelkamp sps programmierung mit iec61131-3

übrigens schreibt die iec611 vor das int 16 bit und lint 64 bit usw ist im gegensatz zu anderen compilern.
ob sich jeder hersteller dran hält ist natürlich was anderes
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@UG, QM: Ihr habt mit eueren Aussagen ja recht aber ich finde das ihr mit hugo zu streng seit. Er hat schon mehrfach erwähnt das er kein Setp7 einsetzt. Und wenn man sich streng an die IEC61131-3 hält hat er recht.
Das es bei Setp7 keine kein UINT gibt ist ja nun keine Allgemeinbildungs Sache sondern ein Fachwissen was sich auf Siemens bezieht.
Bei µC Programmierung gibt es auch oft die Diskusion welchen Datentyp man für was benutzt. Oft gibt es für den gleichen Datentyp eben verschiedene Namen.
Das was QM mit dem INT erwähnt hat (das es je nach Controllertyp mal 16Bit oder 32Bit sein können) stimmt zwar bei vielen Programmiersprachen bei CoDeSys nicht so da gibt es INT (UINT) = 16Bit und DINT (UDINT) = 32Bit.
 
Hallo,


Keine Zahlen zum Rechnen ??? :ROFLMAO: :ROFLMAO:
War eNDe etwa Dein Ausbilder ???

Kannst Du mir jetzt mal ganz einfach begründen, warum man damit nicht rechnen kann ? 1+1 = 2, das klappt mit Datentyp "Byte", "Word", "DWord" bei mir ganz gut. Berichte doch mal über Dein Problem ...

Gruss

Question_mark


Hugo hat IMHO recht.

Allein schon wegen der Darstellung im Status.
Ich rechne mit INT, DINT und REAL, aber doch nicht mit BYTE, WORD, DWORD, machst du das etwa?

Und was den Ausbilder angeht, der weis doch garnicht, was ein Byte ist, der kennt nur Bits und 0-Abfragen.

@Zotos:
Wenn ich STRENG werde, sieht das anders aus ! :ROFLMAO:
 
Wie war noch mal die Frage ???

Hallo Zotos,

Zotos schrieb:
@UG, QM: Ihr habt mit eueren Aussagen ja recht aber ich finde das ihr mit hugo zu streng seit. Er hat schon mehrfach erwähnt das er kein Setp7 einsetzt. Und wenn man sich streng an die IEC61131-3 hält hat er recht.

Mir ist eigentlich sche....egal, was hugo nun letztendlich einsetzt. In meinem Beitrag habe ich (glaube ich jedenfalls) deutlich ausgedrückt, dass alle Datentypen und deren Bitbreite letztendlich vom Compiler bestimmt werden. Und das eben als ganz globale Ausage, gültig für SPS oder Hochsprachen. Der Compiler kann sich da an Normen orientieren und diese berücksichtigen. Oder eben eigene Typen definieren.

Hugo schrieb:
streng nach der iec61131-3 norm
Ich habe allgemein von Datentypen gesprochen, wieso willst Du das mit Erwähnung von IEC61131 bezweifeln ?

UG schrieb:
SINT gibts in der S7 Welt nicht, da gibts nur BYTE (Ohne Vorzeichen)
Nein, gibt es bei S7 wirklich nicht. In anderen Programmiersprachen aber, mal als SmallInt oder ShortInt mit 8 oder 16 Bit, je nach Compiler....
Jetzt klar, was ich gemeint habe und hier irgendwie nach Belieben verdreht und auf CodeSys (kenn ich nur vom Namen) umgelegt wurde ? :rolleyes:

Lest mal die Frage des Threaderstellers durch, der hatte nur allgemein gefragt und nicht nach CodeSys, oder ?:confused:
Ich mag es einfach nicht, wenn man mir die Worte im Mund herumdreht ...:twisted:

Gruss

Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Datentypen mal global gesehen

Hugo,

sorry sint ist iec61131-3 standard aber ich gebe den siemens leuten durchaus recht byte erfüllt den gleichen zweck

Wobei BYTE in der S7 Welt eben kein Signum hat. sint aus iec61131 hat aber wahrscheinlich ein Signum (behaupte ich jetzt mal, aus der Ableitung des Namens "sint"). Ob es dann den gleichen Zweck erfüllt, na ja...
Im Prinzip ja, nur der Interpreter des Datentyps wird sich wahrscheinlich an den Unterschieden leicht verschlucken.

Gruss

Question_mark
 
Jetzt endlich kapiert ???

Hallo UG,

UG schrieb:
INT wird Dargestellt und interpretiert MIT Vorzeichen

Nur solange der Interpreter auch weiss, ob der Datentyp "INT" 8- , 16-, 32- oder 64-BitBreit ist. Ansonsten kann es schon mal zu Fehlinterpretationen kommen ...
Besonders lustig, wenn man im Netzwerk mit anderen Steuerungen kommuniziert.

Gruss

Question_mark
 
...
Lest mal die Frage des Threaderstellers durch, der hatte nur allgemein gefragt und nicht nach CodeSys, oder ?:confused:
Ich mag es einfach nicht, wenn man mir die Worte im Mund herumdreht ...:twisted:

Gruss

Question_mark
Code:
Allgemein := IEC61131_3;  (* Normung *)

IF (Siemens = IEC61131_3) THEN
  Siemens :=  Allgemein;
ELSE
  Siemens :=  NOT Allgemein;
END_IF

:ROFLMAO:

Wo hab ich Dir die Worte im Mund vedreht? Also das war keine Absicht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 1schilcher,
wenn es im Forum UG und Question_mark nicht gäbe, dann hätten wir eine heile Welt. Du stellst eine konkrete Frage und die beiden machen (wie immer) nur Wortklauberei, können dir den Sachverhalt aber nicht "rüber bringen". Es ist eben nicht einfach, eine Frage verständlich zu beantworten. Geh mal davon aus, dass meine Antwort die beiden wieder mit ihren unqualifizierten Meinungen auf den Plan rufen wird.
Hier aber mal meine Erklärung (nur dargestellt am "WORD").
Der Begriff Word meint zunächst mal nur 16 einzelne Bit. Wenn man z.B. an die ersten 16 Eingänge einer SPS irgendwelche Taster anschließt, kann man diese 16 Eingänge mit dem Befehl L EW0 auf einen Schlag einlesen und weiterverarbeiten. Es handelt sich also lediglich um 16 Bit, die miteinander nichts zu tun haben.
Fall 1:
Nun stellen wir uns aber mal ein "Schaltbrett" vor, auf dem diese 16 Eingänge nebeneinander angeordnet sind. Mit diesen Schaltern möchten wir nun eine Zahl im Dualcode eingeben. Da wir Zahlen von rechts nach links lesen liegt es auf der Hand, den rechtesten Schalter mit der kleinsten Wertigkeit 1(=2hoch0), den links davon mit der nächsten Wertigkeit 2(=2hoch1), dann 4=2hoch2, 8=2hoch3, 16=2hoch4 usw. bis zum linkesten Schalter mit der Wertigkeit 32768(=2hoch15) zu belegen. Sind alle Schalter eingeschaltet (1-Signal), dann werden die Wertigkeiten alle addiert, es kommt 65535 heraus. (Es gibt also insgesamt 65536 mögliche Schaltungskombinationen). Damit interpretieren wir diese 16 Bit als vorzeichenlose Zahl und mit dieser können wir natürlich auch rechnen. Wie diese interpretierte Kombination letzten Endes heisst, ist belanglos, man könnte also UINT sagen, heisst vorzeichenlose Zahl (obwhl sie ja eigentlich positiv ist).
Fall 2:
Jetzt ordnen wir dem linkesten Schalter nicht mehr eine Wertigkeit zu sondern ein Vorzeichen. Dann trägt er natürlich nicht mehr zur Gesamtwertigkeit bei. Mit seiner Hilfe können wir dafür positive und negative Zahlen darstellen. Der Zahlenbereich geht jetzt von -32768 ... +32767 (die 0 zählt zum Bereich der positiven Zahlen). Diese Interpretation, also linkestes Bit ist das Vorzeichen-Bit, wird meistens als INT-Format bezeichnet. Die Darstellung der negativen Zahlen ist hierbei etwas schwieriger zu verstehen. Natürlich kann man mit diesem Zahlenformat schon komfortabler rechnen.
Fall 3:
Jetzt ordnen wir unsere 16 Schalter von rechts nach links 4 Vierergruppen zu. Innerhalb jeder Gruppe arbeiten wir wieder von rechts nach links mit den Wertigkeiten 1, 2, 4, 8. Beschränken wir uns bei der Eingabe der einzelnen Ziffern zusätzlich auf die Werte von 0...9, dann kann die größte Zahl nur 9999 lauten.
Fazit (und das gilt für DWORD, BYTE ... auch):
WORD, DWORD usw. sind nur Begriffe für eine Zusammenfassung einer (definierten) Anzahl Bit. Damit kann man grundsätzlich nicht rechnen.
Begriffe wie INT, UINT, BCD, ... kennzeichnen eine (definierte) Interpretation der Bitfolge. Damit kann man dann aber mehr oder weniger gut rechnen. (Z.B.kenne ich keinen Befehl, um direkt mit BCD-Zahlen zu rechnen). Problem: Man muss darauf achten, dass bei einer Rechnung der zulässige Zahlenbereich (auch mittendrin) nicht überschritten wird. Also, passendes Zahlenformat wählen!
Hoffe, dass die Frage damit verständlicher (wenn auch nicht umfassend) beantwortet ist.
 
Sperrantrag.

Fall 2:
Jetzt ordnen wir dem linkesten Schalter nicht mehr eine Wertigkeit zu sondern ein Vorzeichen. Dann trägt er natürlich nicht mehr zur Gesamtwertigkeit bei. Mit seiner Hilfe können wir dafür positive und negative Zahlen darstellen. Der Zahlenbereich geht jetzt von -32768 ... +32767 (die 0 zählt zum Bereich der positiven Zahlen). Diese Interpretation, also linkestes Bit ist das Vorzeichen-Bit, wird meistens als INT-Format bezeichnet. Die Darstellung der negativen Zahlen ist hierbei etwas schwieriger zu verstehen. Natürlich kann man mit diesem Zahlenformat schon komfortabler rechnen.

Wieder mal falsch erklärt.
Ich weis nicht, was ich an dir mehr verabscheue, deine Arroganz oder deine Ignoranz. Wahrscheinlich beides.

INTEGER:
=======

Darstellung Zahl +1:
00000000 00000001

Darstellung Zahl -1:
11111111 11111111



Soviel zu "das linke Bit ist das Vorzeichen"

Schon mal was vom 2er - Komplement gehört ?

@Markus:
Dieser eNDe bringt mit seinem Halbwissen noch das Forum in Verruf !
Selbst einfache, selbstverständliche Dinge erklärt er falsch und beschimpft dabei noch Leute, die es besser wissen als er.

Ich beantrage, den eNDe zu sperren !

Ende mit lustig.
 
ich empfehle allen beteiligten erst einmal zu lesen:
und bitte bedenkt wir sprechen bei sps von einem internationalen standard nach iec 61131 und nicht von irgendeinem hersteller wie codesys oder siemens. oder ist dies kein sps forum?????

http://www.fen-net.de/karlheinz.john/IEC61131-3JohnTiegelkampDeutschV1.2.pdf
seite 347 definition der std datentypen

auch ein studium des standards selbst waere vielleicht ganz angebracht:
hier dcer auszug data types
Table 10 - Elementary data types
No.
Keyword
Data type
N a
1
[FONT=Courier New, monospace]BOOL[/FONT]​
Boolean​
1 h​
2
[FONT=Courier New, monospace]SINT[/FONT]​
Short integer​
8 c​
3
[FONT=Courier New, monospace]INT[/FONT]​
Integer​
16 c​
4
[FONT=Courier New, monospace]DINT[/FONT]​
Double integer​
32 c​
5
[FONT=Courier New, monospace]LINT[/FONT]​
Long integer​
64 c​
6
[FONT=Courier New, monospace]USINT[/FONT]​
Unsigned short integer​
8 d​
7
[FONT=Courier New, monospace]UINT[/FONT]​
Unsigned integer​
16 d​
8
[FONT=Courier New, monospace]UDINT[/FONT]​
Unsigned double integer​
32 d​
9
[FONT=Courier New, monospace]ULINT[/FONT]​
Unsigned long integer​
64 d​
10
[FONT=Courier New, monospace]REAL[/FONT]​
Real numbers​
32 e​
11
[FONT=Courier New, monospace]LREAL[/FONT]​
Long reals​
64 f​
12
[FONT=Courier New, monospace]TIME[/FONT]​
Duration​
-- b​
13
[FONT=Courier New, monospace]DATE[/FONT]​
Date (only)​
-- b​
14
[FONT=Courier New, monospace]TIME_OF_DAY [FONT=Arial, sans-serif]or[/FONT] TOD[/FONT]​
Time of day (only)​
-- b​
15
[FONT=Courier New, monospace]DATE_AND_TIME [FONT=Arial, sans-serif]or[/FONT] DT[/FONT]​
Date and time of Day​
-- b​
16
[FONT=Courier New, monospace]STRING[/FONT]​
Variable-length single-byte character string​
8 i,g​
17
[FONT=Courier New, monospace]BYTE[/FONT]​
Bit string of length 8​
8 j,g​
18
[FONT=Courier New, monospace]WORD[/FONT]​
Bit string of length 16​
16 j,g​
19
[FONT=Courier New, monospace]DWORD[/FONT]​
Bit string of length 32​
32 j,g​
20
[FONT=Courier New, monospace]LWORD[/FONT]​
Bit string of length 64​
64 j,g​
21
[FONT=Courier New, monospace]WSTRING[/FONT]​
Variable-length double-byte character string​
16 i,g​
a Entries in this column shall be interpreted as specified in the footnotes.
b The range of values and precision of representation in these data types is implementation-dependent.
c The range of values for variables of this data type is from [FONT=Courier New, monospace]-(2N-1)[/FONT] to [FONT=Courier New, monospace](2N-1)-1[/FONT].
d The range of values for variables of this data type is from [FONT=Courier New, monospace]0[/FONT] to [FONT=Courier New, monospace](2N)-1[/FONT].
e The range of values for variables of this data type shall be as defined in IEC 559 for the basic single width floating-point format.
f The range of values for variables of this data type shall be as defined in IEC 559 for the basic double width floating-point format.
g A numeric range of values does not apply to this data type.
h The possible values of variables of this data type shall be 0 and 1, corresponding to the keywords [FONT=Courier New, monospace]FALSE[/FONT] and [FONT=Courier New, monospace]TRUE[/FONT], respectively.
i The value of [FONT=Courier New, monospace]N[/FONT] indicates the number of bits/character for this data type.
j The value of [FONT=Courier New, monospace]N[/FONT] indicates the number of bits in the bit string for this data type.
 
Zurück
Oben