diff -r 000000000000 -r fb772792efd1 lib/time_math.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/time_math.txt Wed Jan 31 15:32:38 2007 +0100 @@ -0,0 +1,360 @@ +(* + * (c) 2005 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. + * + * Math functions on Time and Date data types. + * ------------------------------------------- + * + * We also include the two data type conversions defined in table 30 of the IEC 61131-3 standard (version + *) + + +(* NOTE: The IEC 61131-3 standard library includes overloaded functions, which are not + * allowed in user code. Since our compiler does not yet support overloaded functions, these + * are commented out in the following library for the moment... + *) + +(***************) +(* TIME + TIME *) +(***************) + +FUNCTION ADD : TIME + VAR_INPUT + IN1 : TIME; + IN2 : TIME; + END_VAR + + ADD := IN1 + IN2; +END_FUNCTION + + +FUNCTION ADD_TIME : TIME + VAR_INPUT + IN1 : TIME; + IN2 : TIME; + END_VAR + + ADD_TIME := IN1 + IN2; +END_FUNCTION + + +FUNCTION SUB : TIME + VAR_INPUT + IN1 : TIME; + IN2 : TIME; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_TIME : TIME + VAR_INPUT + IN1 : TIME; + IN2 : TIME; + END_VAR + + SUB_TIME := IN1 - IN2; +END_FUNCTION + + + +(**************) +(* TIME + TOD *) +(**************) + +FUNCTION ADD : TOD + VAR_INPUT + IN1 : TOD; + IN2 : TIME; + END_VAR + + ADD := IN1 + IN2; +END_FUNCTION + + +(* The following function is not defined in the standard, but its existance makes sense. *) +FUNCTION ADD : TOD + VAR_INPUT + IN1 : TIME; + IN2 : TOD; + END_VAR + + ADD := IN1 + IN2; +END_FUNCTION + + +FUNCTION ADD_TOD_TIME : TOD + VAR_INPUT + IN1 : TOD; + IN2 : TIME; + END_VAR + + ADD_TOD_TIME := IN1 + IN2; +END_FUNCTION + + +FUNCTION SUB : TOD + VAR_INPUT + IN1 : TOD; + IN2 : TIME; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_TOD_TIME : TOD + VAR_INPUT + IN1 : TOD; + IN2 : TIME; + END_VAR + + SUB_TOD_TIME := IN1 - IN2; +END_FUNCTION + + + +(*************) +(* TIME + DT *) +(*************) + +FUNCTION ADD : DT + VAR_INPUT + IN1 : DT; + IN2 : TIME; + END_VAR + + ADD := IN1 + IN2; +END_FUNCTION + + +(* The following function is not defined in the standard, but its existance makes sense. *) +FUNCTION ADD : DT + VAR_INPUT + IN1 : TIME; + IN2 : DT; + END_VAR + + ADD := IN1 + IN2; +END_FUNCTION + + +FUNCTION ADD_DT_TIME : DT + VAR_INPUT + IN1 : DT; + IN2 : TIME; + END_VAR + + ADD_DT_TIME := IN1 + IN2; +END_FUNCTION + + + +(***************) +(* DATE + DATE *) +(***************) + +FUNCTION SUB : TIME + VAR_INPUT + IN1 : DATE; + IN2 : DATE; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_DATE_DATE : TIME + VAR_INPUT + IN1 : DATE; + IN2 : DATE; + END_VAR + + SUB_DATE_DATE := IN1 - IN2; +END_FUNCTION + + + +(*************) +(* TOD + TOD *) +(*************) + +FUNCTION SUB : TIME + VAR_INPUT + IN1 : TOD; + IN2 : TOD; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_TOD_TOD : TIME + VAR_INPUT + IN1 : TOD; + IN2 : TOD; + END_VAR + + SUB_TOD_TOD := IN1 - IN2; +END_FUNCTION + + + +(*************) +(* TIME + DT *) +(*************) + +FUNCTION SUB : DT + VAR_INPUT + IN1 : DT; + IN2 : TIME; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_DT_TIME : DT + VAR_INPUT + IN1 : DT; + IN2 : TIME; + END_VAR + + SUB_DT_TIME := IN1 - IN2; +END_FUNCTION + + + +(***********) +(* DT + DT *) +(***********) + +FUNCTION SUB : TIME + VAR_INPUT + IN1 : DT; + IN2 : DT; + END_VAR + + SUB := IN1 - IN2; +END_FUNCTION + + +FUNCTION SUB_DT_DT : TIME + VAR_INPUT + IN1 : DT; + IN2 : DT; + END_VAR + + SUB_DT_DT := IN1 - IN2; +END_FUNCTION + + + +(******************) +(* TIME * ANY_NUM *) +(******************) + +FUNCTION MUL : TIME + VAR_INPUT + IN1 : TIME; + IN2 : LREAL; + END_VAR + + MUL := IN1 * IN2; +END_FUNCTION + + +FUNCTION MULTIME : TIME + VAR_INPUT + IN1 : TIME; + IN2 : LREAL; + END_VAR + + MULTIME := IN1 * IN2; +END_FUNCTION + + +FUNCTION DIV : TIME + VAR_INPUT + IN1 : TIME; + IN2 : LREAL; + END_VAR + + DIV := IN1 / IN2; +END_FUNCTION + + +FUNCTION DIVTIME : TIME + VAR_INPUT + IN1 : TIME; + IN2 : LREAL; + END_VAR + + DIVTIME := IN1 / IN2; +END_FUNCTION + + + +(*************) +(* DATE + DT *) +(*************) + +FUNCTION CONCAT_DATE_TOD : DT + VAR_INPUT + IN1 : DATE; + IN2 : TOD; + END_VAR + + CONCAT_DATE_TOD := IN1 + IN2; +END_FUNCTION + + + +(*************************) +(* Data Type Conversions *) +(*************************) + +FUNCTION DT_TO_DATE : DATE + VAR_INPUT + IN1 : DT; + END_VAR + + {DT_TO_DATE = IN1.__to_DATE();} +END_FUNCTION + + + +FUNCTION DT_TO_TOD : TOD + VAR_INPUT + IN1 : DT; + END_VAR + + {DT_TO_TOD = IN1.__to_TOD();} +END_FUNCTION + +