【PLC】模拟量调试和转换方法

[复制链接]
查看88325 | 回复0 | 2025-2-4 21:01:42 | 显示全部楼层 |阅读模式
今天我们来看一个有意思的需求

其实在很多同学在学习的时候都会遇到这个问题

想要进行模拟量程序的设计与调试,但是传感器(变送器)送进来的模拟量到底是一个什么样的值?



首先我们来看一下传感器和变送器





温度传感器(PT100)和变送器

在工业控制中,经常会使用传感器来采集一些状态

例如:

温度、湿度、压力、流量、液位等

这些有个特点

采集的是连续的过程量,也就是工程量



传感器负责将这些物理世界中量进行感知,转换为电信号(电阻、电压、电流)

但是这些传感器的变化可能并不符合我们的要求

比如用单片机来进行采集,需要转换为电压,且最大值不超过Vref,用PLC来进行采集,还需要看这个PLC所能接受的模拟量输入类型




因此我们需要使用到另一个器件:变送器

(现在很多的传感器和变送器是集成在一起的)

变:把传感器的信号变成我们所需要的标准信号

送:把这个信号送到我们的控制器中

PLC支持的标准信号一般包括:

电流信号:4~20mA、0~20mA、正负20mA

电压信号:0~10V、0~5V、正负10V、正负5V

总结一下





由变送器所得到的模拟量,经过PLC的模拟量输入模块,即可转换为PLC所能识别的数字量

这个数字量是有范围的

以单极性模拟量输入为例



在S7-200中,其转换的值为

0~32767

在S7-1200中,其转换的值为

16#0000~16#6C00

(0~27648)



这个转换我们可以认为是个线性转换,即



那么通过一个线性转换公式即可解决




把工程量作为输入,即可得到工程量对应的数字量是多少

把数字量作为输入,即可得到数字量对应的工程量是多少

(要注意工程量是Real类型、数字量是Int类型)





那么回到这个需求的第一个问题
在没有变送器的情况下,我们怎么得到一个传感器的输入呢?



我们写一个函数块,把工程量作为输入,换算他的数字量

(此处注意,两个需求不能共用一个输入块,因为数据类型不同!)

(勘误:这里的输入应该是数字量上限、数字量下限;输出是数字量输出)



将封装好的函数块拖入到OB1中

(勘误:这里的输入应该是数字量上限、数字量下限;输出是数字量输出)



下载仿真调试





得到了数字量之后,就可以开始编写转换程序了

在TIA Portal中集成了两个指令

Norm_X



Norm_X指令可以把输入的数字量转换为0.0~1.0的Real类型数据

SCALE_X



SCALE_X指令可以把0.0~1.0的Real类型数据等比例缩放

这样我们就可以轻松的实现数字量转换为工程量,调试如图



因为这里面经过了Real类型的除法和Real-Int的类型转换,因此会有一定的精度丢失。



下面又是一个有意思的需求

如果有很多的模拟量数据需要转换,可以写很多的Norm_X和Scale_X指令,但是这里面就需要写很多的中间变量,可不可以用一个块来解决呢?

这就回到了前面的问题,我们可以自己写一个转换块。

这里我们尝试下用SCL语言,会发现这个方法更简洁。



这里面我们进行个简单的判断,如果输入的上下限输入错误,就在一个Status的引脚报一个8001的错误代码。

如果没问题就直接进行转换

将封装好的函数块拖入到OB1中



这里就不进行仿真了

其实还有一种更好用的方法,就是把这段程序加工一下

根据设定长度,利用数组进行多路模拟量的连续转换

有兴趣的同学可以下载归档文件之后自己尝试一下

这里的程序就是进行一个简单的调试使用

并不能实现PID调节功能

不过感兴趣的同学可以尝试在程序中写一个一阶模型

获取归档程序,请在公众号回复“模拟量”

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则