对输入、输出模拟量的PLC编程的探讨及编程实例解析
对于初学PLC编程的人来说,模拟量输入、输出模块的编程要比用位变量进行一般的程序控制难的多,因为它不仅仅是程序编程,而且还涉及到模拟量的转换公式推导与使用的问题。不同的传感变送器,通过不同的模拟量输入输出模块进行转换,其转换公式是不一样的,如果选用的转换公式不对,编出的程序肯定是错误的。比如有3个温度传感变送器:(1)、测温范围为 0~200,变送器输出信号为4~20ma
(2)、测温范围为 0~200,变送器输出信号为0~5V
(3)、测温范围为-100~500,变送器输出信号为4~20ma
(1)和(2)二个温度传感变送器,测温范围一样,但输出信号不同,(1)和(3)传感变送器输出信号一样,但测温范围不同,这3个传感变送器既使选用相同的模拟量输入模块,其转换公式也是各不相同。
一、转换公式的推导
下面选用S7-200的模拟量输入输出模块EM235的参数为依据对上述的3个温度传感器进行转换公式的推导:
对于(1)和(3)传感变送器所用的模块,其模拟量输入设置为0~20ma电流信号,20ma 对应数子量=32000,4 ma对应数字量=6400;
对于(2)传感变送器用的模块,其模拟量输入设置为0~5V电压信号,5V对应数字量=32000,0V对应数字量=0;
这3种传感変送器的转换公式该如何推导的呢?这要借助与数学知识帮助,请见下图:
上面推导出的(2-1)、(2-2)、(2-3)三式就是对应(1)、(2)、(3)三种温度传感变送器经过模块转换成数字量后再换算为被测量的转换公式。编程者依据正确的转换公式进行编程,就会获得满意的效果。
二、变送器与模块的连接
通常输出4~20ma电流信号的传感变送器,对外输出只有+、- 二根连线,它需要外接24V电源电压才能工作,如将它的+、- 二根连线分别与24V电源的正负极相连,在被测量正常变化范围内,此回路将产生4~20ma电流,见下左图。下右图粉色虚线框内为EM235 模块第一路模拟输入的框图,它有3个输入端,其A+与A-为A/D转换器的+ - 输入端,RA 与A-之间并接250Ω标准电阻。A/D转换器是正逻辑电路,它的输入是0~5V电压信号,A-为公共端,与PLC的24V电源的负极相连。
那么24V电源、传感变送器、模块的输入口三者应如何连接才是正确的?正确的连线是这样的:将左图电源负极与传感器输出的负极连线断开,将电源的负极接模块的A-端,将传感器输出负极接RA端,RA端与A+端并接一起,这样由传感器负极输出的4~20ma电流由RA流入250Ω标准电阻产生0~5V 电压并加在A+与A-输入端。
切记:不可从左图的24V正极处断开,去接模块的信号输入端,如这样连接,模块是不会正常工作的。
对第(2)种电压输出的传感変送器,模块的输入应设置为0~5V电压模式,连线时,变送器输出只连A+、A-,RA端空悬即可。
三、按转换公式编程:
根据转换后变量的精度要求,对转换公式编程有二种形式:1、整数运算,2、实数运算。请见下面梯形图:
(A)、整数运算的梯形图:
该梯形图是第(1)种温度传感变送器(测温:0~200,输出:4~20ma)按公式(2-1)以整数运算编写的转换程序,它可作为一个子程序进行调用。
(B)实数运算的梯形图:
该梯形图是对一个真空压力变送器(量程:0~0.1Mpa,输出:4~20ma)按公式(2-1)以实数运算编写的转换程序,可作为一个子程序进行调用。
四、编程实例及解析
某设备装有4种传感器:
1、真空压力传感器,量程为:0~0.1Mpa;输出给PLC的信号为4~20ma。
2、蒸汽压力传感器,量程为:0~1.0Mpa;输出给PLC的信号为4~20ma。
3、温度传感器,量程为:0~200 度;输出给PLC的信号为4~20ma。
4、电机转速,量程为:0~50转/秒;输出给PLC的信号为4~20ma。
该设备用蒸汽对其罐体加热,并对温度要求按设定的温度值进行温度控制。控制方式采用自动调整电动阀开门角度的大小来改变加热管道的蒸汽的流量。电动阀的控制信号为4~20ma,即输入4ma时,电动阀关门,输入20ma时,电动阀门全开。
为此选用了含有4路模拟输入和一路模拟输出的模块EM235。其4路模拟量输入信号皆设定为0~20ma电流输入模式,一路模拟量输出信号设定为4~20ma电流输出模式。
要求用触摸屏显示这4种信号的时时状态值,并在触摸屏上设置控制的温度参数,传给PLC使PLC按此值进行温度控制。由于本文重点是讲述有关模拟量的输入与输出的编程设计,对触摸屏的编程设计不予讲述,只提供触摸屏与PLC的通讯变量:
VD0:为真空压力显示区,由PLC传送给触摸屏。
VD4:为蒸汽压力值显示区,由PLC传送给触摸屏。
VW8:为蒸汽温度值显示区,由PLC传送给触摸屏。
VW10:为电机转速值显示区,由PLC传送给触摸屏。
VW12:设定温度值区,由触摸屏传送给PLC.
一、硬件电路的配置:
(一)、硬件设置
除上述4种传感器外,选用:
1、S7-200PLC一台,型号为:CPU222 CN 。
2、选用EM235模拟量输入模块一块(输入设置:0~20 ma工作模式;输出设置:
4~20ma)。
3、变频器一台,型号为PI8100,由PLC控制启停,手动调速。
4、西门子触摸屏一块。型号:Smart 700
硬件电路图
(二)、对传感器输出的4~20ma转换为显示量程的公式推导:
EM235模拟量输入输出模块,当输入信号为20ma时,对应的数字量=32000,故:
输入=4ma时,对应的数字量=6400,对应显示量程值=0。输入20ma时,对应的数字量=32000,对应显示量程值最大值=Hm,其输出量与模块的数字量的变化关系曲线如图一所示:
这4个转换公式,前二种为实数运算,后二种为整数运算,为简化程序,自定义二个功能块分别用于实数与整数运算,而每个功能块在程序运行中又都调用二次,分别计算不同的物理量。为此功能块设有二个数字输入与一个计算结果输出三个口,以适用于多次调用去计算不同物理量的值。请见下面编程:
(三)、实数运算功能块(SBR_0):
(四)、整数运算功能快(SBR_1):
(五)、将模块的数字量,按对应公式转换为量程显示值的编程
分析以上梯形图可知,该程序编写的特点:1、选用自定义功能块编写转换公式的子程序,2、对多个转换变量的调用采用每个扫描周期对MB0加1的依次循环调用的方式,这样的编程处理会使编写的程序,简短易读易懂。
(六)、对模拟量输出的编程处理
对罐体温度控制是采用渐近比较的控制方式进行编程。设计思路是这样的:
当罐体的温度低于设定温度10度时,控制加热蒸汽的电动阀门全打开,当罐体的温度低于设定温度7度时,电动阀门打开3/4,当罐体的温度低于设定温度4度时,电动阀门打开1/2,当罐体的温度低于设定温度2度时,电动阀门打开1/4,当罐体的温度低于设定温度1度时,电动阀门打开1/8,当罐体的温度=设定温度时,电动阀门关闭。
(2-1a)式为温度与数字量的关系式,用它可将设定温度值转换为对应的数字量。如
设定温度Tz=120度,带入(2-1a),可得对应数字量AIW=21760
(3-5)式为数字量与电动阀门打开度α的关系式,可用它输送给模块不同的数字量,来改变模块的模拟量输出值,进而达到改变电动阀门的打开角度。
如:α=1代入(3-5)可得:AIWx=32000 将32000送入给模块的AQW0, 模块的模拟量输出将产生20ma电流输入给电动阀的信号输入端,使阀门全打开。
α=1/2代入(3-5)式可得:AIWx=19200 将19200送入给模块的AQW0, 模块的模拟量输出将产生12ma电流输入给电动阀的信号输入端,使阀门打开1/2。
下面是利用渐近比较法进行温度控制的梯形图:程序解释见网络上的说明
程序中的Q0.0为蒸汽电磁阀的输出信号。Q0.0=1即蒸汽电磁阀打开,注入蒸汽加热,程序将对罐体内的温度进行控制。Q0.1 为冷水电磁阀的输出信号。Q0.1=1即冷水发打开,注入冷水进行降温,此时电动阀门全开,加速降温,程序对降温不做控制处理。
(七)、PLC输入输出的控制编程
输入有3个按钮:分别控制变频器、蒸汽电磁阀、水冷电磁阀的通电与关断:
1、启动按钮接PLC的I0.0,控制变频器的启动与停止,输出口为Q0.3。
2、蒸汽电磁阀控按钮,控制蒸汽电磁阀的打开与关闭,输出口为 Q0.0
3、冷水电磁阀按钮,控制冷水电磁阀的打开与关闭,输出口为 Q0.1
控制方式选用一个按钮控制启停,用RS触发器指令编程。Q0.0与Q0.1 互锁,即只容许一个电磁阀打开,如蒸汽阀打开时,按水阀控制按钮,水阀不能打开,只有先关断气阀后再按水阀,水阀才能打开。见下面梯形图:
本文到此结束,望大家分析探讨,有不对之处请给于指正。谢谢大家!
个人主页给加
收藏了
引用回复举报评分srdou
个人主页给TA发消息加TA为好友发表于:2011-12-29 23:10:56 2楼
解析到位,思路清晰,学习了!
引用回复举报评分yeavin2009
个人主页给TA发消息加TA为好友发表于:2011-12-30 09:18:06 3楼
纠正一下楼主:“一、转换公式的推导......
对于(1)和(3)传感变送器所用的模块,其模拟量输入设置为0~20ma电流信号”此处应该是设置为40~20ma吧
引用回复举报评分
个人主页给加
纠正一下楼主:“一、转换公式的推导......
对于(1)和(3)传感变送器所用的模块,其模拟量输入设置为0~20ma电流信号”此处应该是设置为4~20ma吧
引用回复举报评分shiyinglu
个人主页给TA发消息加TA为好友发表于:2011-12-30 16:41:00 5楼
想请问楼主:为什么4-20ma时,对应的值为什么是6400-32000,而不是0-32000,
引用回复举报评分worldheart
个人主页给TA发消息加TA为好友发表于:2011-12-30 19:14:44 6楼
乃乃地,没有比这个再好的文章了,楼主
引用回复举报评分wyb2866255
个人主页给TA发消息加TA为好友发表于:2011-12-30 21:59:05 7楼
对4楼提问的回复:(1)和(3)传感变送器所用的模块是指EM235模块,EM235对输入模拟量的测定(电流)是0~20ma,而不是4~20ma。请见S7-200 系统手册。
引用回复举报评分wyb2866255
个人主页给TA发消息加TA为好友发表于:2011-12-30 22:26:49 8楼
对5楼的回复:对EM235输入模拟量设定为电流信号输入,输入范围I=0~20ma,经模块内的A/D转换器转换为数字量AIW,数字量AIW与电流I成正比,二者的关系是一条过0点的直线,即:I=20ma时,对应的数字量AIW=32000,I=0时,对应的AIW=0。那么1ma对应数字量=32000 / 20 = 1600,显然I=4ma 时,AIW=1600*4=6400
引用回复举报评分shiyinglu
个人主页给TA发消息加TA为好友发表于:2011-12-30 23:07:03 9楼
那么信号输入取为4-20ma时,即为数字量6400以下的数字量都不会被读取,这样不会影响结果吗
引用回复举报评分wyb2866255
个人主页给TA发消息加TA为好友发表于:2011-12-31 00:20:21 10楼
对9楼的回复:看来你对转换公式的推导还没有搞清楚,以(1)温度传感变送器来说,当温度=0度时,输出电流=4ma,输入给模块,使模块转换的数字量=6400,当温度=200度时,输出电流=20ma,使模块转换的数字量=32000,即转换后的数字量在6400~32000之间,不会有低于6400的数字量出现。所以你说的情况不存在。没有影响不影响结果的问题。
引用回复举报评分#天涯
个人主页给TA发消息加TA为好友发表于:2011-12-31 06:03:53 11楼
好帖!
引用回复举报评分ascent522
个人主页给TA发消息加TA为好友发表于:2011-12-31 08:04:32 12楼
学习了,大侠们太厉害了……
引用回复举报评分danny604
个人主页给TA发消息加TA为好友发表于:2011-12-31 09:07:42 13楼
很好的学习帖子!谢谢!
引用回复举报评分横槊赋诗
个人主页给TA发消息加TA为好友发表于:2011-12-31 11:57:22 14楼
楼主好人啊,希望大家多多向楼主学习,多发这样的好帖子。
引用回复举报评分横槊赋诗
个人主页给TA发消息加TA为好友发表于:2011-12-31 11:57:34 15楼
引用回复举报评分大器晚成
个人主页给TA发消息加TA为好友发表于:2011-12-31 15:30:17 16楼
非常好的帖子,顶一个!
引用回复举报评分banchiren1098
个人主页给TA发消息加TA为好友发表于:2011-12-31 17:43:24 17楼
我初学的。很好的贴。
引用回复举报评分yibeiqingcha
个人主页给TA发消息加TA为好友发表于:2012-01-02 16:23:24 18楼
非常好的帖子,支持一下!
引用回复举报评分plc&inverter
个人主页给TA发消息加TA为好友发表于:2012-01-03 15:27:59 19楼
绝对是好帖。不顶不行啊!
引用回复举报评分haizhaoyang
个人主页给TA发消息加TA为好友发表于:2012-01-03 20:26:59 20楼
最近学习模拟量,确实是非常好的帖子。
引用回复举报评分zbny
个人主页给TA发消息加TA为好友发表于:2012-01-06 16:36:51 21楼
太好了,谢谢楼主呀!
引用回复举报评分吴尚业
个人主页给TA发消息加TA为好友发表于:2012-01-11 11:33:31 22楼
楼主很好人,跟住楼主学了吾少野!
引用回复举报评分xxh20081
个人主页给TA发消息加TA为好友发表于:2012-01-11 21:07:11 23楼
有没有FX2NPLC的楼主
引用回复举报评分profibus秋高气爽
个人主页给TA发消息加TA为好友发表于:2012-01-12 09:50:29 24楼
不错,学习一下........
引用回复举报评分ljpwxy2011
个人主页给TA发消息加TA为好友发表于:2012-02-21 14:35:20 25楼
很有用,值得收藏。
引用回复举报评分ntt2005
个人主页给TA发消息加TA为好友发表于:2012-02-24 14:43:17 26楼
现在正要用,学习了!
引用回复举报评分玻璃的心
个人主页给TA发消息加TA为好友发表于:2012-02-24 15:25:41 27楼
绝对的好帖,收藏了!!!!
引用回复举报评分rjieyang
个人主页给TA发消息加TA为好友发表于:2012-03-01 11:36:41 28楼
楼主你好请问SHI_in:LWO这些数据是系统默认的还是自己定义的如果是自己定义,怎么定义呢?系统默认的输入变量应该是AIW这样的在这怎么成了SHI_in:LWO呢?
引用回复举报评分li86253398
个人主页给TA发消息加TA为好友发表于:2012-03-01 14:19:11 29楼
虽然不是很懂但值得收藏!
引用回复举报评分wyb2866255
个人主页给TA发消息加TA为好友发表于:2012-03-01 17:09:11 30楼
回28楼:“SHI_in:LWO这些数据是系统默认的还是自己定义的如果是自己定义,怎么定义呢?”其SHI_in 字符是自己定义的,即定义该子程序作为功能块的第一个字输入局部变量,LW0为系统根据定义变量的顺序,给出改变量的地址。该子程序作为作为运算功能块,可以多次调用,来计算不同的物理量。如进行实数运算调用实数运算功能块有2次,1、对真空压力的计算,其转换的数字量为AIW0,此时应将AIW0输入给功能块的SHI_in。2、进行蒸汽压力计算时,其转换的数字量为AIW2,此时应将AIW2输入给功能块的SHI_in。
引用回复举报评分心动Batista
个人主页给TA发消息加TA为好友发表于:2012-03-01 18:28:19 31楼
楼主,俺有个疑问为什么在例图中两个字相乘代号却没变呢
引用回复举报评分ahukuaipao
个人主页给TA发消息加TA为好友发表于:2012-03-01 20:06:22 32楼
这真是一篇很好的分析总结的文章,偶已经偷偷的COPY了,呵呵。。。
引用回复举报评分wyb2866255
个人主页给TA发消息加TA为好友发表于:2012-03-02 08:27:13 33楼
回31楼:二个字VD112与VD104相乘,其积送入VD112 里。
引用回复举报评分心动Batista
个人主页给TA发消息加TA为好友发表于:2012-03-02 18:25:35 34楼
谢谢指教,又多会了一点点,
引用回复举报评分gksunchenglong
个人主页给TA发消息加TA为好友发表于:2012-03-06 09:51:47 35楼
各位大师能给我举个S7300模拟量的例子吗谢谢
引用回复举报评分gksunchenglong
急急急望各位大师能帮个忙,给个300的例子,像上面那样的
引用回复举报评分杨霖
个人主页给TA发消息加TA为好友发表于:2012-03-06 11:44:53 37楼
顶一下楼主,此文非常的好,实用又解释得非常的详细。希望你能多发一些实用的帖子给大家学习,谢谢!
引用回复举报评分张青红
个人主页给TA发消息加TA为好友发表于:2012-03-06 22:52:08 38楼
讲解的非常细,很好,谢谢共享学习。
引用回复举报评分gksunchenglong
个人主页给TA发消息加TA为好友发表于:2012-03-07 10:44:12 39楼
各位大师能给我举个S7300模拟量的例子吗谢谢
引用回复举报评分gksunchenglong
个人主页给TA发消息加TA为好友发表于:2012-03-07 10:50:04 40楼
大师能给我举个S7300模拟量编程的例子吗谢谢、、、、急急急
引用回复举报评分lzw283634282
个人主页给TA发消息加TA为好友发表于:2012-03-07 20:10:47 41楼
收藏先。谢谢楼主的分析。
引用回复举报评分银光人生—华
个人主页给TA发消息加TA为好友发表于:2012-03-15 15:50:40 42楼
很不错的文章,有那种分段标定的吗?还有就是如何取反和进行零位标定;
引用回复举报评分zzl105118
个人主页给TA发消息加TA为好友发表于:2012-03-23 17:32:01 43楼
好东西啊找了好久都没找到,现在终于找到啦,在学校学的都是数字量的,现在要搞模拟量的,那里会。
引用回复举报评分flylovemore--王者之师