lib/bcd_to_int.txt
changeset 0 fb772792efd1
equal deleted inserted replaced
-1:000000000000 0:fb772792efd1
       
     1 (*
       
     2  * (c) 2003 Mario de Sousa
       
     3  *
       
     4  * Offered to the public under the terms of the GNU General Public License
       
     5  * as published by the Free Software Foundation; either version 2 of the
       
     6  * License, or (at your option) any later version.
       
     7  *
       
     8  * This program is distributed in the hope that it will be useful, but
       
     9  * WITHOUT ANY WARRANTY; without even the implied warranty of
       
    10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
       
    11  * Public License for more details.
       
    12  *
       
    13  * This code is made available on the understanding that it will not be
       
    14  * used in safety-critical situations without a full and competent review.
       
    15  *)
       
    16 
       
    17 (*
       
    18  * An IEC 61131-3 IL and ST compiler.
       
    19  *
       
    20  * Based on the
       
    21  * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
       
    22  *
       
    23  *)
       
    24 
       
    25 (*
       
    26  * This is part of the library conatining the functions
       
    27  * and function blocks defined in the standard.
       
    28  *
       
    29  * Conversion from BCD
       
    30  * -------------------
       
    31  *)
       
    32 
       
    33 
       
    34 
       
    35 FUNCTION BYTE_BCD_TO_USINT: USINT
       
    36   VAR_INPUT
       
    37     BCD : BYTE;
       
    38   END_VAR
       
    39 
       
    40   BYTE_BCD_TO_USINT := BCD MOD 16;
       
    41   BCD := BCD / 16;
       
    42   BYTE_BCD_TO_USINT := BYTE_BCD_TO_USINT + 10*BCD;
       
    43 END_FUNCTION
       
    44 
       
    45 
       
    46 
       
    47 
       
    48 FUNCTION WORD_BCD_TO_UINT: UINT
       
    49   VAR_INPUT
       
    50     BCD : WORD;
       
    51   END_VAR
       
    52 
       
    53   WORD_BCD_TO_UINT := BCD MOD 16;
       
    54   BCD := BCD / 16;
       
    55   WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 10*(BCD MOD 16);
       
    56   BCD := BCD / 16;
       
    57   WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 100*(BCD MOD 16);
       
    58   BCD := BCD / 16;
       
    59   WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 1000*BCD;
       
    60 END_FUNCTION
       
    61 
       
    62 
       
    63 
       
    64 
       
    65 FUNCTION DWORD_BCD_TO_UDINT: UDINT
       
    66   VAR_INPUT
       
    67     BCD : DWORD;
       
    68   END_VAR
       
    69 
       
    70   DWORD_BCD_TO_UDINT := BCD MOD 16;
       
    71   BCD := BCD / 16;
       
    72   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 10*(BCD MOD 16);
       
    73   BCD := BCD / 16;
       
    74   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 100*(BCD MOD 16);
       
    75   BCD := BCD / 16;
       
    76   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1000*(BCD MOD 16);
       
    77   BCD := BCD / 16;
       
    78   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1_0000*(BCD MOD 16);
       
    79   BCD := BCD / 16;
       
    80   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 10_0000*(BCD MOD 16);
       
    81   BCD := BCD / 16;
       
    82   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 100_0000*(BCD MOD 16);
       
    83   BCD := BCD / 16;
       
    84   DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1000_0000*BCD;
       
    85 END_FUNCTION
       
    86 
       
    87 
       
    88 
       
    89 
       
    90 FUNCTION LWORD_BCD_TO_ULINT: ULINT
       
    91   VAR_INPUT
       
    92     BCD : LWORD;
       
    93   END_VAR
       
    94 
       
    95   LWORD_BCD_TO_ULINT := DWORD_BCD_TO_UDINT(BCD MOD (256*256*256*256));
       
    96   BCD := BCD / (256*256*256*256);
       
    97   LWORD_BCD_TO_ULINT := LWORD_BCD_TO_ULINT + 1_0000_0000*DWORD_BCD_TO_UDINT(BCD);
       
    98 END_FUNCTION