Probleme mit dem Datentyp "Real"

Johannes F

Level-1
Beiträge
232
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo, habe ein kleines problem mit der verarbeitung von real bei einer siemens cpu. irgendwie bekomme ich real nicht richtig verrechnet. habe schon vieles versucht, mit wandeln von int in gleitpunktzahlen und zurück aber immer ohne richtigen erfolg.
habe unten mal aufgeführt was ich eigentlich vorhabe. hier habe ich alle wandlungen erstmal vernachlässigt um mein eigentliches vorgehen zu beschreiben. ich hoffe es versteht mich jemand und kann mit helfen.
:confused:

NW1
//hier wird 100 durch variable1 dividiert daraus folgt eine zahl in der größe von 0.5 …0.02

L Festwert [100]
L variable1 [int]
div
T variable2 [real]


NW2
//hier soll jede sec. zur variable4 solange die variable2 addiert werden bis das gerundete ergebnis von variable 4 gleich oder fast 100 ist. für den impuls werde ich den taktmerker nutzen.

L variable3 [int]
L Festwert [100]
Cmp <I
U M1sec
FP Hilfsmerker
L variable4 [real]
L variable2 [real]
add_R
T variable4 [real]


NW3
//hier wird die variable4 gerundet, variable3 wird als int benötigt für weitere verarbeitung

L variable 4
RND+
T variable3 [int]
 
Du musst bei Dein Typen "konstant" bleiben. Will heissen INT/INT=INT, in diesem Fall in NW1 = 0 weil Ergebnis < 1 ist. Wenn Du weißt, dass der Ergebnis immer (oder auch gelegentlich) < 1 wird, dann mußt Du Dein "100" und Dein Variable_1 vorher in REALs umwandeln und dann mit /R dividieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren

NW1
//hier wird 100 durch variable1 dividiert daraus folgt eine zahl in der größe von 0.5 …0.02

L Festwert [100]
L variable1 [int]
div
T variable2 [real]

DIV_I bringt dir hier immer ein ganzzahliges ergebnis, in deinem fall wohl immer eine null ... solltest also variable1 in REAL ausführen/wandeln und DIV_R durchführen ...
 
Laß doch alles auf Int, den Vergleicher auf 10000 statt 100 und am Ende:

Code:
L variable4
L 100
div
T Variable3
Muß im NW2 am Anfang nicht

Code:
L variable4
stehen?

PS: Natürlich im NW 2 dann alle Operationen für Int!
 
NW2
//hier soll jede sec. zur variable4 solange die variable2 addiert werden bis das gerundete ergebnis von variable 4 gleich oder fast 100 ist. für den impuls werde ich den taktmerker nutzen.

L variable3 [int]
L Festwert [100]
Cmp <I
U M1sec
FP Hilfsmerker
L variable4 [real]
L variable2 [real]
add_R
T variable4 [real]

Hier fehlen hier ein paar Klammern und ein Sprungbefehl:

Code:
      U(    
      L     MW    10                    // Variable 3 (INT)
      L     100                         // Festwert   (100)
      <=I   
      )     
      U(    
      U     M     20.0                  // M1sek
      FP    M     20.1                  // Hilfsmerker
      )     
      SPBN  M01
      L     MD    12                    // Variable 4 (REAL)
      L     MD    16                    // Variable 2 (REAL)
      +R    
      T     MD    12                    // Variable 4 (REAL)
M01:  NOP   0

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hatte gestern die awl zeilen nur als anhaltspunkte gepostet um einige neue anregungen zu bekommen.
ich hatte es in awl so gelöst aber es funktioniert nicht

NW1
U( //wandeln in REAL
L #Offset_Weckzeit_sec //DINT
DTR
T #Offset_Weckzeit_sec_Real //REAL
SET
SAVE
CLR
U BIE
)
SPBNB _M01
L 1.000000e+002
L #Offset_Weckzeit_sec_Real //REAL
/R
T #Dimmfaktor_Real //REAL
_M01: NOP 0


NW2
U #OUT_Alarm_Lichtwecker
U(
L #Dimmwert_Lichtwecker //INT
L 100
<I
)
U #IN_Hilfstakt_1s //BOOL
FP #FP_Hilfstakt //BOOL
SPBNB _M02
L #Dimmwert_Lichtw_Real //REAL
L #Dimmfaktor_Real //REAL
+R
T #Dimmwert_Lichtw_Real //REAL
_M02: NOP 0
//das funktioniert nicht so richtig, kann es mir aber nicht erklären


NW3
L #Dimmwert_Lichtw_Real //REAL
RND+
T #Dimmwert_Lichtwecker //INT
//hier gibt es probleme mit der wandlung und dem runden von REAL in INT
// "#Dimmwert_Lichtwecker" wird als int benötigt für weitere verarbeitung
 
Zuletzt bearbeitet:
FB oder FC? "FP_Hilfstakt" als TEMP, STAT oder INOUT? (gibts übrigens auch als fertige lösung zu kaufen: Philips HF 3461-01 Wakeup Light :) )
 
ja genau so ist es. nw1 sieht ganz gut aus. in nw2 wo dieser wert mit "#Dimmfaktor_Real" add und anschließend zurückgeschrieben wird, ist vermutlicht der wurm drin. wenn ich mir das online anschaue ist das für micht nicht begreifbar. die add funktioniert vermutlich nicht richtig.
 
kannste mal nen screenshot machen, damit wir uns mitwundern können? und evtl. ne quelle generieren und als txt hochladen...
 
ich glaube es kaum, habe eben nochmal mit der soft-sps das ganze versucht und da funzt es. morgen werde ich es nochmal mit einer richtigen cpu austesten ob es da auch noch geht. habe bei der soft-sps (v5.3+sp1) nur einige merkwürdige dinge mit den sfb3..5 ist das normal?
 
ich glaube es kaum, habe eben nochmal mit der soft-sps das ganze versucht und da funzt es. morgen werde ich es nochmal mit einer richtigen cpu austesten ob es da auch noch geht. habe bei der soft-sps (v5.3+sp1) nur einige merkwürdige dinge mit den sfb3..5 ist das normal?


Normal ist es bei Deiner Version von PLCSIM.
Es gibt einen Hotfix dafür, benutze die Forumssuche oder schau bei Siemens direkt nach.
 
Zurück
Oben