(* * (c) 2003 Mario de Sousa * * Offered to the public under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * This code is made available on the understanding that it will not be * used in safety-critical situations without a full and competent review. *) (* * An IEC 61131-3 IL and ST compiler. * * Based on the * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10) * *) (* * This is part of the library conatining the functions * and function blocks defined in the standard. * * Conversion from BCD * ------------------- *) FUNCTION BYTE_BCD_TO_USINT: USINT VAR_INPUT BCD : BYTE; END_VAR BYTE_BCD_TO_USINT := BCD MOD 16; BCD := BCD / 16; BYTE_BCD_TO_USINT := BYTE_BCD_TO_USINT + 10*BCD; END_FUNCTION FUNCTION WORD_BCD_TO_UINT: UINT VAR_INPUT BCD : WORD; END_VAR WORD_BCD_TO_UINT := BCD MOD 16; BCD := BCD / 16; WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 10*(BCD MOD 16); BCD := BCD / 16; WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 100*(BCD MOD 16); BCD := BCD / 16; WORD_BCD_TO_UINT := WORD_BCD_TO_UINT + 1000*BCD; END_FUNCTION FUNCTION DWORD_BCD_TO_UDINT: UDINT VAR_INPUT BCD : DWORD; END_VAR DWORD_BCD_TO_UDINT := BCD MOD 16; BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 10*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 100*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1000*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1_0000*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 10_0000*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 100_0000*(BCD MOD 16); BCD := BCD / 16; DWORD_BCD_TO_UDINT := DWORD_BCD_TO_UDINT + 1000_0000*BCD; END_FUNCTION FUNCTION LWORD_BCD_TO_ULINT: ULINT VAR_INPUT BCD : LWORD; END_VAR LWORD_BCD_TO_ULINT := DWORD_BCD_TO_UDINT(BCD MOD (256*256*256*256)); BCD := BCD / (256*256*256*256); LWORD_BCD_TO_ULINT := LWORD_BCD_TO_ULINT + 1_0000_0000*DWORD_BCD_TO_UDINT(BCD); END_FUNCTION