s7300SCL编程笔记.docx

上传人:b****5 文档编号:6375302 上传时间:2023-01-05 格式:DOCX 页数:15 大小:25.94KB
下载 相关 举报
s7300SCL编程笔记.docx_第1页
第1页 / 共15页
s7300SCL编程笔记.docx_第2页
第2页 / 共15页
s7300SCL编程笔记.docx_第3页
第3页 / 共15页
s7300SCL编程笔记.docx_第4页
第4页 / 共15页
s7300SCL编程笔记.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

s7300SCL编程笔记.docx

《s7300SCL编程笔记.docx》由会员分享,可在线阅读,更多相关《s7300SCL编程笔记.docx(15页珍藏版)》请在冰豆网上搜索。

s7300SCL编程笔记.docx

s7300SCL编程笔记

SCL编程

一.数据类型:

基本数据类型

复杂数据类型

用户自定义数据类型

BOOL

DATE_AND_TIME

UDT

BYTE

字节

日历:

格式:

Date1:

DT:

=DT#1990-01-01-00:

00:

00

名称

类型

初始值

UDT的面向源文件的输入和STRUCT变量的输入一样,都限定在关键字TYPE和END_TYPE这间。

如:

TYPEudtname

STRUCT

Komp1name:

datatype:

=pre-assignment;

Komp1name:

datatype:

=pre-assignment;

……….

END_STRUCT

END_TYPE

WORD

DWORD

双字

CHAR

字符

STRING

字符串

格式:

M1:

STRING[NO.]:

=初始值;

INT

整数

DINT

双整数

REAL

浮点数

ARRAY

数组

格式:

M1:

ARRAY[N..M]OFINT;

数组名:

ARRAY[N..M]OFINT;

在数组里寻址:

数组[NO.]

S5TIME

时间:

时,分,秒。

如S5T#1h1m1s

DATE

日期:

年,月,日。

如;

D#2012-4-26

TIME

表示:

日期,时,分,秒,毫秒。

如:

TIME#24h20h31m

23s648ms

STRUCT

结构

TIME_OF_DAY

如:

TIME_OF_DAY#00:

00:

00

TOD#00:

00:

00

 

注:

还有两种类型:

P:

POINTER(指针数据类型)。

A:

ANY(任何类型)

数组的定义:

M1:

ARRAY[n0..m0,n1..m1]OFINT;

 

二.寻址

绝对寻址

地址区域

字节

双字

输入

Iy.x

IBy

IWy

IDy

输出

Qy.x

QBy

QWy

QDy

外围输入

---

PIBy

PIWy

PIDy

外围输出

---

PQBy

PQWy

PQDy

存储位

M

MBy

MWy

MDy

全局数据地址

DB.DXy.x

DB.Dy.x

DB.DBy

DB.DWy

DB.DDy

符号寻址

如:

DB10.setpoint

“motor1data”.DW12

间接寻址

如:

E[byteindex,bitindex]

MB[byteindex]

DB10.DW[byteindex]

 

三.SCL运算符和表达式

结合

名称

运算符

优先级

圆括号

(表达式)

(,)

1

算术

一元加,一元减

乘法,除法

加法,减法

**

+,-

*,/,DIV,MOD

+,-

2

3

4

5

比较

小于,小于等于,大于,大于等于

等于,不等于

<,<=,>,>=

=,<>

6

7

二进制结合

非(一元)

与逻辑运算

异或

或逻辑运算

NOT

AND,&

XOR

OR

3

8

9

10

赋值

赋值

:

=

11

注:

以上运算符的表达式基本大多和我们的数学表达式一样。

这里只讲解一下AND,XOR,OR指令。

如:

a1:

=a1ANDW#16#FFFF

a1:

=a1XORW#16#FFFF

a1:

=a1ORMW10

 

四.控制语句

控制语句:

语句说明:

IF

依赖布尔值的程序分支

CASE

依赖INT值的程序分支

FOR

具有运行变量的程序循环

WHILE

具有执行条件的程序循环

REPEAT

具有删除条件的程序循环

CONTINUE

当前循环通道的消除

EXIT

退出程序循环

GOTO

跳转到跳转标号

RETURN

退出块

注意:

当使用程序循环时,请确保不超过循环监测时间。

1.IF语句:

IF条件0

THEN语句0;

ELSIF条件1

THEN语句1;

ELSIF条件2

THEN语句2;

ELSE语句3;

END_IF;

 

2.CASE语句:

“选择”内的值等于Const内的值就执行那个语句。

其它语句不执行,就执行END_CASE;

CASE选择OF

Const1:

语句1;

Const2:

语句2;

………

Constn:

语句n;

END_CASE;

 

3.FOR语句

FOR变量:

=n0TOnBYmDO

…………………..;

………………….;

END_FOR;

注意:

这里的n为整型变量或整数值。

m为每循环加几。

 

4.WHILE语句:

只要条件满足,程序循环就重复。

WHILE条件DO

语句;

END_WHILE;

 

5.REPEAT语句:

只要条件不满足,就重复程序循环。

REPEAT

语句;

UNTIL条件;

END_REPEAT;

6.CONTINUE语句:

在FOR,WHILE,REPEAT循环中终止当前程序通道。

7.EXIT语句:

在FOR,WHILE,REPEAT循环中终止所有程序通道。

8.RETURN语句:

语句无条件地退出当前执行的块。

9.GOTO语句:

例:

LABEL//定义标签

M1,M2,M3,END;

END_LABEL;

……………..

CASESelection;

1:

GOTOM1;

2:

GOTOM2;

3:

GOTOM3;

ELSEGOTODND;

END_CASE;

M1:

语句1;

GOTODND;

M2:

语句2;

GOTODND;

M3:

语句3;

END:

;

 

五.常量:

1.位常量:

值为TRUE或者FALSE.

2.字符常量:

(这里是一个字符)

Charac_1:

=’B’

Charac_2:

=char#43;

Charac_3:

=char#’B’//字符‘B’

Charac_4:

=’$41’//字符‘A’

3.字符串常量:

M1:

=’ABCDEFJH’

4.日期常量:

T1:

=DATE#1995-11-11;

T2:

=D#1995-11-11

5.时间常量

N1:

=TIME#10.2S;

N2:

=T#3D_2S_3MS;

6.TIME_OF_DAY常量:

TM1:

=TIME_OF_DAY#12:

11:

10.1;

TT2:

=TOD#10:

10:

10;

7.DATE_AND_TIME常量:

TT:

=DT#2012-4-26-18:

12:

00;

六.定时器和计数器:

1.定时器有5种,依次为:

S_PULSES_PEXTS_ODTS_ODTSS_OFFDT

VAR

CurrTime:

S5time;

BiVal:

word;

ActFlag:

bool;

END_VAR

//在调用定时器时,部分参数可以省略,但左边的赋值变量一定不能省略。

CurrTime:

=S_ODT(T_N=T10,//绝对调用,制定定时器号

S:

=TRUE,//置位条件

TV:

=T#1s,//设定定时器值

R:

=FALSE,//复位条件

BI:

=biVal,

Q:

=actFlag);

FUNCTION_BLOCKTIME

VAR_INPUT

MY_TIMER:

ARRAY[1..4]ofSTRUCT

T_NINT;

TV:

WORD;

END_STRUCT;

END_VAR

FORI:

=1TO4DO

CurrTime:

=S_ODT(T_N=MY_TIMER.T_NO,S:

=true,

MY_TIMER.TV);

END_FOR;

FUNCTION_BLOCKTIMER

VAR_INPUT

mytimer:

TIMER;

END_VAR

CurrTime:

=S_ODT(T_N=mytimer,.....);

2.、计数器

S_CU增计数器

S_CD减计数器

S_CUD增/减计数器

e.g.

S_CUD(C_N=C12,//绝对调用定时器,指定计数器号

CD:

=I0.0,

CU:

=I0.1,

S:

=I0.2&I0.3,//置位条件

PV:

=120,//设定计数器值

R:

=FALSE,//复位条件

CV:

=binVal,//输出参数,二进制计数值

Q:

=actFlag);//输出参数,计数器的状态

FUNCTION_BLOCKCOUNT

VAR_INPUT

Count:

ARRAY[1..4]ofSTRUCT

C_NINT;

PV:

WORD;

END_STRUCT;

END_VAR

FORI:

=1TO4DO//动态调用计数器

S_CD(C_N=Count.C_NO,S:

=true,PV:

=Count.PV);

END_FOR;

FUNCTION_BLOCKCOUNTER

VAR_INPUT

MYCounter:

COUNTER;

END_VAR

CurrVal:

=S_CD(C_N=MyCounter,.....);//动态调用计数器

七.数学函数:

三角函数

对数功能

SIN

正弦

EXP

以e为底的指数功能

COS

余弦

EXPD

以10为底的指数功能

TAN

正切

LN

自然对数

反三角函数

LOG

以10为底的对数

ASIN

反正弦

其它数学功能

ACOS

反余弦

ABS

求绝对值

ATAN

反正切

SQR

求平方

SQRT

求平方根

例子:

RESULT:

=ABS(-5);//5

RESULT:

=SQRT(81.0);//9

RESULT:

=SQR(23);//529

RESULT:

=EXP(4.1);//60.340...

RESULT:

=EXPD(3);//1_000

PI:

=3.141592;

RESULT:

=SIN(PI/6);//0.5

八.移位函数:

ROL、ROR、SHL、SHR

例子:

RESULT:

=ROL(IN:

=CRC,N:

=5);//CRC,左移5位,移出的填充到右边空位

RESULT:

=ROR(IN:

=BYTE#2#1101_0011,N:

=2);//2#1111_0100,右移2位,移出的填充到左边空位

RESULT:

=SHL(IN:

=BYTE#2#1101_0011,N:

=3);//2#1001_1000,左移3位,空余部分用0填充

RESULT:

=SHR(IN:

=BYTE#2#1101_0011,N:

=2);//2#0011_0100,右移2位,空余部分用0填充

九.SCL块

SCL所用的块结构与标准编程语言有完全相同的方式。

注意:

没有功能值返回的功能FC是VOID数据类型。

 

十.实例:

1.排序

FUNCTIONFC4:

VOID

Know_How_Protect

VAR_TEMP

//TemporaryVariables

loop_count:

INT;

index_1:

INT;

index_2:

INT;

Data_Store:

ARRAY[0..5]OFINT;

T:

INT;

N:

INT;

END_VAR

//StatementSection

//BlockParameters

VAR_INPUT//InputParameters

INT0:

INT;

INT1:

INT;

INT2:

INT;

INT3:

INT;

INT4:

INT;

INT5:

INT;

END_VAR

VAR_IN_OUT

//I/OParameters

END_VAR

VAR_OUTPUT

//OutputParameters

min_data:

INT;

l_0,l_1,l_2,l_3,l_4,l_5:

INT;

END_VAR

Data_Store[0]:

=INT0;

Data_Store[1]:

=INT1;

Data_Store[2]:

=INT2;

Data_Store[3]:

=INT3;

Data_Store[4]:

=INT4;

Data_Store[5]:

=INT5;

min_data:

=Data_Store[0];

N:

=0;

T:

=0;

FORloop_count:

=0TO5BY1DO

//查找最小值

IFmin_data>Data_Store[loop_count]THENmin_data:

=Data_Store[loop_count];

END_IF;

END_FOR;

FORindex_1:

=0TO5BY1DO

FORindex_2:

=index_1TO5BY1DO

IFData_Store[index_1]

T:

=Data_Store[index_2];

Data_Store[index_2]:

=Data_Store[index_1];

Data_Store[index_1]:

=T;

END_IF;

END_FOR;

END_FOR;

l_0:

=Data_Store[0];

l_1:

=Data_Store[1];

l_2:

=Data_Store[2];

l_3:

=Data_Store[3];

l_4:

=Data_Store[4];

l_5:

=Data_Store[5];

END_FUNCTION

 

2.求RTU效验:

FUNCTIONFC101:

VOID

//RTU通信SCL程序

//BlockParameters

VAR_INPUT

//InputParameters

ZH:

BYTE;//站号

GNM:

BYTE;//功能码

SZDZ1:

BYTE;//数据地址1

SZDZ2:

BYTE;//数据地址2

SZNR1:

BYTE;//数据内容1

SZNR2:

BYTE;//数据内容2

END_VAR

VAR_IN_OUT

//I/OParameters

END_VAR

VAR_OUTPUT

//OutputParameters

SCZH:

BYTE;//站号

SCGNM:

BYTE;//功能码

SCSZDZ1:

BYTE;//数据地址1

SCSZDZ2:

BYTE;//数据地址2

SCSZNR1:

BYTE;//数据内容1

SCSZNR2:

BYTE;//数据内容2

XYM1:

BYTE;//效验1

XYM2:

BYTE;//效验2

END_VAR

VAR_TEMP

//TemporaryVariables

CRC:

WORD;

SHUZU:

ARRAY[0..7]OFBYTE;//数组

N:

INT;//外循环6次

M:

INT;//内循环8次

ZZ:

INT;//数组指针

YCW:

WORD;//CRC右移位时,判断最后一位。

TEM:

WORD;//用做CRC最后结果的高8位和低8位的分别传送。

END_VAR

BEGIN

//StatementSection

ZZ:

=0;//对指针清零

TEM:

=0;//清零

SHUZU[0]:

=ZH;//将输入的站号送给数组的0位

SHUZU[1]:

=GNM;//将输入的功能码送给数组的1位

SHUZU[2]:

=SZDZ1;//将输入的数据地址1送给数组的2位

SHUZU[3]:

=SZDZ2;//将输入的数据地址2送给数组的3位

SHUZU[4]:

=SZNR1;//将输入的数据内容1送给数组的4位

SHUZU[5]:

=SZNR2;//将输入的数据内容2送给数组的5位

CRC:

=W#16#FFFF;//将16#FFFF送给CRC寄存器

FORN:

=0TO5BY1DO//外循环6次

CRC:

=CRCXORSHUZU[ZZ];//将CRC寄存器与各字节异或

FORM:

=0TO7BY1DO//内循环8次

YCW:

=CRC;//将CRC寄存器的内容送给YCW中

YCW:

=YCWANDW#16#0001;

//取CRC寄存器的最后一位,也就是下面移位的溢出位

CRC:

=SHR(IN:

=CRC,N:

=1);//对CRC寄存器右移一位

IFYCW=W#16#0001THENCRC:

=CRCXORW#16#A001;

//判断溢出位是否是1,是1就将CRC寄存器与16#A001异或。

END_IF;

END_FOR;

ZZ:

=ZZ+1;//一个字节处理好了,数组指针加1。

END_FOR;

TEM:

=CRC;//将CRC内的内容送给TEM

TEM:

=TEMANDW#16#00FF;//取TEM(CRC)的低8位

SHUZU[6]:

=WORD_TO_BYTE(TEM);//将TEM低8位送给数组的6号位

TEM:

=CRC;//再将CRC内的内容送给TEM

TEM:

=TEMANDW#16#FF00;//取TEM(CRC)的高8位

TEM:

=SHR(IN:

=TEM,N:

=8);//再高8位右移8位

SHUZU[7]:

=WORD_TO_BYTE(TEM);//将高8位的内容送到数组的7号位

SCZH:

=SHUZU[0];//输出站号

SCGNM:

=SHUZU[1];//输出功能码

SCSZDZ1:

=SHUZU[2];//输出数据地址1

SCSZDZ2:

=SHUZU[3];//输出数据地址2

SCSZNR1:

=SHUZU[4];//输出数据内容1

SCSZNR2:

=SHUZU[5];//输出数据内容2

XYM1:

=SHUZU[6];//输出效验码

XYM2:

=SHUZU[7];//输出效验码

END_FUNCTION

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1