Skip to content

Instantly share code, notes, and snippets.

@hehu80
Last active August 1, 2021 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hehu80/487839008eb56b474aabfa33171c3075 to your computer and use it in GitHub Desktop.
Save hehu80/487839008eb56b474aabfa33171c3075 to your computer and use it in GitHub Desktop.
Siemens S7 function block to convert floating point into ASCII char array
FUNCTION "FC_REAL_ASCII" : VOID
TITLE =Conversion REAL -> ASCII Digits with leading zeros
{ S7_language := '7(1) Deutsch (Deutschland) 07.04.2018 15:45:30' }
AUTHOR : Henning Voss
FAMILY : Tools
NAME : Tools
VERSION : 1.0
VAR_INPUT
Number_of_Digits : INT ;
Number_of_Characters : INT ;
Value : REAL ;
Text : ANY ;
END_VAR
VAR_TEMP
Value_DInt : DINT ;
Value_Int : INT ;
Value_Real : REAL ;
Count : INT ;
Number_of_DB : WORD ;
Adr_First_Character : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE = Convert Real to DInt
L #Number_of_Digits;
L 0;
<=I ;
BEC ;
L #Number_of_Characters;
L 0;
<=I ;
BEC ;
L #Number_of_Characters;
L #Number_of_Digits;
<=I ;
BEC ;
L #Number_of_Digits;
DTR ;
L 2.302585e+000;
*R ;
EXP ;
T #Value_Real;
L #Value;
ABS ;
L #Value_Real;
*R ;
RND ;
T #Value_DInt;
NETWORK
TITLE = Convert DInt to ASCII
L P##Text;
LAR1 ;
// check address
L D [AR1,P#6.0];
T #Adr_First_Character;
// check if DB source
L B [AR1,P#6.0];
L W#16#84;
==I ;
JCN nodb;
L W [AR1,P#4.0];
T #Number_of_DB;
OPN DB [#Number_of_DB];
nodb: L #Number_of_Characters;
SLD 3;
L #Adr_First_Character;
+D ;
T #Adr_First_Character;
L #Number_of_Characters;
loop: T #Count;
L #Adr_First_Character;
L P#1.0;
-D ;
T #Adr_First_Character;
LAR1 #Adr_First_Character;
L #Value_DInt;
L 10;
MOD ;
L '0';
+D ;
T B [AR1,P#0.0];
L #Value_DInt;
L 10;
/D ;
T #Value_DInt;
L #Count;
LOOP loop;
END_FUNCTION
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment