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

建议:模拟量转换 点击:1192 | 回复:30



欢欢123

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-25 10:46:00
楼主
我是欢欢~~~我有个想法,也许是有点过分吧!不过我想很多像我这样的新接触工控的人都很想要,
书到用时方恨少啊!到工作的时候才知道学习的重要性!可是公司给我们学习的时间越来越少,找个工作也越来越不容易,所以咱必须的好好学习好好工作啊!

    所以有个提别严峻的问题摆在我们的面前,我们对PLC认识实在太少啦!所以希望各位老大帮帮忙!
我有这样一个建议,在写程序的时候经常遇到模拟量的问题!所以要转换啊!这很麻烦!要是能所有的模拟量都有一个模块这样就方便多啦!

   所以我的意思是希望谁有时间给写下!



欢欢123

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-25 10:47:00
1楼
支持我的朋友顶下哈~~~~~

狼行其道

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 1785回
  • 年度积分:0
  • 历史总积分:109
  • 注册:2004年2月29日
发表于:2008-01-25 11:58:00
2楼
嘻嘻~~

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 12:52:00
3楼
4-20mA转换如下: A( L #in_put L 0 I ) JCN _002 L 2.764800e+004 T #temp1 JU _003 _002: L #in_put ITD DTR T #temp1 JU _003 _003: L #ph L #pl -R L #temp1 *R L 2.764800e+004 /R L #pl +R T #out_put
其中:ph pl 分别为测量仪表的上下限,real型;in_put为模块测量得到的字,WORD型;temp1为中间变量,real型;out_put为电脑显示的测量值,real型。 当然,很多仪表下限都是0,这样_003可简化。

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 13:01:00
4楼
奇怪,程序第四行显示不出来啊,字怎么也变成斜的了?
第四行  <I

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 13:02:00
5楼
标准型热电偶和热电阻转换如下:
      L     #in_put
      ITD   
      DTR   
      L     1.000000e+001
      /R    
      T     #out_put

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 13:17:00
6楼
孔板流量计等一些需要开方,此时需要小信号切除或对其作线性处理,其程序如下:
      A(    
      L     #in_put
      L     1000        //小信号字值
      <I    
      )     
      JCN   _001
      JU    _004
_001: A(    
      L     #in_put
      L     27648
      >I    
      )     
      JCN   _002
      L     2.764800e+004
      T     #temp1
      JU    _003
_002: L     #in_put
      ITD   
      DTR   
      T     #temp1
      JU    _003
_003: L     #ph            //_003部分为开方处理
      L     #pl
      -R    
      T     #temp2
      L     #temp1
      L     2.764800e+004
      /R    
      SQRT  
      L     #temp2
      *R    
      L     #pl
      +R    
      T     #out_put
_004: L     #in_put     //_004部分为线性处理
      ITD   
      DTR   
      L     2.764800e+004
      /R    
      L     #temp2
      *R    
      L     #pl
      +R    
      T     #out_put

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 13:44:00
7楼
流量累计及清零程序:
在OB35中编写,循环时间设为100(ms),默认。
      L     MD     0            //转换后的测量值
      L     3.600000e+004
      /R    
      L     MD   100
      +R    
      T     MD   100            //累计存放位置

      A     M     10.0           //清零指令
      JCN   m001
      L     0.000000e+000
      T     MD   100
      R     M     10.0         //复位清零指令
m001: NOP   0

adcontrol

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 12回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2008-01-25 13:50:00
8楼
不用自己写吧,FC105不是很好用吗?

欢欢123

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-25 14:33:00
9楼
老大你太伟大啦!还有0-10V的传感器哪!哈哈!你写写个吧!~~~

欢欢123

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-25 14:33:00
10楼
老大你太伟大啦!还有0-10V的传感器哪!哈哈!你写写个吧!~~~

xhimage

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年2月24日
发表于:2008-01-25 15:03:00
11楼
请问,用过s7 200的pid吗?
输出模拟量可以双极吗?

欢欢123

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-25 15:12:00
12楼
没用过啊!我也不知道!

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 15:52:00
13楼
0-10V的和4-20mA的一摸一样

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 16:01:00
14楼
TO xhimage:
200中双极的好像只有电压输出啊,-10V—10V,单极输出只有0-20mA,不知道是不是...    若要手、自动切换,可使用PID向导,我不会自己编写;如果单手动输出,可以自己做程序哈...

Bayou

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2005年7月24日
发表于:2008-01-25 16:05:00
15楼
 SET                               // if(BIPOLAR=0)
      A     #BIPOLAR                    //   .
      JC    EL01                        // {
      L     0.000000e+000               //   K1=0
      T     #K1                         //     .
      JU    EI01                        // } else {
EL01: L     -2.764800e+004              //   K1=-27648.0
      T     #K1                         //     .
EI01: NOP   0                           // }
      L     2.764800e+004               // K2=+27648.0
      T     #K2                         //   .

// convert input (IN) to real

      L     #IN                         // ACC1=IN
      ITD                               // convert to double integer 
      DTR                               // convert to real
      T     #IN_REAL                    // IN_REAL-IN as a real

// determine SPAN = HI_LIM - LO_LIM

      L     #HI_LIM                     // SPAN=HI_LIM-LO_LIM
      L     #LO_LIM                     // .
      -R                                // .
      T     #SPAN                       // .

// If the input value is outside the K1 and K2 range, the output
// is clamped to the nearer of either the LO_LIM or the HI_LIM 
// and an error is logged. If the input value is exactly at a limit the
// output will be set to the computed limit with no error returned.
//     changed 2/14/00 by ERI per RQ210693
      L     #IN_REAL                    // if(IN_REAL<K1)
      L     #K1                         //   .
      >=R                               //   .
      JC    EL02                        // {
      L     8                           //   error
      T     #RET_VAL                    //     .
      L     #LO_LIM                     //     ACC1=LO_LIM
      T     #OUT                        //   OUT=ACC1
      JU    FAIL                        //   error
EL02: POP                               // } else {
      L     #K2                         //   if(IN_REAL>K2)
      <=R                               //     .
      JC    EI04                        //   {
      L     8                           //     error
      T     #RET_VAL                    //       .
      L     #HI_LIM                     //       ACC1=HI_LIM
      T     #OUT                        //     OUT=ACC1
      JU    FAIL                        //     error
EI04: NOP   0                           //   }
      NOP   0                           // }

// scale the input

      L     #K2                         // TEMP1=K2-K1
      L     #K1                         //   .
      -R                                //   .
      T     #TEMP1                      //   .
      L     #IN_REAL                    // IN_REAL-K1
      L     #K1                         //   .
      -R                                //   .
      L     #TEMP1                      // divide by TEMP1
      /R                                //   .
      L     #SPAN                       // multiply by SPAN
      *R                                //   .
      L     #LO_LIM                     // add LO_LIM
      +R                                //   .
      T     #OUT                        // OUT=scale(IN_REAL)

// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.

      L     0                           // return error code 0
      T     #RET_VAL
      SET                               // RLO = 1 (NO ERROR)
      JU    SVBR                        // 
FAIL: CLR                               // RLO = 0 (ERROR)
SVBR: SAVE                              // BR = RLO

Bayou

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2005年7月24日
发表于:2008-01-25 16:06:00
16楼
SET                               // if(BIPOLAR=0)
      A     #BIPOLAR                    //   .
      JC    EL01                        // {
      L     0.000000e+000               //   K1=0
      T     #K1                         //     .
      JU    EI01                        // } else {
EL01: L     -2.764800e+004              //   K1=-27648.0
      T     #K1                         //     .
EI01: NOP   0                           // }
      L     2.764800e+004               // K2=+27648.0
      T     #K2                         //   .

// determine SPAN = HI_LIM - LO_LIM

      L     #HI_LIM                     // SPAN=HI_LIM-LO_LIM
      L     #LO_LIM                     //   .
      -R                                //   .
      T     #SPAN                       //   .

// If the input value is outside the HI_LIM and LO_LIM range, the output
// is clamped to the nearer of either K1 or K2 and an error is logged.
// If the input value is exactly at a limit the output will be set to
// the computed limit with no error returned.

      L     #SPAN                       // if(SPAN<0) reverse scaling
      L     0.000000e+000               //   .
      <R                                //   .
      JCN   EL02                        // {
      L     #IN                         //   if(IN<HI_LIM)
      L     #HI_LIM                     //     .
      >=R                               //     .
      JC    EI03                        //   { 
      L     8                           //     error
      T     #RET_VAL                    //       .
      L     #K1                         //     ACC1=K1
      JU    WRIT                        //     write OUT
EI03: NOP   0                           //   }
      POP                               //   if(IN>LO_LIM)
      L     #LO_LIM                     //     .
      <=R                               //     .
      JC    EI04                        //   {
      L     8                           //     error
      T     #RET_VAL                    //       .
      L     #K2                         //     ACC1=K2
      JU    WRIT                        //     write OUT
EI04: NOP   0                           //   }
      JU    EI02                        // } else { direct scaling
EL02: L     #IN                         //   if(IN<LO_LIM)
      L     #LO_LIM                     //     .
      >=R                               //     .
      JC    EI05                        //   { 
      L     8                           //     error
      T     #RET_VAL                    //       .
      L     #K1                         //     ACC1=K1
      JU    WRIT                        //     write OUT
EI05: NOP   0                           //   }
      POP                               //   if(IN>HI_LIM)
      L     #HI_LIM                     //     .
      <=R                               //     .
      JC    EI06                        //   {
      L     8                           //     error
      T     #RET_VAL                    //       .
      L     #K2                         //     ACC1=K2
      JU    WRIT                        //     write OUT
EI06: NOP   0                           //   }
EI02: NOP   0                           // }
      JU    CALC                        // perform unscale calculation
WRIT: TRUNC                             // convert to integer
      T     #OUT                        // OUT=ACC1
      JU    FAIL                        // error

// unscale the input

CALC: L     #K2                         // TEMP1=K2-K1
      L     #K1                         //   .
      -R                                //   .
      T     #TEMP1                      //   .
      L     #IN                         // IN-LO_LIM
      L     #LO_LIM                     //   .
      -R                                //   .
      L     #SPAN                       // divide by SPAN
      /R                                //   .
      L     #TEMP1                      // multiply by TEMP1
      *R                                //   .
      L     #K1                         // add K1
      +R                                //   .
      TRUNC                             // convert to DINT
      T     #OUT                        // OUT=unscale(IN)

// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.

      L     0                           // return error code 0
      T     #RET_VAL
      SET                               // RLO = 1 (NO ERROR)
      JU    SVBR                        // 
FAIL: CLR                               // RLO = 0 (ERROR)
SVBR: SAVE                              // BR = RLO

胖丫

  • 精华:1帖
  • 求助:0帖
  • 帖子:126帖 | 971回
  • 年度积分:0
  • 历史总积分:1644
  • 注册:2007年7月23日
发表于:2008-01-25 16:07:00
17楼
高人啊,这么多人用语句表写程序。

城不思汗

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 22回
  • 年度积分:0
  • 历史总积分:374
  • 注册:2004年11月16日
发表于:2008-01-25 16:15:00
18楼
本来就能所有的模拟量都有一个模块

春华★秋实

  • 精华:0帖
  • 求助:0帖
  • 帖子:103帖 | 1038回
  • 年度积分:0
  • 历史总积分:3013
  • 注册:2007年5月17日
发表于:2008-01-25 16:34:00
19楼
to bayou:
这位朋友,注释都用英文?能否改为中文发表一下呢?我看不懂英文。输入输出或是中间变量注释一下噻....
还有,你写的不是PID吧,我看了一下,一点都不像。

欢欢123

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 90回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2008年1月10日
发表于:2008-01-28 09:08:00
20楼
我也看不懂英文的!早知道我好好学英语啦!HOHO~~

热门招聘
首页 上一页 1 2 下一页 尾页