大量处理模拟量数据的例程

已锁定

说不明白

  • 帖子

    20
  • 精华

    0
  • 被关注

    4

论坛等级:游民

注册时间:2010-10-19

普通 普通 如何晋级?

大量处理模拟量数据的例程

694

0

2011-07-15 16:59:50

在书上面看到的一个很好的列子,结合个人做过的工程项目的一些经验,从新组织了一下,主要针对在s300中如果读取大量的模拟量模块采集信号就会很繁琐,下面给出一个通用程序。利用它可方便的把AO模块的数值读回并顺序存入相应的数据块。这是小弟第一次发帖,定有很多不足之处,还希望各位大神多多体谅和指导。
DATA_BLOCK "ao"
TITLE =
VERSION : 0.1


STRUCT
AO1 : REAL ; //临时占位符变量
AO11 : REAL ;
AO2 : REAL ;
AO3 : REAL ;
AO4 : REAL ;
AO5 : REAL ;
AO6 : REAL ;
AO7 : REAL ;
AO8 : REAL ;
END_STRUCT ;
BEGIN
AO1 := 0.000000e+000;
AO11 := 0.000000e+000;
AO2 := 0.000000e+000;
AO3 := 0.000000e+000;
AO4 := 0.000000e+000;
AO5 := 0.000000e+000;
AO6 := 0.000000e+000;
AO7 := 0.000000e+000;
AO8 := 0.000000e+000;
END_DATA_BLOCK

FUNCTION "read_AO" : BOOL
TITLE =
// 在s300中如果读取大量的模拟量模块采集信号就会很繁琐,下面给出一个通用程序。
//// 利用它可方便的把AO模块的数值读回并顺序存入相应的数据块。
VERSION : 0.1


VAR_INPUT
PIW_ADDR : INT ;
DB_NO : INT ;
CH_LEN : INT ;
DBW_ADDR : INT ;
END_VAR
BEGIN
NETWORK
TITLE =

//save
TAR1 LD 10;
TAR2 LD 14;
L DBNO;
T LW 18;
L DINO;
T LW 20;


//打开数据快
L #DB_NO;
T LW 0;
OPN DB [LW 0];
//初始化指针
L P#0.0;
L #PIW_ADDR;
SLD 3;
+D ;
LAR1 ;
L P#0.0;
L #DBW_ADDR;
SLD 3;
+D ;
LAR2 ;
//loop
L #CH_LEN;
a: T LW 2;
L PIW [AR1,P#0.0];
ITD ;
L L#2000;
*D ;
L L#27648;
/D ;
JOS ERR;
T DBD [AR2,P#0.0];
DTR ;
T DBD [AR2,P#0.0];
+AR1 P#2.0;
+AR2 P#4.0;
L LW 2;
LOOP a;
// 还原
LAR1 LD 10;
LAR2 LD 147;
OPN DB [LW 18];
OPN DI [LW 20];
CLR ;
= #RET_VAL;
JU NEXT;

ERR: SET ;
= #RET_VAL;

NEXT: SET ;
SAVE ;
CLR ;

END_FUNCTION

ORGANIZATION_BLOCK "CYCL_EXC"
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1


VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =

CALL "read_AO" (
PIW_ADDR := 256,
DB_NO := 3,
CH_LEN := 8,
DBW_ADDR := 0,
RET_VAL := M 1.0);
NOP 0;


END_ORGANIZATION_BLOCK



大量处理模拟量数据的例程 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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