Ich dachte, (bevor ich das Rad nochmal erfinde) vielleicht sei schon eine Funktion dazu in CodeSys implementiert. Scheint nicht der Fall zu sein. Ich habe nun eine Funktion nach Folgendem Code programmiert, der ich das Low-WORD und das High-WORD übergebe und als Retourwert erhalte ich das gewünschte DWORD. Funktioniert einwandfrei!
(Das Low-WORD im unteren Teil des DWORD's einfügen)
LW_HW_TO_DWORD.0 := LW.0;
LW_HW_TO_DWORD.1 := LW.1;
LW_HW_TO_DWORD.2 := LW.2;
LW_HW_TO_DWORD.3 := LW.3;
LW_HW_TO_DWORD.4 := LW.4;
LW_HW_TO_DWORD.5 := LW.5;
LW_HW_TO_DWORD.6 := LW.6;
LW_HW_TO_DWORD.7 := LW.7;
LW_HW_TO_DWORD.8 := LW.8;
LW_HW_TO_DWORD.9 := LW.9;
LW_HW_TO_DWORD.10 := LW.10;
LW_HW_TO_DWORD.11 := LW.11;
LW_HW_TO_DWORD.12 := LW.12;
LW_HW_TO_DWORD.13 := LW.13;
LW_HW_TO_DWORD.14 := LW.14;
LW_HW_TO_DWORD.15 := LW.15;
(Das High-WORD im oberen Teil des DWORD's einfügen)
LW_HW_TO_DWORD.16 := HW.0;
LW_HW_TO_DWORD.17 := HW.1;
LW_HW_TO_DWORD.18 := HW.2;
LW_HW_TO_DWORD.19 := HW.3;
LW_HW_TO_DWORD.20 := HW.4;
LW_HW_TO_DWORD.21 := HW.5;
LW_HW_TO_DWORD.22 := HW.6;
LW_HW_TO_DWORD.23 := HW.7;
LW_HW_TO_DWORD.24 := HW.8;
LW_HW_TO_DWORD.25 := HW.9;
LW_HW_TO_DWORD.26 := HW.10;
LW_HW_TO_DWORD.27 := HW.11;
LW_HW_TO_DWORD.28 := HW.12;
LW_HW_TO_DWORD.29 := HW.13;
LW_HW_TO_DWORD.30 := HW.14;
LW_HW_TO_DWORD.31 := HW.15;
Na ja.... Vielleicht kann es ja Jemand brauchen ...?
Mit freundlichen Grüssen! Pitsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
http://www.geisler-controls.de im Downloadbereich die Bibliothek liegen habe. Sie packt u.a. zwei Worte zu einem DWORD, es sind aber auch noch eine Reihe weiterer oft gebrauchter Funktionen darin enthalten.
Die Lib steht unter der GNU und kann von jedermann verwendet werden.
Rolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-06-07
Originally created by: Bernhard Werner
Man bedenke: der Bitzugriff dw.1 ist sehr aufwendig!
Es geht auch einfacher:
dw2 := SHL(WORD_TO_DWORD(w1), 16) OR w2;
Eine andere Lösung wäre über Pointer:
pw : POINTER TO WORD;
pw := ADR(dw);
pw^ := w1;
pw := pw + 2;
pw^ := w2;
Bernhard
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
schau mal bei CoDeSys unter Hilfe -> Suchen -> WORD-Konstanten.
Das hilft dir bestimmt auch weiter.
Viele Grüße
Sara
PS: @ Steffi: Was für Bücher kannst du denn empfehlen? Ich kenn nur das von H. Lepers - "SPS Programmierung nach IEC 61131-3, Mit Beispielen für CoDeSys und Step7"
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Mit CoDeSys lassen sich ja bekanntlich verschiedene Zielsysteme programmieren.
Je nach erworbenes Zielsystem wird eigentlich die richtige Dokumentation bereitgestellt. Diese befinden sich auf den mitgelieferten CD's (bei WAGO beispielsweise auf der CD "759-911 WAGO-I/O-PRO CAA" oder "Automation Tools and Docs", bin mir nemme so ganz sicher).
-
Zitat: @stonix: wo kann ich nachlesen was das hier bedeutet?
Hallo Leute
Kann mir Jemand sagen, wie ich in CodeSys 2 Variablen vom Typ WORD zu einer Variablen vom Typ DWORD vereinige. LowByte und HighByte.
Da gibt es sicher eine definierte Funktion dafür.
Mit freundlichen Grüssen! Pitsch
Hallo
Ich dachte, (bevor ich das Rad nochmal erfinde) vielleicht sei schon eine Funktion dazu in CodeSys implementiert. Scheint nicht der Fall zu sein. Ich habe nun eine Funktion nach Folgendem Code programmiert, der ich das Low-WORD und das High-WORD übergebe und als Retourwert erhalte ich das gewünschte DWORD. Funktioniert einwandfrei!
(Das Low-WORD im unteren Teil des DWORD's einfügen)
LW_HW_TO_DWORD.0 := LW.0;
LW_HW_TO_DWORD.1 := LW.1;
LW_HW_TO_DWORD.2 := LW.2;
LW_HW_TO_DWORD.3 := LW.3;
LW_HW_TO_DWORD.4 := LW.4;
LW_HW_TO_DWORD.5 := LW.5;
LW_HW_TO_DWORD.6 := LW.6;
LW_HW_TO_DWORD.7 := LW.7;
LW_HW_TO_DWORD.8 := LW.8;
LW_HW_TO_DWORD.9 := LW.9;
LW_HW_TO_DWORD.10 := LW.10;
LW_HW_TO_DWORD.11 := LW.11;
LW_HW_TO_DWORD.12 := LW.12;
LW_HW_TO_DWORD.13 := LW.13;
LW_HW_TO_DWORD.14 := LW.14;
LW_HW_TO_DWORD.15 := LW.15;
(Das High-WORD im oberen Teil des DWORD's einfügen)
LW_HW_TO_DWORD.16 := HW.0;
LW_HW_TO_DWORD.17 := HW.1;
LW_HW_TO_DWORD.18 := HW.2;
LW_HW_TO_DWORD.19 := HW.3;
LW_HW_TO_DWORD.20 := HW.4;
LW_HW_TO_DWORD.21 := HW.5;
LW_HW_TO_DWORD.22 := HW.6;
LW_HW_TO_DWORD.23 := HW.7;
LW_HW_TO_DWORD.24 := HW.8;
LW_HW_TO_DWORD.25 := HW.9;
LW_HW_TO_DWORD.26 := HW.10;
LW_HW_TO_DWORD.27 := HW.11;
LW_HW_TO_DWORD.28 := HW.12;
LW_HW_TO_DWORD.29 := HW.13;
LW_HW_TO_DWORD.30 := HW.14;
LW_HW_TO_DWORD.31 := HW.15;
Na ja.... Vielleicht kann es ja Jemand brauchen ...?
Mit freundlichen Grüssen! Pitsch
http://www.geisler-controls.de im Downloadbereich die Bibliothek liegen habe. Sie packt u.a. zwei Worte zu einem DWORD, es sind aber auch noch eine Reihe weiterer oft gebrauchter Funktionen darin enthalten.
Die Lib steht unter der GNU und kann von jedermann verwendet werden.
Rolf
Originally created by: Bernhard Werner
Man bedenke: der Bitzugriff dw.1 ist sehr aufwendig!
Es geht auch einfacher:
dw2 := SHL(WORD_TO_DWORD(w1), 16) OR w2;
Eine andere Lösung wäre über Pointer:
pw : POINTER TO WORD;
pw := ADR(dw);
pw^ := w1;
pw := pw + 2;
pw^ := w2;
Bernhard
ich hab eine variable vom typ dword und würd sie gerne in zwei variablen vom typ word splitten, weil ich diese sonst nicht weiterverarbeiten kann...
wie mach ich das?
habe dies mal
dw2 := SHL(WORD_TO_DWORD(w1), 16) OR w2;
hiernach
SHL(DWORD_TO_WORD(Zaehler1), 16) OR Zaehler2:=gZaehler1;
umgestellt, dachte dann könnte es funktionieren, aber codesys gibt mir einen fehler raus...
danke schon mal im voraus
Hi betty,
ich verstehe nicht nach welchen Regeln du das umgestellt hast
und der Compiler versteht es ja offensichtlich auch nicht.
Aber man kann und muss ja auch nicht alles verstehen,
man muss ja nur wissen wie es funktioniert
Also ich nehme mal an dein gZaehler1 ist dein DWORD
und Zaehler1 b.z.w. Zaehler2 sind deine WORD Variablen.
Dann wäre einer von vielen Wegen es wie folgt zu machen
Zaehler1 := DWORD_TO_WORD(gZaehler);
Zaehler2 := DWORD_TO_WORD(gZaehler / 16#0001_0000);
Uwe
hallo uwe,
zunächst einmal vielen dank, es funktioniert
ich hab keine regeln angewandt, dachte, wenn ich es umstelle, würds vllt. funktionieren
ging aber nicht...
noch ne kleine frage:
was heißt das genau??? 16#0001_0000
lg betty
Hallo betty,
16# bedeutet das die folgende Zahl eine Zahl zur Basis 16 ist
also eine Hex-Zahl.
Der Unterstrich in der Zahl dient nur der besseren Lesbarkeit und darf aber muss nicht
da sein. Es dürfen auch mehrere, einzelne Unterstriche sein.
Man könnte z.B. auch statt
16#0001_0000
auch
16#00_01_00_00
oder
2#00000000_00000001_00000000_00000000 ( zur Basis 2 -> also binär )
oder
65536 ( dezimal )
schreiben.
(Zahl / 16#0001_0000)
ist letztendlich nur ein Rechtsschieben um 16 Bit,
da teilen durch 2 ein Rechtsschieben um 1 Bit ist
und
2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^16
oder eben = 65536 ist.
Was man wiederum auch hexadezimal 00010000h darstellen kann.
Uwe
Hallo betty,
bei http://www.geisler-controls.de
Rolf
guten morgen!
vielen dank euch beiden
liebe grüße betty
hallo,
ich habe da noch ne frage.
und zwar, wenn ich diese werte force
DATA[18]=65535 und
DATA[19]=1
gib dann mein touchpanel, weil die werte wieder zusammen zu nem dword gefasst werden den wert 131071 aus.
kann mir jemand bitte erklären warum?!
lg betty
Originally created by: Stephanie Kreutz
Hallo,
naja, weil es eben die zwei Wörter zusammenfügt ?!? Das ist ja was du wohl machen wolltest.
Als Wert steht dann eben DATA[19]_Data[18] und das ist nunmal
16#0001_FFFF = 131071
Gruß Steffi
vielen dank stephanie!!!!!
Hallo betty
Es kann sein das dein Problem einfacher zu Händeln ist.
Du willst ein Datenbereiche für das Bedienpanel haben.
Data ARRAY [1..100] of WORD ;
Dieser beinhaltet verschiedene andere Werte.
Data[0] und Data[1] = X als DWORD
Data[2] und Data[3] = Y als TIMER
Oder was sonst noch gewünscht wird.
Dann ist das einfachste beide bereich feste Adressen zu vergeben.
also
Data AT%MW0 ARRAY [1..100] of WORD ;
X AT %MW0 of DWORD ;
Y AT %MW2 of TIME ;
Vorteil es ist kein Programm nötig.
MfG Jochen
Related
Talk.ru: 1
Talk.ru: 2
Talk.ru: 3
siehe http://forum.3s-software.com/viewtopic.php?t=1941 auch hier ganz simpel:
guten morgen,
vielen dank für die antworten
ich hab ein doppelwort, was ich aufsplitten muss, damit ich das übertragen kann...
aber damit mir die ganze geschichte angezeigt wird, muss ich das im panel wieder zusammenfügen
für mich ist das alles neuland
@stonix: wo kann ich nachlesen was das hier bedeutet?
wort1:WORD:=16#1234;
wort2:WORD:=16#5678;
dwort:DWORD:=16#00000000;
und
Code:
dwort := SHL( wort1 , 16 ) OR wort2; (Wird zu 16#12345678)
danke schon mal
Originally created by: Stephanie Kreutz
guten morgen,
es gibt ein Dokument "Erste Schritte mit CoDeSys" das bei der Installation direkt mit kommt.
Vielleicht schaust du dir das einmal an. Anscheinend fehlen hier noch die Grundlagen...
außerdem gibt es noch Bücher.. das ist so altmodisches Zeug mit Papier
Gruß Steffi
Hey Betty,
schau mal bei CoDeSys unter Hilfe -> Suchen -> WORD-Konstanten.
Das hilft dir bestimmt auch weiter.
Viele Grüße
Sara
PS: @ Steffi: Was für Bücher kannst du denn empfehlen? Ich kenn nur das von H. Lepers - "SPS Programmierung nach IEC 61131-3, Mit Beispielen für CoDeSys und Step7"
Mit CoDeSys lassen sich ja bekanntlich verschiedene Zielsysteme programmieren.
Je nach erworbenes Zielsystem wird eigentlich die richtige Dokumentation bereitgestellt. Diese befinden sich auf den mitgelieferten CD's (bei WAGO beispielsweise auf der CD "759-911 WAGO-I/O-PRO CAA" oder "Automation Tools and Docs", bin mir nemme so ganz sicher).
-
Im Internet findest Du die Doku unter:
http://www.wago.com/wagoweb/documentation/navigate/nm9dp__d.htm
(achte auf die Version bevor Du sie ausdruckst... sind viiiiiele Seiten mirindenarschbeiß)
In der Doku "759-333 WAGO-I/O-PRO CAA" im "Anhang C", "Kap. 10.15" auf der Seite "10-35" und "2-10".
und
In der Doku "759-333 WAGO-I/O-PRO CAA" im "Anhang E", "Kap. 10.21" ab den Seiten "10-71".
Viel Spaß
guten morgen,
vielen dank für eure antworten...!!!!
ich wünsche euch eine erfolgreiche woche
liebe grüße
betty