默认情况下,STEP 7-Micro/WINSMART没有集成模拟量处理的指令,我们需要自己编写量程转换的子程序才能完成模拟量的处理。这种量程转换的原理可以看看我之前写的文章(怎样将模拟量的信号值转换成工程量值?)。今天这篇文章,我想告诉大家一种相对简单的模拟量处理方式——使用Scale指令库。
Scale指令库其实也是西门子内部人员编写的,但不是官方正式发布的。我觉的这个指令库还是蛮方便的,值得推荐给大家使用。下面我们分两个步骤介绍:1)怎样添加Scale指令库?2)怎样使用里面的指令?
1、怎样添加Scale指令库?
需要下载Scale指令库。从哪里下载呢?可以到西门子的网站上搜索,文章的末尾提供下载的方法。
下载好后,将其放在一个指定的文件夹中。打开STEP 7-Micro/WIN SMART,单击【工具】菜单的【选项】按钮,在弹出的对话框中,单击【项目】,你会看到一个用户库文件夹路径的设置,其默认路径如下图:
你可以将下载的Scale指令拷贝到这个文件夹中,也可以单击【浏览】将用户库文件夹指定到你当前存放的路径,单击【确定】后,就可以在【指令】-【库】中看到你新添加的scale指令。
下面这张图是我添加用户指令库前后的对比(当然,除了Scale还添加了一些其它指令库):
2、怎样使用Scale指令库
Scale指令库(v1.2)中有三条指令:S_ITR、S_RTR、S_RTI。名称中的"S"代表"Scale",表示"量程";"I"代表"Integer",即"整数";"R"代表"Real",即"实数";"T"代表"To",即"转换"的意思;
这样就很好理解了,比如:S_ITR,就表示 Scale ,integer to real,也就是整数到实数的量程转换;而S_RTI,就表示,Scale,real tointeger,也就是实数到整数的量程转换;S_RTR,就表示,Scale,real toreal,也就是实数到实数的量程转换;
下面来具体看一下:
2.1、S_ITR
该指令可以处理模拟量输入信号,并转换成相应的工程值,其初始添加到程序块中的状态如下图所示:
该指令有6个输入参数和1个输出参数,含义如下:
EN:布尔值,指令使能;
Input:整数,要转换的变量;
ISH:Input Scaled High,整数,输入量程的上限;
ISL:Input Scaled Low,整数,输入量程的下限;
OSH:Output Scaled High,实数,输出量程的上限;
OSL:Output Scaled Low,实数,输出量程的下限;
Output:实数,转换后的变量;
举例说明:
假设模拟量输入模块连接的外部压力传感器,输入信号为0~20mA的电流信号,压力的范围为0~10000mbar,输入通道的地址为:AIW16,转换后数据存放在VD0中,则代码如下:
如果压力传感器的信号为4~20mA,则需要把ISL的值改为5530,代码如下:
2.2、S_RTI
该指令可以将工程值转换成模拟量值进行输出,其初始添加到程序块中的状态如下:
该指令有6个输入参数和1个输出参数,含义如下:
EN:布尔值,指令使能;
Input:实数,要转换的变量;
ISH:Input Scaled High,实数,输入量程的上限;
ISL:Input Scaled Low,实数,输入量程的下限;
OSH:Output Scaled High,整数,输出量程的上限;
OSL:Output Scaled Low,整数,输出量程的下限;
Output:整数,转换后的变量;
举例说明:
假设使用4~20mA的模拟量输出信号控制比例阀的输出压力,其输出量程范围为:0~6000mbar,输出通道的地址为AQW32,输出压力设定值存放在VD4,则代码如下:
假设输出±10V的电压信号用于速度控制,正值表示正转,负值表示反转,转速juedui值的范围为:0~3000r/min,输出通道AQW34,输出设定值VD8,则代码如下:
2.3、S_RTR
该指令可以进行实数与实数的量程转换,它的输入参数和输出参数都是实数;
举个例子:
我们在实例1中获取了一个压力值放在VD0(pressureValue),它是范围为0~10000mbar的数值,我们想把当前压力值以其量程的百分数表示出来,转换值存放在VD12(pressurePercentage)中,就可以使用如下的代码:
好了,这就是Scale指令库的指令介绍,主要用于模拟量信号的处理。