龙空技术网

SCL编程语言学习(3.2)-NORM_X和SCALE_X指令详解

MetalXI 323

前言:

目前朋友们对“scl语言指令常用有多少个”大概比较关心,各位老铁们都想要剖析一些“scl语言指令常用有多少个”的相关文章。那么小编在网上网罗了一些有关“scl语言指令常用有多少个””的相关文章,希望兄弟们能喜欢,兄弟们一起来了解一下吧!

一开始学习SCL语言,最让人困惑的就是调用的指令太多,同时每个指令的使用都有明确且严格的规范,使用不当就容易出错,在文章SCL编程语言学习(3)-通过模拟量控制气缸升起和下降 中讲到NORM_X和SCALE_X两个指令就是一个典型例子。要想系统地理解这两个指令的来龙去脉,就需要对PLC的原理和模拟量输入输出的实现过程有深入地了解。

PLC是Programmable Logic Controller的简称,中文称之为可编程逻辑控制器。其底层结构类似于我们的个人电脑PC,也可以把它理解为专门为在工业环境下应用而设计的PC,其存储和运算只识别0和1(电路中的低电平和高电平),也被称为数字逻辑控制器,也就是说PLC自身只能识别数字量,那么PLC如何存储和运算在一定范围内连续的量呢?这就需要一定的转换,这种转换的过程就是外部设备、模拟量模块、NORM_X和SCALE_X共同实现的。

外部设备在与PLC之间输入输出信号过程中,以电流和电压信号为主,比如K型热电偶测温0~1300℃,其给PLC的模拟量模块的信号是4~20mA,0~1300℃和4~20mA的对应关系是源于外部设备自身的特性,PLC自身并不能识别这种对应关系。

对于PLC的模拟量输入模块,其只识别诸如4~20mA的电流信号,这个范围内连续的量,需要在模拟量模块中进行“分割”,也就是电压/电流的模数转换,把采集到的电压/电流信号转换成数字信号,我们在程序中要做的是对数字信号的处理。比如我常用的西门子AI 8xU/I/RTD/TC ST模拟量模块,它将4~20mA的电流信号切割为0~27648的整数,你可以理解为一段连续的曲线与一个由点组成的轨迹,这个轨迹的点足够的多,那么这个轨迹就可以与连续的曲线作近似的拟合,这种拟合的精度足够高,能够满足我们的控制要求。

但是在我们监控屏幕上,我们还是想直观地显示温度值,而不是0~27648中间的某一个值,不然我们需要把出现的每一个0~27648范围内的值与0~1300℃范围内的值进行换算,这种工作对于我们来说难以实现的,但是对于PLC来说,就轻松的多,只需要NORM_X和SCALE_X这两个指令,配合一定的过程变量,就可以轻松地实现。

下面对实现过程和指令的使用分析(参照图1所示)。

图1 SCL程序

首先使用NORM_X标准化指令(图1中的程序第23行),NORM是normalization的缩写,它将0~27648的值映射到线性标尺对其进行标准化,标准化后的浮点数Real值都在[0,1]的闭区间内,其标准化的公式可理解为OUT=(X-Xmin)/(Xmax-Xmin),程序中MIN就对应Xmin,MAX对应Xmax,公式中的X就是0~27648之间的变量。参数 MIN (最小值)和 MAX(最大值)就是对用0和27648。输出OUT中的结果经过计算并存储为浮点数。

如果标准化的值等于输入 MIN 中的值,则输出 OUT 将返回值“0.0”。如果要标准化的值等于输入 MAX 的值,则输出 OUT 需返回值“1.0”。理解过程参照图2所示。这一步的最大作用是提高后续计算的精度(浮点数的运算要比整数的运算的精度要高)。

图2 NORM_X标准化指令

然后使用SCALE_X缩放指令(图1中的程序第24行)。通过将输入NORM_temperatrue 的值映射到指定的值范围内以缩放该值。这个范围就是由参数 MIN (最小值)和 MAX(最大值) 定义的值范围。此处对应的就是实际设备的温度范围0~1300℃,缩放结果为整数,存储在show_temperatrue(既可以是整数Int也可以是浮点数Real)中。在屏幕上,我们可以调用show_temperatrue这个变量,来直接显示温度值。理解过程参照图3所示。

图3 SCALE_X缩放指令

其实这两段程序的作用就是讲采集到数字量信号做了一次还原,使其在PLC中再次显出设备上连续变化量的“原貌”,让我们直观的去观察、监测。如果说我不需要观察,只是把输入量AI_temperatrue作为其他控制过程的中间量,也可以不转换,直接用这个输入量的值也是可以的,也就不需要调用这个两个指令了。

模拟量输出调用这两个指令的顺序相同,也是先把要输出的量进行NORM_X标准化,然后SCALE_X缩放,文章SCL编程语言学习(3)-通过模拟量控制气缸升起和下降 中就是模拟量输出的示例。

标签: #scl语言指令常用有多少个