首页 上一页 1 2 下一页 尾页

关于模拟量输入转化 点击:4714 | 回复:23



123789

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 129回
  • 年度积分:0
  • 历史总积分:392
  • 注册:2006年2月20日
发表于:2007-04-24 15:58:00
楼主
看了很多关于模拟量转化的帖子和程序,现在是越搞越糊涂了,期望那位大峡能具体的讲一讲:
我现在有个温度传感器的量程是0-500度,输出是4-24mA的电流信号,用S7-300的模拟量模块,我的模拟量地址是:AIW256,假如说我需要用到PID进行闭环系统的调节,就要用到FC105进行工程量转化,也可以自己进行编程,以下是对FC105的具体描述:
FC105
  SCALE功能接受一个整型值(IN),并将其转换为以工程单位表示的介于下限和上限(LO_LIM和HI_LIM)之间的实型值。将结果写入OUT。SCALE功能使用以下等式:

OUT = [ ((FLOAT (IN) -K1)/(K2-1)) * (HI_LIM-O_LIM)] + LO_LIM

常数K1和K2根据输入值是BIPOLAR还是UNIPOLAR设置。

BIPOLAR:假定输入整型值介于 27648与27648之间,因此K1 = -27648.0,K2 = +27648.0

UNIPOLAR:假定输入整型值介于0和27648之间,因此K1 = 0.0,K2 = +27648.0

如果输入整型值大于K2,输出(OUT)将钳位于HI_LIM,并返回一个错误。如果输入整型值小于K1,输出将钳位于LO_LIM,并返回一个错误。


通过设置LO_LIM > HI_LIM可获得反向标定。使用反向转换时,输出值将随输入值的增加而减小 

通过上面的例子我想该这么算:OUT=(AIW256转化成的浮点数)*(500-0)/27648+0,这样是正确的吗?那位解答一下,
我还有以下问题:
1.SCALE功能接受一个整型值(IN),并将其转换为以工程单位表示的介于下限和上限(LO_LIM和HI_LIM)之间的实型值,我们为什么要转化?是不是CPU只能处理以工程单位表示的实型值?何为以工程单位表示的实型值?在本例中具体是指哪个数,这个数有什么用处?

(每个PID控制回路有两个输入量,即给定量和过程变量,在实际控制问题中,它们的取值范围和测量单位可能不一致,因此,在进行PID运算前,必须将工程实际值标准化,即转换为无量钢相对值格式。在对模拟量进行PID运算后,对输出生产的控制作用是在[0.0~1]范围的标准化值,为了能够驱动实际的驱动装置必须将其转换成工程实际值。 )
2.本例如果不用FC105进行线性转化,自己在程序中写程序,具体程序是怎样的,麻烦那位写出来.
3.假如说我的输入模块的精度是12位的,他和精度是16位有何区别,具体体现在那些方面?
4.我在网上看到一个小程序,希望大家解释一下他的含义:
 L PIW400     //采集到的输入
  T mw100      //将WORD格式变成整数
  ITD          //将整数转换成双整数
  DTR          //将双整数转换成浮点数即小数
  L MD200      //此数为零点,由你自己根据现场表调定
  +R           
  L MD300      //此数为比例,由你自己根据现场表调定
  *R
  T MD400      //此数为结果.
实践证明结果比FC105准确,因为FC105我看过里边的程序
根本就没有调零点,而且完全标准的0~20mA或4~20mA信号
是不存在的,总有差别,还不如用现场表比对来得OK.
根据上面公式,侧一高一低两个数就可算出响应传感器的
MD200和MD300.
谁能说说MD200,MD300,MD400具体指什么,和本例对应起来应该是那些变量或数值?

5.假如说本例用的是S7-200的PLC,希望那位大峡也写出线形转化的程序,以及如果要进行PID处理,触摸屏显示的程序/


上面有可能有些地方说的不是很清楚或者是错误的东西,希望大家包涵并给小弟指出来,希望大家多多提出回复,给我们这些新手学习的机会.谢谢大家!



123789

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 129回
  • 年度积分:0
  • 历史总积分:392
  • 注册:2006年2月20日
发表于:2007-04-24 16:02:00
1楼
自己先顶,下面我把我收集到的一些相关帖子转发出来,希望对大家有所帮助:
每个PID控制回路有两个输入量,即给定量和过程变量,在实际控制问题中,它们的取值范围和测量单位可能不一致,因此,在进行PID运算前,必须将工程实际值标准化,即转换为无量钢相对值格式。在对模拟量进行PID运算后,对输出生产的控制作用是在[0.0~1]范围的标准化值,为了能够驱动实际的驱动装置必须将其转换成工程实际值。 

一、    对于一个单极性的输入模拟量的转换及标准化程序如下:

  XORD,ACO,ACO        //ACO清0 

MOVW ,AIWO,ACO          //将模拟输入量送入ACO 。

    LDW>=ACO,O            //如果ACO为正。

IMP

NOT

ORD  16#FFFF0000,ACO  //ACO中的符号处理

LBL  ACO  ,ACO        //将32位整数转换为实数

/R    320000,ACO      //标准化ACO

MOVR    ACO ,VD100    //将标准化值存入PID参数表TBL中

三个基本参数Kp,Ki,Kd在实际控制中的作用

比例调节的作用:是按比例反映系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用以减少偏差。比例作用大可以加快调节,减少误差,但过大的比例,会使系统稳定性下降,甚至造成不稳定。

积分调节作用:是系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,甚至无差,积分调节停止,积分调节输出一常值。Ti

越小积分作用越强,加入积分调节可使系统稳定性下降,动态响应变慢,必须分D和P规律结合,组成PI和PID。

微分调节作用,微分作用反映系统偏差信号的变化率。具有预

见性,能预见偏差变化的趋势。因此产生超前的控制作用,在偏差还没有形成之前,以被微分调节作用消除。因此可以改变系统的动态性能,减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节对系统抗干扰不利。微分作用不能单独使用,必须组成PD或PID控制器。

  二.输出模拟量转换为工程实际值

      在对模拟量进行PID运算后,对输出产生的控制作用是在[0.0--1]范围的标准值,为了能够驱动实际的驱动装置必须将其转换成实际值

(1)将标准化值转换为按工程量标定的工程实际值的实数模式

              Rscal=(Mn-Offset)*Span 

    Rscal--- 按工程标的过程变量的实数模式

    Mn------过程变量的标准化值

Span----最大允许值减去最小允许值。一般取32000(单极性)或64000(双极性)

    Offset—取0(单极性)或0.5(双极性)

(2)将已标定的工程实际值的实数模式能转换为16位整数模式。

输入模拟量的转换方式为:

Rnom=Rrav/Span+offset 


  下面的程序段为PID控制回路输出转换为按工程量标定的整数值

    MOVR  VD108, ACO  //将输出结果存放ACO

    -R    0.5,  ACO  //对于双级性的场合(单级性无此条语句)

    XR    64000.0 ACO  //将ACO中的值按工程量标定。

      TRUNC ACO  ACO    //将实数转换为32位整数。

    MOVW  ACO  AQWO    //将16位整数值输出模拟量摸板。

一、    PID指令的控制方式。

  在S7-200中PID指令没有考虑手动/自动控制的切换方法。所谓自动方式是指,只要PID功能框的允许输入EN有效时,将周期性的执行PID运算指令。而手动方式是指PID功能框的允许输入EN无效时,不执行PID运算指令。

  在程序运行过程中,如果PID指令的EN输入有效,即进行手动/自动

控制切换。为了保证在切换过程中无扰动无冲击,在手动控制过程中,就要将社定的输出值作为PID指令的一个输入(作为Mn参数写到参数表中)使PID指令根据参数表的值进行下列操作。

(1)使SPn(社定值)=PVn(过程值)

(2)  使PVn-1(前一次过程变量)=PVn

(1)  使Mx(积分和)=Mn(输出值)

一旦EN输出有效(从0到1的跳变),就从手动方式无扰切换到自动方式 。

四、PID回路控制指令

  PID指令的功能是进行PID运算

TBL——参数表的首地址由变量寄存器VB指定的字节型数据。

LOOP——是回路号,是0——7的常数

指令格式;PID  TBL  LOOP

在S7—200的应用程序中,最多可以使用8条PID指令,即在一个应用程序中,最多可以用8个PID控制回路,一个PID控制回路只能用1条PID指令,没个PID控制回路必须使不同的回路号。

123789

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 129回
  • 年度积分:0
  • 历史总积分:392
  • 注册:2006年2月20日
发表于:2007-04-24 16:06:00
2楼
西门子S7-200简单模拟量编程范例      硬件:S7-200 CPU226:1个模拟量扩展:EM235:3个
TITLE=//子程序1:数据采集部份 //
Network 1 
// // 初始化,采集模拟量输入电压信号 //
LD    SM0.0
MOVW  AIW0, VW40
MOVW  AIW8, VW50
MOVW  AIW16, VW60
Network 2 
// // 模拟量信号校准,75为换算值,不得修改;10为增加HMI上的小数点位数 //
LD    SM0.0
/D    +75, VD40
*D    +10, VD40
/D    +75, VD50
*D    +10, VD50
/D    +75, VD60
*D    +10, VD60
Network 3 
// // 互感器比设定,VD270为最终比值,10为增加HMI上小数点而设立 //
LD    SM0.0
MOVD  VD260, VD270
/D    VD240, VD270
*D    +10, VD270
Network 4 
// // 初始化,采集模拟量输入电流信号 //
LD    SM0.0
MOVW  AIW2, VW70
MOVW  AIW10, VW80
MOVW  AIW18, VW90
Network 5 
// // 模拟量信号校准,6005为换算值,不得修改;与互感器比运算得出真值 //
LD    SM0.0
/D    +6005, VD70
*D    VD270, VD70
/D    +6005, VD80
*D    VD270, VD80
/D    +6005, VD90
*D    VD270, VD90 
 

不明白75,10,6005这几个数是根据什么设置的,那为解释一下?

123789

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 129回
  • 年度积分:0
  • 历史总积分:392
  • 注册:2006年2月20日
发表于:2007-04-24 16:22:00
3楼
希望老菜鸟,老小伙,如火,虫子等等各位大侠来解答一下

老五※

  • 精华:1帖
  • 求助:0帖
  • 帖子:124帖 | 2321回
  • 年度积分:0
  • 历史总积分:3947
  • 注册:2002年12月28日
发表于:2007-04-24 16:39:00
4楼
帮你顶一下,我也想知道

sdtsg

  • 精华:0帖
  • 求助:0帖
  • 帖子:104帖 | 1097回
  • 年度积分:0
  • 历史总积分:5502
  • 注册:2006年8月02日
发表于:2007-07-27 16:06:00
5楼
?????

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2007-07-27 22:55:00
6楼
我把以前给一个网友写得几句话贴出来,希望能起抛砖引玉:

PID功能块的控制方式:
    当自动条件不满足时执行手动输出,输出手动设定值;
    当自动条件满足时执行自动输出,输出PID运算结果;
    PID运算方式:把反馈值(这里为AIW0)和设定值(这里为AC0)拿来比较,进行计算:
       比例:如果反馈值比设定值大——就减小输出(这里指负作用控制);
       积分和微分:如果......不写了,太多了@_@

    下面举一个复杂一点的例子,你以后可能会用到——单极和 20% 的偏移量:
    假设变送器的量程范围是0-50摄氏度对应4-20mA信号,而模拟量输入模块的量程范围是0-20mA对应0-32000(注意:没有4-20mA对应于0-32000这种说法),那么0-50摄氏度就对应于6400-32000。
    你可以把这个变送器输入的信号(例如AIW0)直接作为PID的反馈(也就是过程变量),但是在PID向导中设定输入单极性,偏移20%,输入下限6400,输入上限32000。
    那么给定值怎么算呢?请看下面:
    既然知道0-50摄氏度对应于6400-32000,那么如果给定35摄氏度,PID功能块的SP应该为多少呢?当然,不能直接为35摄氏度,应该做以下计算:
    公式推导:已知0-50摄氏度对应于6400-32000,那么就得到一条直线(你可以用XY坐标画出来,初中学的哟@_@)。假设Y为温度值(0-50摄氏度),X量程(0-32000),就可以得到如下公式:50/(32000-6400)=Y/(X-6400)。
    计算:SP设定值=[Y*(32000-6400)/50]+6400
          这个Y就是人机上的温度设定值。

cade_zk

  • 精华:0帖
  • 求助:0帖
  • 帖子:34帖 | 216回
  • 年度积分:0
  • 历史总积分:503
  • 注册:2005年9月16日
发表于:2007-07-29 16:52:00
7楼
如果控制精度要求不高,直接用FC 105 

aaron jh

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 71回
  • 年度积分:0
  • 历史总积分:169
  • 注册:2005年9月03日
发表于:2007-07-30 10:20:00
8楼
学习了!

robotics30

  • 精华:1帖
  • 求助:0帖
  • 帖子:43帖 | 277回
  • 年度积分:0
  • 历史总积分:1384
  • 注册:2004年3月22日
发表于:2007-07-30 14:14:00
9楼
FC 105 只是做了限制幅度和滤波,防止干扰信号.

guafa58

  • 精华:1帖
  • 求助:0帖
  • 帖子:43帖 | 2142回
  • 年度积分:4
  • 历史总积分:3969
  • 注册:2006年1月13日
发表于:2007-07-30 15:57:00
10楼
既然知道0-50摄氏度对应于6400-32000,那么如果给定35摄氏度,PID功能块的SP应该为多少呢?当然,不能直接为35摄氏度,应该做


请教了::设定值 不就是  物理工程值 吗,为什么还需要转换呢???
PV过程变量,已经转换成  工程值了,
SP&PV都为  工程值,请教,SP需要转换吗,
我要 设定控制35度,应该不需要转化吧,只要把过程值转化,比较PID自动调节啊,如果把35再转化,好象不对哦,
谢谢,请各位看一下啊

happyoicq

  • 精华:0帖
  • 求助:0帖
  • 帖子:49帖 | 1382回
  • 年度积分:0
  • 历史总积分:3120
  • 注册:2005年10月16日
发表于:2007-07-30 16:12:00
11楼
期待中......

yzy

  • 精华:0帖
  • 求助:0帖
  • 帖子:17帖 | 102回
  • 年度积分:0
  • 历史总积分:262
  • 注册:2002年9月16日
发表于:2007-07-30 21:08:00
12楼
关于模拟量的换算,论坛好像有很多这样的帖子,可以找找。

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2007-07-31 13:48:00
13楼
TO  老菜鸟:
我们在画面上的设定值不可能会是转化后的值啊,象你说的0—500度,我们肯定要做成在画面中设定0—500的某个数,不可能让操作员计算出来6400-32000的值啊。
那么请问:
1、这个转换必须在S7中做吗?
2、6400-3200应该是S7-200吧,如果是S7-300+WINCC,在WINCC上能否做出来这个转换?

guafa58

  • 精华:1帖
  • 求助:0帖
  • 帖子:43帖 | 2142回
  • 年度积分:4
  • 历史总积分:3969
  • 注册:2006年1月13日
发表于:2007-07-31 16:16:00
14楼
S7-300+WINCC,在WINCC上能否做出来这个转换?

S7-300也要看你的信号是什么的啊,是电压还是电流等等
不过,4-20MA是对应0-27648所以不麻烦的,很简单就好了

没有人回答我,
我还是不理解,老菜鸟: 说的,设定值需要转化的意思,我都是用 工程值直接做的啊,SP&PV都是工程物理量啊,

请教啊

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2007-07-31 20:13:00
15楼
TO guafa58:
1、PID设定值可以是工程值也可以是存储器变量值;需要转换的原因是在我的叙述中PID设定值采用的是存储器变量值;
2、如果SP&PV都为工程值,SP就不需要转换;
3、如果SP&PV都为工程值,设定控制35度,就不需要转化;
4、需要说明的是,我不建议直接把人机上的设定值作为PID的设定参考值。原因:
    A、PID无法接受小数值,如果我设定35.5度,那设定值到底设定为多少呢?
    B、如果都是整数,因为工程值太小,产生的偏差也很小,要达到理想的控制要求,可能比你需要调得很大,这在调试中可能是一个很大的问题,难于调试。

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2007-07-31 20:16:00
16楼
TO 春华★秋实:
1、“在画面中设定0—500的某个数,不可能让操作员计算出来6400-32000的值”——确实如此;
2、这个转换一般在S7中做,方便一点;如果你不嫌麻烦,也可以在人机上做;
3、6400-3200是S7-200,如果是S7-300+WINCC,在WINCC上也应该可以做出这个转换,因为原理都相同。

guafa58

  • 精华:1帖
  • 求助:0帖
  • 帖子:43帖 | 2142回
  • 年度积分:4
  • 历史总积分:3969
  • 注册:2006年1月13日
发表于:2007-08-01 11:42:00
17楼
谢谢!老菜鸟的解答!完全理解你说的!

目前,我用的很多的S7-300,我想应该不存在,你说的PID无法接受小数值,那个是没有问题的,你说的可能是S7200或其他的PLC,

学习了,再次感谢!欢迎讨论!

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2007-08-01 13:47:00
18楼
to  老菜鸟:
3、6400-3200是S7-200,如果是S7-300+WINCC,在WINCC上也应该可以做出这个转换,因为原理都相同。
我试了很多,就是做不出来,还请指点啊。我们在I/O域输入的只是给变量的一个数,怎么把转换后的数送给这个变量呢?

ewen

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 51回
  • 年度积分:0
  • 历史总积分:596
  • 注册:2005年9月12日
发表于:2007-08-01 21:14:00
19楼
用FC105就可以了,
OUT = [ ((PIW_nr (IN) -K1)/(K2-1)) * (HI_LIM-O_LIM)] + LO_LIM

如果是单极:K1=0,k2=27648   ,Hi_lim和Low_lim:是量程范围.
输入信号没有负的值时,为单极.

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2007-08-02 08:20:00
20楼
听说FC105没有零点调整,得到的数据不很精确。

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页