SCL Programmierung - Datentyp-Konvertierung

Dr.Crow

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe SPS`ler
ich habe ein Problem

ich habe 2 Eingänge
der 1. ist ein Merkerdoppelwort
der 2. ist ein 3-stelliger BCD-Wert

und diese beiden will ich Dividieren. also den 1. / 2.

und dieser werd soll dann als Real-Zahl ausgegeben werden.

ich versuche es schon ewig und bekomme es einfach nicht hin

Hoffe ihr könnt mir helfen
 
Hallo liebe SPS`ler
ich habe ein Problem

ich habe 2 Eingänge
der 1. ist ein Merkerdoppelwort
der 2. ist ein 3-stelliger BCD-Wert

und diese beiden will ich Dividieren. also den 1. / 2.

und dieser werd soll dann als Real-Zahl ausgegeben werden.

ich versuche es schon ewig und bekomme es einfach nicht hin

Hoffe ihr könnt mir helfen

Welches Format hat das Word? HEX, INT?

Unabhängig davon BCD in INT und dann in REAL Wandeln, dann das Word wie immer es auch aussieht in REAL wandeln.


Also dein Problem verstehe ich jetzt nicht. (Frei nach Guttenberg)


bike


P.S: Kostet das jetzt Praxisgebühr?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe SPS`ler
ich habe ein Problem

ich habe 2 Eingänge
der 1. ist ein Merkerdoppelwort
der 2. ist ein 3-stelliger BCD-Wert

und diese beiden will ich Dividieren. also den 1. / 2.

und dieser werd soll dann als Real-Zahl ausgegeben werden.

ich versuche es schon ewig und bekomme es einfach nicht hin

Hoffe ihr könnt mir helfen

1. In welchem Format liegt dein Merkerdoppelwort vor? (Real, DINT)
2. Der 3-stellige BCD_Wert ist ein Wort?
 
Entschuldigung =)

Erstmal danke:
habe jetzt durch eure Anmerkungen den Fehler gefunden.
ich hatte nicht richtig in meiner Symboltabelle die deklariert. bzw. nicht richtig zugeordnet ... da sucht man sich depp

habe jetzt aber die Funktion rausgefunden ... bin jetzt allerdings etwas verwirrt ... mache eine Umwandlung von DINT_TO_REAL die steht allerdings nicht in der Tabelle der Datentyp-Konvertierung drin (Hilfe Menü)?

aber wenn ich die mache (und nicht über meinen Umweg) funktioniert es!
könnt ihr mir sagen wieso die nicht darin steht?

@ bike ___Es tut mir sehr leid das ich nicht wirklich zu den Erfahrenen Benutzer zähle und mit scl umwandlungen kenn ich mich nicht aus (AWL ja)
aber danke für deine Hilfe =)

@ Dotzi___1. DINT
2. äöhh ja ein wort mit vorzeichen halt

@ Winnman__ Ja das denke ich mir auch^^ zeigt mir aber jedesmal fehler an^^

Gruß Crow:)
 
Keine IEC Bausteine benötigt !

Code:
FUNCTION FC_test : VOID

VAR_INPUT
    di_val1 : DINT ;
    bcd_val2 : DWORD ; // kein test für >999 !
END_VAR 

VAR_OUTPUT
    r_result : REAL ;
END_VAR 

r_result := DINT_TO_REAL(di_val1 / BCD_TO_DINT(bcd_val2)) ;

END_FUNCTION

Wenn nötig, kannst du eventuell ein test für BCD werte > 999 einfügen.
 
Wenn der BCD Wert nur ein Word füllen darf.

Code:
FUNCTION FC_test : VOID

VAR_INPUT
    di_val1 : DINT ;
    bcd_val2 : WORD ; // kein test für >999 !
END_VAR 

VAR_OUTPUT
    r_result : REAL ;
END_VAR 

r_result := DINT_TO_REAL(di_val1 / INT_TO_DINT(BCD_TO_INT(bcd_val2))) ;

END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FUNCTION FC_test : VOID
 
VAR_INPUT
    di_val1 : DINT ;
    bcd_val2 : WORD ; // kein test für >999 !
END_VAR 
 
VAR_OUTPUT
    r_result : REAL ;
END_VAR 
 
r_result := DINT_TO_REAL(di_val1 / INT_TO_DINT(BCD_TO_INT(bcd_val2))) ;
 
END_FUNCTION

Bist du sicher?
Würde sagen es muss so aussehen, ist aber nicht getestet:
Code:
FUNCTION FC_test : VOID
 
VAR_INPUT
    di_val1 : DINT ;
    bcd_val2 : WORD ; // kein test für >999 !
END_VAR 
 
VAR_OUTPUT
    r_result : REAL ;
END_VAR 
 
r_result := DINT_TO_REAL(di_val1) / DINT_TO_REAL(INT_TO_DINT(BCD_TO_INT(bcd_val2))) ;
 
END_FUNCTION
 
Ich habe es nur gemacht wie Dr. Crow es beschrieben hat.

und diese beiden will ich Dividieren. also den 1. / 2.
und dieser werd soll dann als Real-Zahl ausgegeben werden.

Aber du hast vermutlich recht. Er braucht vermutlich das die division mit fliess-komma genauigheit durchgeführt wird.
 
Zurück
Oben