您的位置:控制工程论坛网论坛 » 教程与手册 » SCL学习心得

myron_mao

myron_mao   |   当前状态:离线

总积分:978  2024年可用积分:0

注册时间: 2007-10-19

最后登录时间: 2009-10-22

空间 发短消息加为好友

SCL学习心得

myron_mao  发表于 2007/12/6 17:33:16      1900 查看 6 回复  [上一主题]  [下一主题]

手机阅读

原创:SCL学习心得

,今天看见有兄弟找scl中文资料,小弟我就当是抛砖引玉吧

2004.1.14
1、      SCL程序可以在CPU314及其以上的S7(包括400)中运行。


2、      SCL程序创建在”S7 Program”-”Sources”下面。
S7-Program
   -Blocks(e.g. FB,OB)
   -Sources(e.g.SCL source file)
   -Symbols

3、      程序结构
FB     FUNCTION_BLOCK  fb_name
       
        END_FUNCTION_BLOCK
FC     FUNCTION fc_namefunction type
        
        END_FUNCTION
OB     ORGANIZATION_BLOCK ob_name

        END_ORGANIZATION_BLOCK
DB     DATA_BLOCK db_name
 
        END_DATA_BLOCK
UDT    TYPE udt_name

        END_TYPE


4、      属性定义和程序注释
例如:
FUNCTION_BLOCK FB10
This is a block comment.
TITLE = ’Mean_Value’
VERSION  ’2.1’
KNOW_HOW_PROTECT
AUTHOR  AUT_1

 

 

 

5、      变量定义
Data      Syntax      FB      FC      OB      DB      UDT
Constants      CONSTdeclaration listEND_CONST      X      X      X           
Labels       LABELdeclaration listEND_LABEL      X      X      X           
Temporary Variables      VAR_TEMP declaration listEND_VAR X X X      X      X      X           
Static variables      VARdeclaration listEND_VAR      X      X      X      X      X
Input parameters      VAR_INPUTdeclaration listEND_VAR      X      X                 
Output parameters      VAR_OUTPUTdeclaration listEND_VAR      X      X                 
Inout parameters      VAR_IN_OUTdeclaration listEND_VAR      X      X                 

6、FC结构
FUNCTION FC11 REAL如果不需要返回值,用VOID关键字
VAR_INPUT
x1 REAL ;
x2 REAL ;
x3 REAL ;
x4 REAL ;
END_VAR
VAR_OUTPUT
Q2 REAL ;
END_VAR
BEGIN
 Return value from function
FC11= SQRT( (x2 - x1)2 + (x4 - x3) 2 ) ;
Q2= x1 ;
END_FUNCTION
7、自己写了一个简单的程序
OB1:
 
FC1用SCL编写:
FUNCTION fc1INT
VAR_INPUT
    aINT;
END_VAR
begin
fc1=a+10;       
end_FUNCTION

运行后:每次m0.0从0变1,就调用FC1一次,mw18里面的数据加10。

2004.1.15
问题:SCL如何调用其他SCL以及用LAD等编写的程序?
写一个有循环、判断等基本语句组成的程序。
参数使用问题?(直接使用实际地址?参数传递问题)
如何在线调试SCL程序(debug)
1、      在SCL里面调用LAD或者STL写的块
先用STL或者LAD创建一个FC2:
定义一个输入参数:in1(int型);一个输出参数:out1(int型)
语句表如下:
           L     #in1
           L     #in1
           +I   
           T     #out1
           NOP   0
在下面写的SCL里面调用FC2:
FUNCTION fc1INT
VAR_INPUT
    aINT;
END_VAR
VAR_TEMP
    bINT;
end_var   
begin
fc1=a+10;       
fc2(in1=a,out1=b);
fc1=b;
end_FUNCTION

2、在SCL里面调用其他SCL写的块
FUNCTION fc1INT
VAR_INPUT
    aINT;
END_VAR
VAR_TEMP
    bINT;
end_var   
BEGIN     
fc3(in1=a,out1=b);调用fc3
fc1=b;
end_FUNCTION

FUNCTION fc3void无返回值
VAR_INPUT
    in1INT;
END_VAR
VAR_OUTPUT
    out1INT;
end_var   
begin
out1=in1+10;
end_FUNCTION

3、一个带有循环、判断等基本语句的程序
FUNCTION fc4VOID
VAR_INPUT
   in1BOOL; 
   in2INT;
END_VAR   
VAR_OUTPUT
    out1BOOL;
    out3BOOL;
    out2INT;
END_VAR
VAR定义一个静态变量,用来存储块调用之间的数据
    temp1BOOL;
END_VAR
VAR_TEMP
    temp2INT;
END_VAR
BEGIN
IF in1=false AND temp1=true THEN检验下跳沿
   out1=true; 
ELSE
   out1=false;    
END_IF;   
IF in1=true AND temp1=false THEN检验上跳沿
   out3=true;
ELSE
   out3=false;    
END_IF;    
temp1=in1;
FOR temp2=1 TO 10  BY 2 DO省略了关键字by,就默认加1
    out2=in2+out2;
END_FOR; 
   
END_FUNCTION
4、SCL中直接使用绝对地址
FUNCTION fc1VOID
BEGIN
in1=in1+10;in1在符号表里面已经定义为int型,存储区为mw0
IF m0.0=false then这里直接引用实际地址
   m0.0=true;
ELSE
    m0.0=false;
END_IF;   
end_FUNCTION
5、如何在线调试SCL程序
注:仅400可以设置断点(breakpoint)以及单步执行

1楼 0 0 回复
总共 , 当前 /