登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:如何让cpu是31c的plc模拟量模块输出4-20ma的电流

点击:5139 回复:10

我用的plc的cpu是313c的,313c的特点是cpu本身集成了模拟量输入输出口,最近在做一个实验,是让模拟量模块输出4-20ma的电流,从程序中随便输入一个0-20之间的值,然后从输出口输出这个值,再用这个值去控制变频器,研究了很多天了,plc的模拟输出口为什么一直就是没有电流输出呢?模拟I/O模块的输出方式已经改成电流的形式了,还是不行。麻烦各位高手给指点一下,最好给个梯形图程序看看,谢谢了,很着急用[/color][/color]
13-03-15 10:50
做测试的话,可以再OB1里面写一个MOV指令,西门子模拟量输出4-20MA对应的是0-27648的值,你可以随便输出一个值做下测试,如果运行正常但是检测不到值,那就需要检查外围的接线了。
13-03-15 11:41
外围需要接线吗?在输出口用电压表不是可以直接测得啊,真的需要接线吗
13-03-15 14:52
附件中是我写的程序,已经无错编译并下载斤plc中,运行后,打开监视,有数据显示,但是用万能表测输出口电流还是没有啊,到底是怎么回事呢?
附件
附件
13-03-15 16:43
这个程序应该没问题,你在程序中将MW10赋值(4--20),将会有相对应的模拟量的值输出到第一个模拟量输出端
附件:
[本地下载]
13-03-15 19:24
太感谢你了,你写的程序真的太高明了,我也就只能写个简单点的程序,你看着我写的那个程序下到plc中,输出口会有电流吗?我测过了,是没有呢,那是什么原因呢
13-03-15 22:09

引用 scp09 在 2013/3/15 22:09:44 发言【内容省略】

输出线性化应使用Fc106.
Good Luck~
13-03-15 22:50
哦?我用FC106不会呢,我试过了,不行,你能不能给我写个程序看看看啊,谢谢了
13-03-16 09:52

引用 scp09 在 2013/3/15 22:09:44 发言【内容省略】

我看了FC105的程序,它是将一个模拟量输入量-27648----+27648(0---+27648)的量转换到所需要的范围(如:0---100)    你的程序的输出值是4--20   那么输出到模拟量的值是可以忽略不计的!!
你可以修改FC105的程序来达到你的目的,以下是FC105的程序,希望对你有帮助!!
FC105 - <离线>
"SCALE" Scaling Values
名称: SCALE 系列: CONVERT
名称    数据类型     地址           注释
+++++++++++++++++++IN++++++++++++++++++++++++
IN      Int       0.0         input value to be scaled
HI_LIM  Real      2.0          upper limit in engineering units
LO_LIM  Real      6.0         lower limit in engineering units
BIPOLAR Bool      10.0        1=bipolar; 0=unipolar
+++++++++++++++++++OUT++++++++++++++++++++++
OUT     Real       14.0        result of the scale conversion
+++++++++++++++++++TEMP++++++++++++++++++++++++
IN_REAL Real       0.0 input value as a REAL number
K1      Real       4.0 low limit for input value
K2      Real       8.0 high limit for input value
SPAN    Real       12.0 HI_LIM - LO_LIM
TEMP1   Real       16.0 temporary result
+++++++++++++++++++RETURN+++++++++++++++++++++++
RET_VAL Word       12.0
//FC105   SCALING VALUES
//set K1 and K2 constants based upon BIPOLAR
      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      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
13-03-16 12:42
怎样去测模拟量输出模块的电流呢
13-03-17 21:34

上一页下一页

工控新闻

更多新闻资讯