S7 <-> Dynavert T05, Drehzahl

testuser

Level-2
Beiträge
139
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
guten morgen,

ich habe zur zeit ein projekt mit loher-antrieben dynavert t05, diese sind über profibus mit der sps (s7-317 2dp/pn) verbunden. die kommunikation funktioniert auch und die motoren lassen sich sauber ansteuern (dreht richtig los, fährt an gewünschter rampe runter). jetzt soll aber auch noch die drehzahl vorgegeben werden. diese wird über ein poti (+/-10V, es werden aber die +10V verwendet) eingestellt. allerdings kann man den antrieben nur eine eine maximale drehzahl von 4000hex zuweisen, das bit 2^15 beeinflußt die drehrichtung. dies möchte ich nicht, da die drehrichtung bereits über das steuerwort dem antrieb mitgeteilt wird.

Code:
Netzwerk x
Kommentar: einlesen des Potiwertes
      U     "Log1"
      =     L      0.0
      BLD   103
      CALL  "SCALE"
       IN     :=PEW162
       HI_LIM :=1.000000e+002
       LO_LIM :=-1.000000e+002
       BIPOLAR:=L0.0
       RET_VAL:=MW106
       OUT    :=MD154
      NOP   0

Netzwerk x+1
Kommentar: wandeln in mw
      L     MD   154
      T     MW   182
      NOP   0
wie kann ich vermeiden, dass die werte größer als 4000hex werden? stehe ein bisschen auf dem schlauch.
 
Den Eingangswert mit 4000Hex vergleichen und wenn er höher ist eben nur die 4000 Hex übergeben.

Oder hab ich da jetzt was falsch verstanden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das hatte ich mir auch schon überlegt, denke aber es geht dann eine ganze menge verloren. mir wurde erklärt die 4000hex sind die max drehzahl (entsprechen 100%) und wenn ich die jetzt da einfach "abschneide" läuft er zu viel mit 100% und der poti ist im oberen bereich sinnbefreit :)confused:).

ich denke eher an sowas, zu sagen der potiwert kann maximal FFFFhex sein und dies entspricht 4000hex, als drehzahl für den antrieb. und das dann mit dem eingelesen wert (X) zu multiplizieren. also (4000h/FFFFh)*X = drehzahl für den antrieb. dies funtktioniert aber nicht so, wie ich es mir denke/vorstelle.
 
Dann solltest du dir einen eigenen SCALE schreiben.

Es gibt allgemeine Berechnungsformeln für Ein und Ausgangsnormierung.

Für Eingang:

REAW=((OGRNB-UGRNB) : (OGREB-UGREB))*(AE-UGREB)+UGRNB

AE: Digitalisierter Analogeingabewert
OGREB: Obergrenze Eingangsnennbereich
UGREB: Untergrenze Eingangsnennbereich
OGRNB: Obergrenze Normierungsbereich
UGRNB: Untergrenze Normierungsbereich
REAW: Normierter Analogeingabewert

Für Ausgang:

AA=((OGRAB-UGRAB) : (OGRNB-UGRNB))*(RAEW-UGRNB)+UGRAB

RAEW: Interner normierter Ausgabewert
OGRNB: Obergrenze Normierungsbereich
UGRNB: Untergrenze Normierungsbereich
OGRAB: Obergrenze Ausgangsnennbereich
UGRAB: Untergrenze Ausgangsnennbereich
AA: Digitaler Ausgabewert für Analogausgabebaugruppe
 
also so (?):

Code:
//dint zu int
      L     #AE
      T     #H_AE

//berechnung normierungsbereich
      L     #OGRNB
      L     #UGRNB
      -I    
      T     #NB

//berechnung eingangsbereich
      L     #OGREB
      L     #UGREB
      -I    
      T     #EB

//bilden der summe
      L     #AE
      L     #UGREB
      -I    
      L     #UGREB
      +I    
      T     #SUM

//berechnen der multiplikation
      L     #NB
      L     #EB
      /I    
      L     #SUM
      *I    
      T     #REAW
habe mir das jetzt als fb geschrieben. der baustein aufruf würde dann so aussehen (?):

Code:
      CALL  "SCALE_TU" , DB15
       OGRNB:=MW184//hier steht W#16#4000 drin
       UGRNB:=0
       OGREB:=100
       UGREB:=-100
       AE   :=PEW160
       REAW :=MW180
      NOP   0
könnte das funktionieren???
 
also so (?):

Code:
//dint zu int
      L     #AE
      T     #H_AE
 
//berechnung normierungsbereich
      L     #OGRNB
      L     #UGRNB
      -I    
      T     #NB
 
//berechnung eingangsbereich
      L     #OGREB
      L     #UGREB
      -I    
      T     #EB
 
//bilden der summe
      L     #AE
      L     #UGREB
      -I    
      [COLOR=red]L     #UGREB    hier weg[/COLOR]
[COLOR=red]      +I    [/COLOR]
      T     #SUM
 
//berechnen der multiplikation
      L     #NB
      L     #EB
      /I    
      L     #SUM
      *I 
[COLOR=#ff0000]      L     #UGREB    hier hin[/COLOR]
[COLOR=#ff0000]      +I    [/COLOR]
      T     #REAW
habe mir das jetzt als fb geschrieben. der baustein aufruf würde dann so aussehen (?):

Code:
      CALL  "SCALE_TU" , DB15
       OGRNB:=MW184//hier steht W#16#4000 drin
       UGRNB:=0
       OGREB:=100
       UGREB:=-100
       AE   :=PEW160
       REAW :=MW180
      NOP   0
könnte das funktionieren???

Vorsicht, Punkt vor Strich und Klammern beachten.
 
habe jetzt nochmal mit einem arbeitskollegen drüber gesprochen und der meinte es geht auch anders.

der wertebereich geht zur zeit von 0..65535 und ich will ihn in einen bereich von 0..16384 bringen. also meinte er, es reicht wenn ich den eingelesenen wert durch vier teile. rein theoretisch müsste es gehen, aber in der praxis?

und noch eine frage @Steve81: was meinst du mit ROUND, habe diesen befehl nicht in awl?
 
Zurück
Oben