Komme durcheinander mit Mws und DWs und INT.

Mareike

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
In den Vorlesungen sind wir da nie so drauf eingegangen. An der Tafel wurde immer alles in MWs geschrieben. z.B.:
L 32
T MW12

Nur habe ich nun für ein Projekt auch mit DWs und INT zu tun und komme nun ganz durcheinander.
Kann ich überhaupt wie in dem Beispiel oben eine normale Dezimalzahl in ein Merkerwort laden? Denn wenn ich in einem Datenbaustein ein Datenwort belegen will, so muss ich das ja so schreiben: W#16#12

Und wo liegt genau der Unterschied zwischen INT und einem DW? Beide haben ja 16 Bit?
Ich möchte nun auf jeden Fall einen Datenbaustein benutzen um gewisse Werte abzulegen. Da geht es z.B. um Rechenzwischenwerte und auch um analoge Eingangs- und Ausgangswerte. Nun habe ich gelesen, dass man von analogen Eingangsbaugruppen die Werte im Integerformat bekommt. Bedeutet das, dass ich diese auch auf jeden Fall in einem INT ablegen muss oder kann ich es auch in einem DW oder MW ablegen?

Viele Grüße
 
int ist nur der datentyp.
das hat nichts mit mw oder dw zu tun.
worte sind immer 16bit breit. egal ob dw mw ew oder aw.
wenn du einen wert vom typ int dezimal laden willst schreibst du einfach
L 12
wenn du
L W#16#12 schreibst ist das hex, also dez 18
eine s7-analogbaugruppe liefert dir 27767 einheiten bei 'vollausschlag'
einlesen kannst du die mit der fc105 aus den ti-s7 converting blocks
oder du teilst den wert einfach durch den entsprechenden faktor. (lad dir mal die exceltabelle 'analogwert normieren' von meiner hp).

ob du nun mit worten oder doppelworten arbeitest, ist abhängig von der anwendung. bei analogwerten ist es teilweise von vorteil mit dem datentyp real zu arbeiten (fc105 liefert den normierten wert so)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, Volker. Kannst Du mir vielleicht mal ein, zwei Beispiele nennen warum ich diese Datentypen und auch diese zusammengesetzten Datentypen (UDTs ?) brauchen kann.
Vielen Dank,
Mareike
 
udt beispiel
du hast mehrere förderbänder von denen du diverse sachen darstellen willst.
z.b UDT1
Code:
0.0 s_rg_abwahl BOOL FALSE Band soll abgewählt 
0.1 s_rg_aus BOOL FALSE Band Soll hand aus 
0.2 s_rg_ein BOOL FALSE Band Soll hand ein  
0.3 i_rg BOOL FALSE Band ist  
0.4 i_rg_voll BOOL FALSE Band nicht voll
damit ich das nicht für jeden motor extra schreiben muss, lege ich obiges als udt an.

in meinem db für die motore schreibe ich nun nicht obiges für jeden motor, sondern gebe als typ udt1 an
Code:
adr name    typ
0.0 band_1 UDT1   
2.0 band_2 UDT1
schau dir diesen db dann mal in der datenansicht an, dann weisst du was ich meine.

obiges mal als awöl-quelle.
Code:
TYPE UDT 1
VERSION : 0.1

  STRUCT  
   s_rg_abwahl : BOOL ; //Band soll abgewählt
   s_rg_aus : BOOL ; //Band Soll hand aus
   s_rg_ein : BOOL ; //Band Soll hand ein 
   i_rg : BOOL ; //Band ist 
   i_rg_voll : BOOL ; //Band nicht voll
  END_STRUCT ; 
END_TYPE
DATA_BLOCK DB 10
TITLE =
VERSION : 0.1

  STRUCT  
   band_1 : UDT 1; 
   band_2 : UDT 1; 
  END_STRUCT ; 
BEGIN
   band_1.s_rg_abwahl := FALSE; 
   band_1.s_rg_aus := FALSE; 
   band_1.s_rg_ein := FALSE; 
   band_1.i_rg := FALSE; 
   band_1.i_rg_voll := FALSE; 
   band_2.s_rg_abwahl := FALSE; 
   band_2.s_rg_aus := FALSE; 
   band_2.s_rg_ein := FALSE; 
   band_2.i_rg := FALSE; 
   band_2.i_rg_voll := FALSE; 
END_DATA_BLOCK

den typ int benutzt man meistens weil halt jeder normale mensch dezimal rechnet.
du kannst natürlich auch mit dem typ word (also hex) arbeiten. das verkompliziert die sache aber ungemein.
nehmen wir an ich habe eine leistung von 75%. da kann ich also schreiben
L 75 //dezimal
oder
L W#16#4B //hex
oder
L 2#1001011 //binär
vom wert her sind alle 3 gleich. aber womit lässt sich wohl am einfachsten rechnen?
 
Hey Du bist klasse, vielen Dank ;-). Das mit den UDTs hab ich verstanden. Nur bei meinen analogwerten bin ich noch nicht 100%ig sicher, habe auch leider nicht diese Downloaddatei bei Dir finden können.
Also kann ich meinen Analogwert einfach in ein MW schreiben?

Sorry, dass ich so Begriffstutzig bin.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die datei findest du unter SPS/Tools/S7_Analogwert_Normieren.xls

nehmen wir mal an, du hast eine druckdose von 600bar (PEW256)
dann liefert dir dein pew 27648 einheiten. (das liefern alle s7 analogbaugruppen als maxwert)
diese gilt es zu normieren.

1. mit der fc105
dort gibst du unter HI_LIM 600 und bei LO_LIM 0 ein
aus dem OUT kommt nun ein wert zwischen 0 und 600 (als realzahl; also mit kommastellen)
am IN erwartet die fc auch einen wert vom typ real.
deshalb kannst du nicht direkt das pew nehmen, sondern musst diese erst in real wandeln
L PEW 256
ITD
DTR
T MD 100 //dieses könntest du als IN verwenden

oder einfacher dreisatz
27648 <=> 600 bar
=> 27648 : 600 = 46,08

2. dir reicht es mit geraden zahlen zu rechnen . in diesem fall 46. das wäre ein rundungsfehler von 0,174 %
L PEW 256
L 46
:I
T MW 104 //dein Istwert in bar

3. du willst es genauer. also nehmen wir real (32bit).
L PEW 256
IDT // in dint wandeln
DTR // in real wandeln
L 46.08
:R
T MD 104 //dein istwert in bar mit nachkommastellen
 
Zuletzt bearbeitet:
Zurück
Oben