本文使用工贝SR30XP CPU作为基准,一款自带模拟量西门子风格的PLC,编程软件使用STEP 7-MicroWIN SMART V2.8(以下简称V2.8)。

开篇废话

这次单位竞赛涉及到PLC模拟信号的使用,正好写一下学习过程和精华知识。

一般学PLC都是从数字量开始,也就是0和1。(嘿嘿,计算机是妥妥的二极管捏)😒

也可以说成断开和导通、没电和有电、假和真这种形容类型的称呼。

模拟量是在一定范围内连续变化的量。

但计算机是个直男,它不能处理这种抽象的东西,至少底层不能。

并且在信号传输的过程中数字量有着天生的优势,不易受干扰,更容易与其他的数字设备配合。

这里直接上干货,理论在下面。

模拟量使用

处理模拟量的主要逻辑,就是将模拟量的曲线,根据不同的精度,切分成一个个区间,每个区间对应一个数字,从而转化成计算机可以理解的二进制数。

在实际编程中,西门子提供了三种指令:

  1. S_ITR 输入转Real值,用来读取模拟量数据

  2. S_RTR Real值转Real值,用来等比例转换浮点数的量程

  3. S_RTI Real值转输出,根据Real的值输出模拟量

电气连接

查看说明书可以发现,SR30XP模拟量输入有四个通道,但不是连续的。在程序中写指令的时候也要按照对应的通道填写地址。

输入接线时要注意传感器的正负极、二和三线制接线的不同点,并且注意公共端的电平与传感器正极的电平为同一电源,否则可能出现电平不一致损坏元器件的可能性。并且在PLC主机拓展接口附近有一个0-20mA与0-10V拨码口,注意调整拨码和使用的模拟信号类型一致。

输出接线时注意它是两组输出,每组输出各有一个电流和电压类型信号输出。

输入端接线

输出端接线

PLC指令

下面给出V2.8中的介绍:

具体操作

现在看一个示例:

上面的介绍使用了一个公式:OUT = [(OSH - OSL) * (IN - ISL)/(ISH - ISL)] + OSL

按照下面的例子来列出公式就是 [(100 - 0) * (350 - 100)/(500 - 100)] + 0 = 62.5

这是一个按照比例来转换数据的指令组合。

其中IN位置是AIW6,这里在使用时填入实际的输入地址位,在其他的两个指令中也是一样填入输入地址或者是变量存储器。

ISH和ISL是输入数据的高限和低限OSH和OSL是输出数据的高限和低限,也可以说是输出电平或者电流的高限和低限。

还需要注意的一点是实际使用中4-20mA量程对应的模拟量输入输出量程是5530-27648,0-20mA和0-10V对应0-27648。至于为什么,下面会有解释。

数字和模拟概念介绍(不看理论建议跳过)

专业名词:

  1. Real:32位浮点数,,范围是+1.175495E-38 至 +3.402823E+38、-1.175495E-38 至 -3.402823E+38、±0.0(在v2.8帮助手册中未指明±0.0,故根据V14手册编写)

A/D转换器

所以出现了A/D转换器(Analog-to-digital converter),可以使模拟信号转换到数字信号的装置。

那么第一个问题:精度(分辨率),模拟信号转换成数字,看上去就会有损失。就像是公园里的滑梯换成了小台阶一样,听上去就费屁股,从这个比喻可以看出模拟量有着天生的精度优势,它是趋近无穷大的(WOC要陷入数学领域啦!)

精度一般由缓存区的位数决定(比如8位,2^8就能存储0-255的十进制数)

第二个问题:转换误差,同一时刻,真实电压或者电流信号,转换出的数字量,和原来值的差异。分为量化错误和非线性误差。

第三个问题:采样率,就是隔多久采集一次模拟信号的值转化成数字量,也就是小台阶滑梯的长度。有趣的是,采样率还决定了转换速度,因为转换速度一般就是最大采样率,这很好理解,只有知道了采集了模拟信号才能转换成数字信号,才能有转换速度。

生产中的模拟量

研究一个类型的数据,首先得知道这个类型的数据是以什么样的形式存在的。

我曾经接触到的只有4-20mA这一种。看了一些资料后,了解到还有0-10V、-10V-10V、0-20mA

电压类的型号比较容易失真,电流类会一定程度缓解这个问题。

并且信号线在排线时要注意与动力或者强电电缆分开布局,或者垂直相交,避免干扰问题

模拟量量程

这里看到输入的限制为5530-27648因为SR30XP的输入量程是0-20mA,但有时我们使用的是4-20mA量程的信号,所以下限要提高。上限27648是为什么呢?

这里先要说SR30XP的信号在物理信号和数字信号转换过程中,PLC机内的都是INT类型,也就是16位整数量,算上符号位,就是15位,正数最大是32768-1=32767,而实际上PLC的最大量程为32000,物理信号大约是22mA。如果输入信号过大,在CPU的加法器累加下,会出现数据溢出也就是会出现负数。那么,取27648作为20mA的设定值,这样和32767这个实际上的最大值有了15.6%的报警区间,足够计算机识别溢出风险报警。

不过不用担心说明书会给出量程范围,省心。

参考文献

模拟数字转换器 - 维基百科,自由的百科全书 (wikipedia.org)

模拟信号 - 维基百科,自由的百科全书 (wikipedia.org)

real变量资料(V14)

西门子模拟量为什么是0 -27648?模拟量控制中27648这个数值怎么来的? (dzkfw.com.cn)