首页 上一页 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处理,触摸屏显示的程序/


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



春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2007-08-02 09:29:00
21楼
TO 老菜鸟:3、6400-3200是S7-200,如果是S7-300+WINCC,在WINCC上也应该可以做出这个转换,因为原理都相同。
这个我在WINCC做出来了,但我需要2个变量啊,要设定一个值(操作员设定的那个),假如是变量S1,送给FB41的SV_INT还有一个变量,假如是S2。我这样做的:
1、在画面建立一个I/O域,连接变量S1;
2、在这个I/O域事件→键盘→释放处建了一个C动作:
float a,b;
a=GetTagFloat("S1");
b=(a-Osl)*100/(Osh-Osl); //Osh、Osl为现场仪表的上下值
SetTagFloat("S2",b);
我建的是内部变量,试了一下,只确定了S2和S1的对应关系,请问,这样做可以吗?

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2007-08-02 09:30:00
22楼
TO 老菜鸟:
还有,就是用一个变量应该怎么做?

mxt5232002

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2008年8月26日
发表于:2008-09-07 01:59:45
23楼

热门招聘
相关主题

官方公众号

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