大批量仪表量程转换(修正版)

已锁定

柳叶飘飘

  • 帖子

    95
  • 精华

    7
  • 被关注

    194

论坛等级:侠圣

注册时间:2016-12-08

黄金 黄金 如何晋级?

大批量仪表量程转换(修正版)

3333

38

2016-12-28 23:24:47

本程序想给偷懒不想用FC105一个个转换仪表量程使用(假如有几十上百个一个个转换比较费时间),即批量话转换。刚写好就发出来了 各位测试哈吧 不明白请回帖

第一次发的程序有点问题 以下是修改后的程序给大家测试。

源代码如下

//##############################################

//实现批量化的量程转换

//比较适合采样点特别多的情况

//仅适合需要量程转换的通道比如电流4~20MA电压+-10V

//默认最大1000个仪表以内可以修改

//############################################

FUNCTION_BLOCK FB80


TITLE = 'AI_OUT'

//

// 模拟量输入量程批量转换

//

VERSION: '1.0'

AUTHOR: EBCLW

NAME: AI_OUT

FAMILY: EBC


KNOW_HOW_PROTECT



// Block Parameters

VAR_INPUT

    ADDRESS:INT:=512;//开始的PIW地址

    NUM:INT:=1;//仪表数量即多少个PIW地址

    DATA:BLOCK_DB;  //用于存放数据的量程 偏差设定  

    //DB数据结构为(每个仪表均是这样的结构建议用STL生成)

    //------------------

    // 量程上限 REAL

    // 量程下限 REAL

    // 修正偏差 REAL

    //-------------------

    

    BIPOLAR:ARRAY[1..1000] OF BOOL;//1为双极性,0为单极性

END_VAR


VAR_IN_OUT

    // I/O Parameters

END_VAR


VAR_OUTPUT

    //默认一千个

   OUT:ARRAY[1..1000] OF REAL;

   ERR:ARRAY[1..1000]OF BOOL;

    // Output Parameters


END_VAR



VAR_TEMP

     I:INT;//循环变量


END_VAR

VAR

    K1:REAL;

    K2:REAL;


END_VAR

//循环批量转换循环体

FOR I:= 1 TO NUM  BY 1 DO

//判断是否是双极性

 IF BIPOLAR[I] THEN

    K1:= -27648.0;

    K2:= 27648.0;

       IF  (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) <-27649) OR (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) >27649) THEN  //双极性低于正常或者高于正常则通道标志位置1

          ERR[I]:=1;

        ELSE

          ERR[I]:=0;

       END_IF;       

   ELSE

    K1:=0.0;

    K2:=27648.0;

    //判断是否在量程范围内不在测量范围内即对该仪表报警

      IF  (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) <-1) OR (WORD_TO_INT(PIW[ADDRESS +(I-1)*2]) >27649) THEN  //单极性低于正常或者高于正常则通道标志位置1

          ERR[I]:=1;

        ELSE

          ERR[I]:=0;

      END_IF;

 END_IF;


 //若在量程范围内就做量程转换

 //采用FC105相同的计算公式OUT = ((FLOAT (IN) -K1)/(K2-K1)) * (HI_LIM-LO_LIM) + LO_LIM

 //增加一个修正偏差公式改为OUT = ((FLOAT (IN) -K1)/(K2-K1)) * (HI_LIM-LO_LIM) + LO_LIM + OFFSET

                     


OUT[I]:=(INT_TO_REAL(WORD_TO_INT(PIW[ADDRESS +(I-1)*2]))-K1)/(K2-K1)*(DWORD_TO_REAL(DATA.DD[(I-1)*12])-DWORD_TO_REAL(DATA.DD[(I-1)*12+4]))+DWORD_TO_REAL(DATA.DD[(I-1)*12+4])+DWORD_TO_REAL(DATA.DD[(I-1)*12+8]);



END_FOR;




END_FUNCTION_BLOCK

//原创程序 欢迎交流 QQ275578306?

//本程序编译通过测试,有BUG的话请告知

//修改了双极性的问题20161229

大批量仪表量程转换(修正版) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。