SCL 转换函数以及数学函数(包括缩放) | 您所在的位置:网站首页 › 西门子smart浮点数转整数 › SCL 转换函数以及数学函数(包括缩放) |
一、数据类型转换 Portal的转换函数位于Portal的“基本指令/转换操作”目录下。由于SCL为强类型转换,不同类型的变量无法直接进行运算(个人觉得下几代软件会更改转换的相应操作),所以在实行不同类型的数据运算时,需要进行数据类型转换,将数据类型转换为一致之后,再进行数据运算。 SCL中大部分类型转换都是隐式转换,对于无法进行隐式转换的类型,软件在编译过程中会提示。在强制转换中,转换统一格式如下: 原数据类型_To_目标数据类型 也可以使用“CONVERT:转换值”对话框进行数据类型的转换,直接双击CONVERT 基本函数 函数名功能 例子 ROUND“取整”指令用于将输入 IN 的值取整为最接近的整数。 该指令将输入 IN 的值解释为浮点数,并将其转换为一个整数或浮点数。 如果输入值恰好是在一个偶数和一个奇数之间,则选择偶数。 "Tag_Result" := ROUND("Tag_Value"); CEIL 使用“浮点数向上取整”指令将值取整为最近接的整数。该指令将输入值解释为浮点数, 并将其转换为紧邻的较大整数。 函数值可以大于或等于输入值。 "Tag_Result1" := CEIL("Tag_Value"); "Tag_Result2" := CEIL_REAL("Tag_Value"); FLOOR使用“浮点数向下取整”指令将一个浮点数的值取整为紧邻的较小整数。 该指令将输入值解释为浮点数,并将其转换为紧邻的较小整数。 函数值可等于或小于输入值。 "Tag_Result1" := FLOOR("Tag_Value"); "Tag_Result2" := FLOOR_REAL("Tag_Value"); TRUNC截尾取整”指令用于直接从输入值中截取整数。该指令仅选择输入值的整数部分, 并将这一部分(不含小数位)作为函数值返回。 "Tag_Result1" := TRUNC("Tag_Value1"); "Tag_Result2" := TRUNC("Tag_Value2"+"Tag_Value3"); "Tag_Result3" := TRUNC_SINT("Tag_Value4"); 基本缩放与传统缩放 缩放函数:SCALE_X与SCALE 标准化:NORM_X 取消缩放:UNSCALE 注:SCALE与UNSCALE只支持1500 SCALE_X:缩放 数模转换中常用到缩放,缩放函数实际上就是一个线性映射的过程 官方的解释如下: 使用“缩放”指令将浮点数映射到指定的取值范围来进行缩放。可使用 MIN 和 MAX 参数指定取值范围。缩放的结果为整数。 具体计算公式如下:OUT = [VALUE ∗ (MAX – MIN)] + MIN 这个过程实际上非常简单,拿个最简单的例子,生产一把1M的尺子,标刻度的过程就是先取1米的长度,然后10等分,得到dm,然后每段10等分得到cm,再10等分就有mm。 对于线性变换的量来说就是一个等分加映射的过程。 如果需要在SCALE_X中更改结果的数据类型,在其后加“_数据类型”即可。 具体示例如下: "Tag_Result1" := SCALE_X(MIN := "Tag_Value1", VALUE := "Tag_Real", MAX := "Tag_Value2"); "Tag_Result2" := SCALE_X_REAL(MIN := "Tag_Value1", VALUE := "Tag_Real", MAX := "Tag_Value2"); 其结果如下: 变量 计算结果 Tag_Real 0.5Tag_Value1 10Tag_Value2 30Tag_Result1 20Tag_Result2 20.0NORM_X 标准化过程 可以使用“标准化”指令,通过将输入 VALUE 中变量的值映射到线性标尺对其进行标准化。可以使用参数 MIN 和 MAX 定义(应用于该标尺的)值范围的限值。输出 OUT 中的结果经过计算并存储为浮点数,这取决于要标准化的值在该值范围中的位置。如果要标准化的值等于输入 MIN 中的值,则该指令将返回结果“0.0”。如果要标准化的值等于输入 MAX 中的值,则该指令将返回结果“1.0”。 由缩放函数,相对应就会有标准化函数,缩放相当于量的初转换,要想得到能够使用的量,一般要使用标准换转换 “标准化”指令通过以下公式进行计算: OUT = (VALUE – MIN) / (MAX – MIN) 示例如下: "Tag_Result1" := NORM_X(MIN := "Tag_Value1", VALUE := "Tag_InputValue", MAX := "Tag_Value2"); "Tag_Result2" := NORM_X_LREAL(MIN := "Tag_Value1", VALUE := "Tag_InputValue", MAX := "Tag_Value2"); 运算结果如下: 变量结果Tag_InputValue 20Tag_Value1 10Tag_Value2 30Tag_Result1 0.5Tag_Result2 0.5SCALE:缩放 数模转换在后期的文章会单出一篇,所以在此只列出SCALE函数 可以使用“缩放”指令将参数 IN 上的整数转换为浮点数,该浮点数在介于上下限值之间的物理单位内进行缩放。通过参数 LO_LIM 和 HI_LIM 来指定缩放输入值取值范围的下限和上限。指令的结果在参数 OUT 中输出。 “缩放”指令将按以下公式进行计算: OUT = [((FLOAT (IN) – K1)/(K2–K1)) ∗ (HI_LIM–LO_LIM)] + LO_LIM 常数“K1”和“K2”的值取决于参数 BIPOLAR 的信号状态。参数 BIPOLAR 可能的信号状态为: 信号状态“1”:假设参数 IN 的值为双极性且取值范围是 -27648 到 27648。此时,常数“K1”的值为 -27648.0,而常数“K2”的值为 +27648.0。 信号状态“0”:假设参数 IN 的值为单极性且取值范围是 0 到 27648。此时,常数“K1”的值为 0.0,而常数“K2”的值为 +27648.0。 如果参数 IN 的值大于常数“K2”的值,则将指令的结果设置为上限值 (HI_LIM) 并输出一个错误。 如果参数 IN 的值小于常数“K1”的值,则将指令的结果设置为下限值 (LO_LIM) 并输出一个错误。 如果指定的下限值大于上限值 (LO_LIM > HI_LIM),则结果将对输入值进行反向缩放。 二、数学函数 函数名功能示例ABS使用“计算绝对值”指令可计算输入值的绝对值,并将结果保存到指定的操作数中。"Tag_Result1" := ABS("Tag_Value"); "Tag_Result2" := ABS("Tag_Value1"*"Tag_Value2"); MIN使用“获取最小值”指令比较可用输入的值,并将最小的值作为结果返回。 在该指令处,最少需要指定 2 个输入,最多可以指定 32 个输入。 如果满足以下任何条件,则结果值无效: 在执行该指令的过程中,后台转换数据类型失败。 浮点数的值无效。 "Tag_Result" := MIN(IN1 := "Tag_Value1", IN2 := "Tag_Value2", IN3 := "Tag_Value3"); MAX使用“获取最大值”指令,比较输入值,并将最大的值作为结果返回。 在该指令处,最少需要指定 2 个输入,最多可以指定 32 个输入。 如果满足以下任何条件,则结果值无效: 在执行该指令的过程中,后台转换数据类型失败。 浮点数的值无效。 "Tag_Result" := MAX(IN1 := "Tag_Value1", IN2 := "Tag_Value2", IN3 := "Tag_Value3"); LIMIT 可使用“设置限值”指令,将参数 IN 的值限制在参数 MN 和 MX 值之间。参数 MN 的值不能大于参数 MX 的值。 如果参数 IN 的值满足条件 MN |
CopyRight 2018-2019 实验室设备网 版权所有 |