关于西门子STEP7编程语言与使用技巧书中程序FC100程序中 为什么要吧AI_START_ADD 左移3位?

已锁定

Longlong_Tech

  • 帖子

    560
  • 精华

    2
  • 被关注

    12

论坛等级:侠士

注册时间:2007-03-01

普通 普通 如何晋级?

关于西门子STEP7编程语言与使用技巧书中程序FC100程序中 为什么要吧AI_START_ADD 左移3位?

5543

10

2010-03-19 17:07:58

FUNCTION FC 100 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
AI_START_ADD : INT ;
AI_COUNT : INT ;
DB_SCALE : INT ;
DB_RESULT : INT ;
END_VAR
VAR_TEMP
DBTEMP : WORD ;
DITEMP : WORD ;
AR1TEMP : DWORD ;
AR2TEMP : DWORD ;
LOOPCOUNT : INT ;
DB_SCALE_NOTEMP : INT ;
DB_RESULT_NOTEMP : INT ;
AI_POINTER_BASE : DWORD ;
AI_POINTER_OFFSET : DWORD ;
AI_POINTER : DWORD ;
AI_TEMP : INT ;
DB_SCALE_POINTER : DWORD ;
DB_RESULT_POINTER : DWORD ;
DB_SCALE_HILIM : REAL ;
DB_SCALE_LOWLIM : REAL ;
DB_SCALE_BIPOLAR : BOOL ;
DB_RESULT_AIRESULT_TEMP : REAL ;
DB_RESULT_STATUS_TEMP : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =

L DBNO;
T #DBTEMP;
L DINO;
T #DITEMP;

TAR1 #AR1TEMP;
TAR2 #AR2TEMP; //save system pointer
NETWORK
TITLE =


L #AI_START_ADD;
SLD 3;
T #AI_POINTER_BASE; //load starting address of analog input to pointer

L #DB_SCALE;
T #DB_SCALE_NOTEMP;
OPN DB [#DB_SCALE_NOTEMP]; //open DB for storing parameter

L #DB_RESULT;
T #DB_RESULT_NOTEMP;
OPN DI [#DB_RESULT_NOTEMP]; //open DB for storing result

NETWORK
TITLE =

L 0;
T #LOOPCOUNT;

LOOP: NOP 0;

L #LOOPCOUNT;
L 16;
*D ;
T #AI_POINTER_OFFSET; //get the offset address of analog input


L #AI_POINTER_BASE;
L #AI_POINTER_OFFSET;
+D ;
T #AI_POINTER; //get the pointer address of analog input

L PIW [#AI_POINTER];
T #AI_TEMP; //get the analog input

L #LOOPCOUNT; //get the address of parameter
L 80; //each group length is 10 BYTES
*D ;
T #DB_SCALE_POINTER;
LAR1 ;

L DBD [AR1,P#0.0];
T #DB_SCALE_HILIM; //get SCALE_HILIM

L DBD [AR1,P#4.0];
T #DB_SCALE_LOWLIM; //get SCALE_LOWLIM

SET ;
A DBX [AR1,P#8.0];
= #DB_SCALE_BIPOLAR; //get SCALE_BIPOLAR


CALL "SCALE" (//CALL FC105
IN := #AI_TEMP,
HI_LIM := #DB_SCALE_HILIM,
LO_LIM := #DB_SCALE_LOWLIM,
BIPOLAR := #DB_SCALE_BIPOLAR,
RET_VAL := #DB_RESULT_STATUS_TEMP,
OUT := #DB_RESULT_AIRESULT_TEMP);


L #LOOPCOUNT; //get the address for storing result
L 48; //each group length is 6 BYTES
*D ;
T #DB_RESULT_POINTER;
LAR1 ;

L #DB_RESULT_AIRESULT_TEMP; //save the result scaled
T DID [AR1,P#0.0];

L #DB_RESULT_STATUS_TEMP; //save RET_VAL when calling FC105
T DIW [AR1,P#4.0];

L #LOOPCOUNT;
L 1;
+I ;
T #LOOPCOUNT; //increase 1 to loopcounter

L #AI_COUNT;
>=I ;
JCN LOOP;
NETWORK
TITLE =

LAR1 #AR1TEMP;
LAR2 #AR2TEMP;

OPN DB [#DBTEMP];
OPN DI [#DITEMP]; //restore system pointer
END_FUNCTION

关于西门子STEP7编程语言与使用技巧书中程序FC100程序中 为什么要吧AI_START_ADD 左移3位? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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