正确使用S7 您所在的位置:网站首页 s7-200模拟量输出模块 正确使用S7

正确使用S7

2023-05-05 01:05| 来源: 网络整理| 查看: 265

之前我曾写过一篇文章介绍西门子S7-200 SMART的模拟量指令库《S7-200 SMART怎样添加和使用模拟量指令库?》。今天这篇文章,结合我近期测试国产模拟量输出模块的实际经验,跟大家分享下该指令库使用过程中要注意的几个问题。本文主要包括如下几个主题:

模拟量指令S_RTR和S_RTI的区别怎样将实数转换为无符号整数?

1、模拟量指令S_RTR和S_RTI的区别

指令S_RTR和S_RTI通常都是用来处理模拟量输出。名称中的"S"是"Scale"的缩写,表示"量程";"R"是"Real"的缩写,表示"实数";"T"是"To"的缩写,表示转换;"I"是"Integer"的缩写,表示"整数"。因此,从名称可以看出,S_RTR指令是把实数转换成实数,S_RTI指令是把实数转换成整数,通常情况下我使用的是S_RTI指令。

比如西门子 ET200 SP的模拟量输出模块AQ 2xI ST,它能输出4~20mA的电压信号,其对应的输出整数的范围为0~27648。对于这样的模块信号转换,我们只需要输入工程值和转换值即可。举个例子,某工程值速度信号的范围为0.0~100.0 cm/min,其实际速度存放在VD100(actualSpeed)中,要求将实际速度转换成相应的电流信号进行输出,可以使用下面的代码:

有些模拟量输出模块(比如我测试的这个国产模块),它的输出信号也是4~20mA,但是其对应的整数范围是0~65535。这种情况下,如果我们还是用这个公式,将"OSH"改成65535,就会出问题,如下图:

"S_RTI"指令中"OSH"和"OSL"都是"16位有符号整数",其取值范围为-32768~+32767。65535超出了其取值范围,因此会产生溢出错误,我们进入其内部代码可以看的更清楚,如下图所示:

这种情况下,我们应该使用"S_RTR"指令,它的量程范围均为实数,如下图所示:

不过"S_RTR"指令转换的输出值为实数,而我们需要写入的模拟量输出地址为无符号整数类型,比如QW130,怎么把实数转换成无符号整数呢?

2、怎样将实数转换为无符号整数

首先,我们可以使用Round指令将实数转换成近似的双整数。接下来就是问题的关键:怎样把双整数转换成无符号整数?

如果我们直接使用系统提供的指令"DI_I"会出现错误,因为这个双整数超出了有符号整数的范围。我找了半天,没有发现能直接进行转换的指令。于是自己写了一个函数(子程序)来实现这个功能。

打开STEP 7 Micro-WIN/SMART,在程序块中添加子程序,名称为Conv_DI2W,在其变量表中声明变量如下图所示:

在代码区编写代码如下:

在主程序中调用子程序Conv_DI2W,为其参数赋值即可,如下图所示:

好了,关于S7-200 SMART模拟量输出指令使用时注意问题就先介绍到这里。如果你想学习S7-200 SMART PLC ,可以看看我的书《西门子S7-200 SMART PLC应用技术》:

如果你有专业问题需要咨询,欢迎点击下面的链接:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有