0c400汇编语言地址,在S7300/400型PLC中使用高级语言编程实例

本文详细介绍了在S7300/400型PLC中使用S7-SCL高级语言编程的实例,包括软件使用、语法规则、数据类型、控制流程、定时器和计数器的使用。S7-SCL提供了类似Pascal的编程体验,适用于复杂逻辑和数学运算,适合编写标准功能块。文章还通过具体的编程示例,展示了如何进行位偏移计算和功能选择控制。
摘要由CSDN通过智能技术生成

在S7300/400型PLC中使用高级语言编程实例

S7-SCL是一种类似于Pasical、Deliphi的高级编程语言,其符合国际标准IEC

61131-3,也就是说支持该标准的任意厂家的PLC均可以使用与之相似的语言编程。这种语言适合于处理复杂的逻辑和大量的数学运算,由于其具有高级语言的编程结构,因此和S7的STL语句表编程方式比较起来有着更加方便的控制方式,可以这样说,只要是必须使用语句表的地方,我们均可以考虑使用SCL,也许STL在执行时比SCL更加高效,但事实上也不一定,首先SCL可以编译成STL,同时SCL设计时可以优化编程,而STL若运用不当,可能还会将低效率。当然在目前的这种系列的PLC上,效率对于我们来说已是次要的,我们更关心的是编程结构。就像在PC机上,舍弃了汇编语言,而主要采用C/C++等高级语言。总体来说,SCL适合于编写标准功能块,由于在维护中,它和STL一样,不象Lad一样利于维护,因此这些标准功能块都应该有文档说明,以便用户了解其功能。

下面的内容主要是参考西门子的S7-SCL文档,对SCL进行了系统的介绍,最后给出了示例。

这里假设读者是学过S7-300/400编程,并曾经学过至少一种计算机高级编程语言。

一、 软件的使用

1、 创建一个新的S7-SCL Source 文件

打开工程项目à选择CPU站à选择S7 Programà选择Sources

在右边窗口的空白处点右键选Insert New Objectà点击SCL Source

双击创建的SCL Source文件,进入SCL编辑界面。

2、 块保护

在SCL

Source文件的开头添加关键字:KNOW_HOW_PROTECT,当打开由其创建的块时,只能显示参数,而看不到内容。

3、主菜单”Insert”下的”Block

Template”可用于插入如OB,FB等各种块的结构。”Control

Structure”菜单可插入各种流程控制结构,这些都可以简化编程。

4、在运行程序之前,首先必须对它进行编译,可以编译整个Source文件或者某个被选择的块,通过选择菜单File

> Compile Selected Blocks。也可以把几个Source文件一起进行编译,其方法是创建一个S7-SCL

compilation control file.在该文件中依次输入需要编译的SCL

Source文件名,然后执行编译即可。

二、语法规则

1、编写SCL Source文件的一般规则

● FB, FC, OB, DB以及用户定义的UDT,它们使用的任意数字号均可以在SCL

Source中编辑。

● 每种块类型都有它自己的结构。

● 每段落或者每个变量的声明以符号”;”标志结束。

● 不区分大小写。

● 注释仅存在于程序文档中,它不影响程序运行。

● 当一个功能块被调用时,其背景数据块被自动创建,因此它们不需要被编辑。

● DB0有特定用途,因此在程序中不能创建DB0.

2、 编写块的先后次序

● 被调用的块必须位于调用块之前。

● UDT的定义必须位于其被使用的位置之前。

● 共享数据块必须位于那些使用它的所有块之前。

三、 数据类型

1、数据类型预览

Ⅰ、基本数据类型

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

2、补充

a4c26d1e5885305701be709a3d33442f.png

<1>、DATE_AND_TIME Data Type

其值的范围:DT#1990-01-01-0:0:0.0---------DT#2089-12-31-23:59:59.999

该类型以BCD码形式存储。

例如20/Oct./1995 12:20:30 and 10

milliseconds显示如下:

DATE_AND_TIME#1995-10-20-12:20:30.10

DT#1995-10-20-12:20:30.10

<2>STRING

e.g. 声明

VAR

Text1 : String [123]; //该字符串的最大容量为123个字符

Text2 : String; //该字符串的默认容量为254个字符

END_VAR

初始化:x : STRING[7]:='Address';

//在使用STRING前,必须对它赋值。

FUNCTION Test : STRING[45]

VAR_TEMP

x : STRING[45];

END_VAR

x := 'a';

x := concat (in1 := x, in2 := x);

Test := x; //返回值

END_FUNCTION

<3>数组类型

e.g.

VAR

CONTROLLER1 : //声明3行、4列的二位整数数组,并对其初始化

ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,

-1289, 10362, 385, 2,

60, -37, -7, 103 ;

CONTROLLER2 : ARRAY[1..10] OF REAL ; //声明10个数的一维实数数组

END_VAR

注:数组的最大维数为6维,数组的索引范围为-32768 ---

32767之间的任意整数。所有的基本数据类型均可用于数组。数组可以使用变量进行索引,例如:

arrname_1[ i ] := arrname_2[ j ] ;

<4>STRUCT类型

e.g. 声明一个结构MOTOR中包含另一个结构DATA。对结构声明时,可以初始化元素,也可以在使用之前再初始化。

VAR

MOTOR : STRUCT

DATA : STRUCT

LOADCURR : REAL ;

VOLTAGE : INT := 5 ;

END_STRUCT ;

END_STRUCT ;

END_VAR

结构以WORD的形式结尾,否则系统自动把丢失的字节补到结构中去。

<5>用户定义类型UDT (使用关键字TYPE)

TYPE //定义名字为MEASVALUES的数据类型

MEASVALUES: STRUCT

BIPOL_1 : INT := 5;

BIPOL_2 : WORD :=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值