西门子scl语言和c语言,西门子SCL语言编程学习心得
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_name:function 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 CONST
declaration list
END_CONST X X X
Labels LABEL
declaration list
END_LABEL X X X
Temporary Variables VAR_TEMP declaration list
END_VAR X X X
X X X
Static variables VAR
declaration list
END_VAR
X X X X X
Input parameters VAR_INPUT
declaration list
END_VAR
X X
Output parameters VAR_OUTPUT
declaration list
END_VAR
X X
In/out parameters VAR_IN_OUT
declaration list
END_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 fc1:INT
VAR_INPUT
a:INT;
END_VAR
begin
fc1:=a+10;
end_FUNCTION
运行后:每次m0.0从0变1,就挪用FC1一次,mw18里面的数据加10。
问题: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 fc1:INT
VAR_INPUT
a:INT;
END_VAR
VAR_TEMP
b:INT;
end_var
begin
//fc1:=a+10;
fc2(in1:=a,out1:=b);
fc1:=b;
end_FUNCTION
2、在SCL里面挪用其他SCL写的块
FUNCTION fc1:INT
VAR_INPUT
a:INT;
END_VAR
VAR_TEMP
b:INT;
end_var
BEGIN
fc3(in1:=a,out1:=b);//挪用fc3
fc1:=b;
end_FUNCTION
FUNCTION fc3:void//无返回值
VAR_INPUT
in1:INT;
END_VAR
VAR_OUTPUT
out1:INT;
end_var
begin
out1:=in1+10;
end_FUNCTION
3、一个带有循环、判断等基本语句的程序
FUNCTION fc4:VOID
VAR_INPUT
in1:BOOL;
in2:INT;
END_VAR
VAR_OUTPUT
out1:BOOL;
out3:BOOL;
out2:INT;
END_VAR
VAR//界说一个静态变量,用来存储块挪用之间的数据
temp1:BOOL;
END_VAR
VAR_TEMP
temp2:INT;
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 fc1:VOID
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)以及单步执行
学习基本完毕!已经了解了编写SCL程序的基本体例!
在数据转换方面,SCL和LAD有一些区别,SCL的数据转换有两种类型:
? Implicit数据转换,即如果数据类型不匹配,Scl会自动进行默认的数据转换
Classes Conversion Order
Any_bit Bool>byte>Word>Dword
Any_num INT>DINT>Real
例如两个数相加,一个是int型,一个是real型,则在编译的时候int型数据会被系统转换为real型再进行运算,结果只能寄存在real型中。
? Explicit 数据转换
由用户程序用相应的功能块进行数据转换。
而LAD没有Implicit数据转换,介入运算的两个数必须类型一致。
如果给变量赋值,好比:mw0:=a1;(这里a1是界说好的int型的临时变量),则编译会提示出错“毛病的数据类型“,这是因为编译器不认为mw0是一个有效的int型变量,除非在符号内外面界说了一个符号好比f11为mw0,int型,则f11:=a1;可以编译通过;
另外DB块的使用与LAD/STL也有所不合,在LAD或者STL里面如果要依照db里面界说的符号名来挪用db里面的变量,则必须事先给db界说一个名字,然后写成"DB1_IN".P1(db1_in是事先界说好的db的符号名,p1则是db1中的dbw0存储区)。而在scl中,则可以写成:db1.p1(事先无效界说db的符号名)或者db1_in.p1都可以
DATE_AND_TIME类型的数据不克不及直接赋值(编译不会报错),可以依照数据结构分化赋值:
DATE_AND_TIME是依照下面的结构:
1BYTE YEAR
1BYTE MONTH
1BYTE DAY
1BYTE HOUR
1BYTE MINUTE
1BYTE SECOND
1BYTE MSD(MOST SIGNIFICANT DECADE) OF MS
1BYTE MSD(LEAST SIGNIFICANT DECADE) OF MS
1BYTE WEEKDAY
OB块的temp变量,Help里面说:“To execute, each OB alwaysrequires 20 bytes of local data for the operating system. You mustdeclare an array for this with an identifier.”
实际上为了编程便利,可以手动界说变量而不消系统模板界说的20byte的array(数组)。因为有些变量不是byte类型的。手动界说变量必须主意必须把所有变量界说完成,不然会因为变量界说的不敷造成temp数据区不敷年夜,就不克不及返回任何结果!!!
关于FC和FB的区别
对需要在运行过程中需要“记住”的中间变量,可采取静态变量。可是由于FC的每个静态变量是固定的地址存储,那么FC每次被挪用都是读写同一个静态变量,如果FC在一次循环中被屡次挪用,则静态变量在每次循环中被屡次读写;而FB的静态变量则是由指定的DB存储因此每个被挪用的FB都有其自力的存储空间,则如果FB在一次循环中被屡次挪用,其静态变量也执偾被读写一次。
更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复
西门子scl语言和c语言,西门子SCL语言编程学习心得相关推荐
- c语言编程培训心得体会,编程培训个人心得体会 编程学习心得
<编程培训个人心得体会 编程学习心得>由会员分享,可在线阅读,更多相关<编程培训个人心得体会 编程学习心得(4页珍藏版)>请在人人文库网上搜索. 1.编程培训个人心得体会 编程 ...
- c语言编程基础心得,C语言编程学习心得体会
C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.本文是C语言编程学习心得,希望对大家有帮助. C语 ...
- 一万字一篇文20分钟学会C语言和Python,十四年编程经验老鸟传授经验之道
前言 昨天在直播中有粉丝问我如何快速的对编程语言入门,我想这个问题是有必要让大家知道的,相必也有很多新手对于如何快速完成编程语言的入门学习很感兴趣,本篇文将会使用 C 语言以及 Python 为例,做 ...
- 《数据结构与算法 Python语言实现》书评与学习心得
做为Python小白,本人几个月前读完了Mark Lutz的1400页巨著<Learning Python>(太TM啰嗦了,读过的请举手),本打算继续学习下一步<Programmin ...
- 西门子scl语言和c语言,西门子PLC的SCL语言与STL语言比较一下-工业支持中心-西门子中国...
1. STL有点类似汇编语言,和机器码对应,无论哪种语言写的PLC程序都可以转换成STL查看,所以掌握基本的STL指令和语法是很有帮助的.另外STL直接操作寄存器,实现同样功能时可以减少运算量和寄存器 ...
- c语言和c 自学,自学C语言最常遇到的七个问题
自学C语言最常遇到的七个问题 C语言的非数值处理功能很强,因此它被广泛地应用于数据库管理系统和应用软件.下面是小编为大家介绍的自学C语言最常遇到的七个问题,希望对大家有帮助! 问题一:C语言中%un是 ...
- c语言和python哪个自学好-自学编程应该从c语言还是python入手?
我不建议你从"基础"开始,尤其是什么:C语言,数据结构,离散数学--之类的,那是把你逼疯的节奏(感觉这是知乎学院派的风格).如果你自觉是神人级别的,当我没说. 其实软件工程发展到今 ...
- 半编译半解释的Java语言和C++、Python等语言的区别
1. 引言 我们编写的代码需要按照某些组织制定的规范,对于程序员来说,能够轻松理解:但是对于计算机来说,它们根本无法理解我们编写的代码,只能识别二进制指令. 2. 编译型语言(如C++)和解释型语言( ...
- c语言和java和汇编语言_C语言和汇编语言的区别是什么?
展开全部 区别如下: (1)两者编译组成不同.汇编语言是将由0.1组成的机器语言用具有简单语义的32313133353236313431303231363533e4b893e5b19e31333366 ...
最新文章
- 依赖类型dependency type在maven中的作用
- java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
- POJ 1703 Find them, Catch them
- 字符串关键字的散列映射 (25 分)【详细解析】
- 17.前端路由router-07keep-alive
- 关于xp操作系统下使用VC6++编写的上位机软件在win10中运行的问题
- 特殊用途的IP地址介绍
- 不想用收费版微软OFFICE和企业版金山WPS,猿大师办公助手支持哪个版本呢?
- Ubuntu系统文件被上锁了怎么编辑:Ubuntu系统获得读写权限
- 软件测试面试题:微信红包如何测试?
- 比特率与波特率有何差别?—Vecloud
- lpush rpush 区别_php-redis中文参考手册_list容器相关_lPush_rPush_lPushx_rPu...
- 【C#】利用读卡器对IC卡进行读写、加密等操作,源码下载
- 哈工大2022计算机系统大作业
- 教你如何快速提取视频文案
- PPT模板、电子书、论文、壁纸、视频、各类数据...走出信息茧房——资源网站全推荐
- 微信小程序推荐大全之201~300个
- 景区宣传片制作的作用
- 一顿操作猛如虎,细说MySQL索引的区别
- ResourceUtils
热门文章
- 多因子降维法(MDR,Multifactor Dimensionality Reduction )
- Biopython-Chapter3.生物序列对象
- RNA-seq最新利器——全长转录组测序
- 多媒体计算机系统是能进行获取,第六章 7 多媒体计算机系统.pdf
- python 归一化_python 归一化
- 计算机服务修复,修复服务注册缺失或已损坏错误在win10中的方法
- tensorflow gan 网络 示例
- python 循环批量生成变量
- python 同时遍历两个列表并组成一个字典
- 服务器 SSH客户端软件 FileZilla 和 xshell