西门子scl语言和c语言,西门子SCL语言编程学习心得[通俗易懂]

西门子scl语言和c语言,西门子SCL语言编程学习心得[通俗易懂]1、SCL程序可以在CPU314及其以上的S7(包含400)中运行。2、SCL程序建立在”S7Program”-”Sources”下面。S7-Program-Blocks(e.g.FB,OB)-Sources(e.g.SCLsourcefile)-Symbols3、程序结构FB:FUNCTION_BLOCKfb_nameEND_FUNCTION_BLOCKFC:FUNCTION…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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在一次循环中被屡次挪用,其静态变量也执偾被读写一次。

更多内容回复查看:

游客,如果您要查看本帖隐藏内容请回复

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184873.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 「 运动控制 」“ADRC自抗扰控制技术”(Active Disturbance Rejection Control)研究

    「 运动控制 」“ADRC自抗扰控制技术”(Active Disturbance Rejection Control)研究近年来,虽然现代控制理论取得了一系列成果,但是在工业领域的应用并没有代替PID控制。这说明现代控制理论在实际应用的过程中受到一定的限制,控制理论与生产生活实际仍然存在一定的代沟。对此,韩京清总结为基于“模型论”的控制理论在解决问题时没有以生产生活中的不确定性作为重点,没有抓住生产生活实践中所切实需要的核心。韩京清先生针对生产生活实践中存在的问题潜心研究,积极探索,逐步分析PID理论与现代控…

    2022年5月18日
    27
  • 推特宣布永久停用特朗普个人账号

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 据央视新闻消息,当地时间1月8日晚,美国社交网站推特发布声明,称将永久停用美国总统特朗普的个人账号。 声明称,“在经…

    2021年6月25日
    83
  • idea2022激活码永久jar【2022免费激活】「建议收藏」

    (idea2022激活码永久jar)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月2日
    963
  • 【杀软】Win7内置恶意软件删除工具——MRT

    【杀软】Win7内置恶意软件删除工具——MRTWindows7的WindowsDefender是一款具备实时监控能力的专业恶意软件清除工具。可能许多人将其禁用了,换用其他具备恶意软件清除能力的世界顶级杀软了(比如说笔者就用的NOD32,对恶意软件查杀能力甚是强悍)。如果你不忍WindowsDefender占用大量内存,又不舍得丢弃微软提供的服务,如何是好?有一个折中的方案:使用与其具有相同资源库的MRT…

    2022年6月24日
    88
  • linux发起iscsi_iscsi自动连接

    linux发起iscsi_iscsi自动连接1、存储介质1)磁盘阵列:磁盘阵列是一种采用RAID技术、冗余技术和在线维护技术制造的一种高性能、高可用的磁盘存储设备。2)IP-SAN存储:SAN(StorageAreaNetwork-存储区域网络):是计算机信息处理技术中的一种架构,它将服务器和远程的计算机存储设备(如磁盘阵列、磁带库)连接起来,使得这些存储设备看起来就像是本地一样。SAN就理解成存储虚拟化,而IP-SAN就是采

    2022年8月23日
    5
  • ICMP报文详解

    ICMP报文详解概述ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。ICMP报文的格式类型:占8位代码:占8位检验和:占16位说明:ICMP所有报文的前4个.

    2022年6月11日
    511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号