天天看点

php读取西门子plc_简单说一些PLC中模拟量的相关概念引言:正文:

引言:

有些刚刚接触PLC的小伙伴对PLC中的模拟量编程不理解甚至有点摸不着方向,让他用PLC读取一个压力值模拟量,他会感到有点为难。就是因为PLC中的一些基本概念没有搞清楚,我今天简单来给大家说一些,应该说大家看了,可能就会明了很多。

正文:

模拟量概述:

模拟量(analog)在PLC系统中是相当对于数字量(digital)来说的,它的数值在时间上是连续的,不像数字量那样是分断的,也就是电子电路中的A/D模数转换和D/A数模转换,学过数字电路和模拟电路的小伙伴应该对这些应该有更深入的了解。PLC就是基于电子电路的硬件和更能不断完善前进的基础上,才有机会超出之前的继电器控制电路,成为电气控制中的主流控制器的。我认为基础科学前进一小步,其他科学就会进步一大步,比如航空发动机的技术难题,可能更多的是由于金属材料中各种元素的混合比例以及加热锻造工艺造成最终的材料在硬度强度和耐久性上的不同,进而产生了发动机使用寿命的巨大不同,这就是因为金属和锻造等这些基础科学知识没有大发展造成的。(当然,仅为个人观点。)

多说了几句题外话,还过来说PLC中的模拟量,PLC中的模拟量(输入和输出都是)一般是要求模拟量的信号是标准的4-20mA或者0-10V这样的电流电压信号,当然也有0-20mA,-10V-+10V,-5V-+5V,也可以认为是标准的电流电压信号。(我这里是简单讲,所以想了解标准电流电压信号的小伙伴们需要自己去搜索更多的知识。)

PLC的输入信号中还有热电阻和热电偶这样的输入信号,之所以把他们单独做成一种模块或者选项,是因为这两种测温方式非常的多见,而且接线的时候有一些异同,是否需要补偿等。但是,实质上PLC读取这些信号最终还是转换为电流和电压的。

下边将说一些相关的概念:

1.精度的概念:

首先模拟量中还经常提到精度这个词,精度其实在编程中用处不大,因为精度其实是PLC的硬件A/D转换模块做好之后就决定了的,所以在硬件选型的时候需要知道。精度就像是温度计,比如0-100度的测量范围,如果你的温度计只能显示10°的最小刻度,那么你就只能准确测量10°,20°,50°等等,你就没有办法准确知道36.5°,这就是精度的概念。你选用了一个精度不够的硬件,就不能精确读到你想读到的数据。比如西门子硬件配置中AI8x12bit的模拟量输入模块,这里的12bit就是指的硬件的精度,肯定是没有15bit的模块精度高,但是精度越高模块越贵!

2.极性的概念:

模拟量的处理中还经常遇到单极性和双极性的概念,好像还有说单精度和双精度的,还是按极性来说更科学一些。单极性是大家最常接触到的,就像正整数一样,这个单就表示是一个正信号,比如电压0-10V,在西门子300PLC中,硬件的模数转换模块转换后的数据对应的是0-27648。双极性,就表示有正有负,即比如-10V-+10V,信号有正有负,对应的模数转换后在300PLC中的值是-27648-+27648。这样应该清楚了吧,反正单极性就是只有正值,双极性就有正值有负值!

3.线性的概念:线性的概念需要分PLC侧和传感器侧来讲。

3.1PLC侧线性的概念:

上边极性这里我说在300PLC中,电压0-10V被PLC硬件中的模数处理模块处理后送到PLC中是的数值是0-27648,这里就隐含了一个线性的概念。准确的说是直线线性,即X轴和Y轴的点利用描点法描出来的线是一条直线,直线的特性就决定了斜率K是一定的。先看一下西门子资料上SM331模块AI8*12bit的数据吧:

php读取西门子plc_简单说一些PLC中模拟量的相关概念引言:正文:

电压和数值的关系图

首先声明一点,这个图是我画的,但是数值是西门子资料上的,所以大家不必怀疑数据的不正确性。我没有找到西门子的图,呵呵,所以只有自己画一个,大家将就看吧。

这个图10V电压送到PLC的331模块AI输入点中,在PLC软件中监控这个地址就能读到27648,有些小伙伴对这个都不能确定。这里就强调一下,模拟量模块读入的值是一个16位的整数变量,这是西门子的硬件或者说A/D转换电路的设计要求,所以它被制造出来之后就能把一个模拟量电流或者电压信号,转换为一个16位的整数(int)类型变量。

这个图上的直线线性,就是10V的时候数值一定是27648,5V时数值一定是13824,7.5V时一定是20736,这几个值的直线线性系数K是一样的,即:

K=Y2-Y1/X2-X1=(13824-0)/(5-0)=(20736-0)/(7.5-0)

这里K值到底是多少不重要,重要的是直线的斜率必须是一样的。这是PLC能够快速计算出数值的数学原理和要求,如果不是直线,那么PLC就很难快速计算输入的5V到底应该是多少了。

3.2传感器侧线性的概念:

PLC系统能够将工程量和读入后的数值进行准确的对应,其实是因为对传感器侧也有一个隐含要求,即传感器这边工程量和输出的标准电压电流信号之间也要满足直线线性关系,这是由传感器的D/A模数转换模块决定的。

比如压力量程被设定为-2pa--+10pa的压力传感器,它的输出电压是0-10V,这句话的意思就是压力传感器测量到的压力在-2pa的时候输出的电压值必须是0V,4pa的时候输出电压必须是5V,7.6pa的时候必须输出8V。这里的pa就是工程量单位,5pa,10pa就是工程量的值。

如果传感器的工程量和输出信号之间不是线性的,PLC也就很难快速的将读入数值和工程量关联起来了。

说完这两侧对线性的要求后,相信小伙伴们就明白了,为何压力,温度等信号,在工程量和数值转换的时候有那么一个公式,就是因为传感器依据线性公式把不是标准电信号的模拟量转换为标准的电流电压信号,而PLC又能把标准的电流电压信号依据线性公式转换为一个整数值,这样压力---D/A转换---电流,电流---A/D---INT,两边就完美的对应起来了。即都满足了下边的公式:

php读取西门子plc_简单说一些PLC中模拟量的相关概念引言:正文:

工程量转换时的公式

可以看到这个图片的最下边我写了整数的最大值和最小值需要根据PLC的实际合理范围去确定,西门子300系列中模拟量读取后整数的值就是-27648--+27648,这是双极性的时候;单极性是0-27648。而西门子200PLC中范围就是单极性0-32000,我好想还记得有0-10V对应0-500数值的PLC,忘记是不是台达的PLC了。也就是说每个厂家,每个类型的这个数值应该是不同的,最好的方法就是看硬件手册,模块自己的硬件手册上这里必须写清楚。

4.信号超限或溢出

上边的几个概念大家清楚以后,就需要多了解一点信号超限的问题了,如我上边电压和数值关系图上,当PLC读取的数值是32767的时候,给入的电压值是11.851V,也就是说PLC还是读到了10V以上的电压值的。

其实超限,就是说超出10V的电压,PLC确实还是能读到的,西门子SM331的8*12bit模块资料上数值在27644和32511之间就认为数据超限了,此时可以读到数据,但是精度不是最优的。数值大于32511就认为这些数值不再有效了,这时就认为是溢出了。

所以,好的程序,不是简单的把整数转换为双整数再转换为实数,然后根据公式进行计算,计算出来工程量,还需要对这些超限的情况也做出一些判定。

就说这么多吧,本来是说简单说的,结果又说了这么多,写文章不易,但是问题的点还是要讲完。希望通过这篇文章,能让大家对模拟量不再那么陌生,至少那些名词的含义心中有个大致的概念吧!

文章到此就结束了,写的比较简要,有问题的小伙伴请关注并留言,我会及时回复,谢谢。