正文12.docx

上传人:b****0 文档编号:18501062 上传时间:2023-08-18 格式:DOCX 页数:34 大小:172.42KB
下载 相关 举报
正文12.docx_第1页
第1页 / 共34页
正文12.docx_第2页
第2页 / 共34页
正文12.docx_第3页
第3页 / 共34页
正文12.docx_第4页
第4页 / 共34页
正文12.docx_第5页
第5页 / 共34页
正文12.docx_第6页
第6页 / 共34页
正文12.docx_第7页
第7页 / 共34页
正文12.docx_第8页
第8页 / 共34页
正文12.docx_第9页
第9页 / 共34页
正文12.docx_第10页
第10页 / 共34页
正文12.docx_第11页
第11页 / 共34页
正文12.docx_第12页
第12页 / 共34页
正文12.docx_第13页
第13页 / 共34页
正文12.docx_第14页
第14页 / 共34页
正文12.docx_第15页
第15页 / 共34页
正文12.docx_第16页
第16页 / 共34页
正文12.docx_第17页
第17页 / 共34页
正文12.docx_第18页
第18页 / 共34页
正文12.docx_第19页
第19页 / 共34页
正文12.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

正文12.docx

《正文12.docx》由会员分享,可在线阅读,更多相关《正文12.docx(34页珍藏版)》请在冰点文库上搜索。

正文12.docx

正文12

12IEC操作符

12.1IEC操作符(TheIECOperators)

WAGO-I/O-PRO32支持所有IEC操作符。

与标准库相比(参看附录D,标准库),这些操作符在项目中被隐含识别。

在POU中操作符像函数一样使用。

以下类别的操作符是支持的:

12.2算术操作符(ArithmeticOperators)

12.2.1加法(ADD)

加法的变量类型:

BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT和REAL。

两个TIME变量也可以相加,结果放在另一个TIME变量中(例如,t#45s+t#50s=t#1m35s)。

IL中的实例:

LD7

ADD2,4,7

STVar1

ST中的实例:

var1:

=7+2+4+7;

FBD中的实例:

12.2.2乘法(MUL)

乘法的变量类型:

BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT和REAL。

IL中的实例:

LD7

MUL2,4,7

STVar1

ST中的实例:

var1:

=7*2*4*7;

FBD中的实例:

12.2.3减法(SUB)

减法的变量类型:

BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT和REAL。

两个TIME变量也可以相减,结果放在第三个TIME变量中。

注意负的TIME值是不允许。

IL中的实例:

LD7

SUB8

STVar1

ST中的实例:

var1:

=7-2;

FBD中的实例:

12.2.4除法(DIV)

除法的变量类型:

BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT和REAL。

IL中的实例:

LD8

DIV2

STVar1(*Resultis4*)

ST中的实例:

var1:

=8/2;

FBD中的实例:

 

提示:

如果在项目中使用名字CheckDivByte、CheckDivWord、CheckDivDWord和CheckDivReal定义功能,则你可使用它们来检测除数的值(使用DIV操作符)。

例如,为避免被0除,必须有上面所列的功能名。

参看下图中CheckDivReal功能执行的实例:

操作符DIV使用功能CheckDivReal的输出作为除数。

在下面的程序中,避免了除数为0,除数(d)设为从0到1。

因此除法结果为799。

 

12.2.5余数(MOD)

除法余数的变量类型:

BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT。

这个功能的结果是除法的余数。

这个结果将是一个整数。

IL中的实例:

LD9

MOD2

STVar1(*Resultis1*)

ST中的实例:

var1:

=9MOD2;

FBD中的实例:

12.2.6INDEXOF

执行这个功能可以查找POU的内部指针。

ST中的实例:

var1:

=INDEXOF(POU2);

12.2.7SIZEOF

执行这个功能以确定所给数据类型要求的字节数。

IL中的实例:

arr1:

ARRAY[0..4]OFINT;

Var1INT

LDarr1

SIZEOF

STVar1(*Resultis10*)

ST中的实例:

var1:

=SIZEOF(arr1);

12.3位字符串操作符(BitstringOperators)

12.3.1与(AND)

位操作符AND,操作数的类型为BOOL,BYTE,WORD或DWORD。

IL中的实例:

Var1BYTE

LD2#1001_0011

AND2#1000_1010

STVar1(*Resultis2#1000_0010*)

ST中的实例:

var1:

=2#1001_0011AND2#1000_1010

FBD中的实例:

 

提示:

如果在SFC中有如下程序步骤,

且如果使用68xxx-或C-code编程器,请注意:

AND操作块的第二个输入变量的值对变量z的指定将不被执行!

这是由于如果输入变量为FALSE时,SFC中的优化处理引起的。

12.3.2或(OR)

位操作OR。

操作数类型为BOOL,BYTE,WORD或DWORD。

IL中的实例:

var1:

BYTE;

LD2#1001_0011

OR2#1000_1010

STvar1(*Resultis2#1001_1011*)

ST中的实例:

Var1:

=2#1001_0011OR2#1000_1010

FBD中的实例:

提示:

如果在SFC中有如下程序步骤,

且如果使用68xxx-或C-code编程器,请注意:

OR操作块的第二个输入变量的值对变量z的指定将不被执行!

这是由于如果输入变量为FALSE时,SFC中的优化处理引起的。

12.3.3异或(XOR)

位操作XOR。

操作数类型为BOOL,BYTE,WORD或DWORD。

IL中的实例:

Var1:

BYTE;

LD2#1001_0011

XOR2#1000_1010

STVar1(*Resultis2#0001_1001*)

ST中的实例:

Var1:

=2#1001_0011XOR2#1000_1010

FBD中的实例:

12.3.4非(NOT)

位操作NOT。

操作数类型为BOOL,BYTE,WORD或DWORD。

IL中的实例:

Var1:

BYTE;

LD2#1001_0011

NOT

STVar1(*Resultis2#0110_1100*)

ST中的实例:

Var1:

=NOT2#1001_0011

FBD中的实例:

12.4位移操作符(Bit-ShiftOperators)

提示:

用于InfineonC16x目标系统的编码发生器使用模数16执行位移计算操作。

12.4.1左移(SHL)

一个操作数按位左移(left-shift):

erg:

=SHL(in,n)

输入变量erg,in和n的类型为BYTE,WORD或DWORD。

in将左移n位,右边以0补齐。

提示:

请注意位的数量,这一操作被当作算术操作,输入变量的数据类型是虚假的!

如果输入变量是常量,注意最小可能数据类型。

在算术操作上,输出变量的类型根本没有影响。

参看以下十六进制符号的例子,依照输入变量(BYTE或WORD)数据类型的不同,尽管输入变量in_byte和in_word是相同的,erg_byte和erg_word将得到不同的结果。

ST中的实例:

FBD中的实例:

IL中的实例:

LD16#45

SHL2

STerg_byte

12.4.2右移(SHR)

一个操作数按位右移(right-shift):

erg:

=SHR(in,n)

erg,in和n的类型将为BYTE,WORD或DWORD。

in将向右移动n位,左边用0补齐。

参看以下十六进制符号的例子,依照输入变量的类型(BYTE或WORD)注意算术操作的结果。

ST中的实例:

 

FBD中的实例:

IL中的实例:

LD16#45

SHL2

STerg_byte

12.4.3循环左移(ROL)

一个操作数循环向左移动:

erg:

=ROL(in,n)

erg,in和n的类型为BYTE,WORD或DWORD。

in将n次向左移动一位,当移到最左边时,再重新从右边插入。

提示:

请注意位的数量,这一操作被当作算术操作,输入变量的数据类型是虚假的!

如果输入变量是常量,注意最小可能数据类型。

在算术操作上,输出变量的类型根本没有影响。

参看以下十六进制符号的例子,依照输入变量(BYTE或WORD)数据类型的不同,尽管输入变量in_byte和in_word是相同的,erg_byte和erg_word将得到不同的结果。

ST中的实例:

 

FBD中的实例:

IL中的实例:

:

LD16#45

SHL2

STerg_byte

12.4.4循环右移(ROR)

一个操作数循环向右移动:

erg:

=ROL(in,n)

erg,in和n的类型为BYTE,WORD或DWORD。

in将n次向右移动一位,当移位到最右边时,再重新从左边插入。

提示:

请注意位的数量,这一操作被当作算术操作,输入变量的数据类型是虚假的!

如果输入变量是常量,注意最小可能数据类型。

在算术操作上,输出变量的类型根本没有影响。

参看以下十六进制符号的例子,依照输入变量(BYTE或WORD)数据类型的不同,尽管输入变量in_byte和in_word是相同的,erg_byte和erg_word将得到不同的结果。

ST中的实例:

 

FBD中的实例:

IL中的实例:

LD16#45

SHL2

STerg_byte

12.5选择操作符(SelectionOperators)

所有选择操作符同变量一起执行。

为了更加明确,以下我们将限制使用常量作为操作符的例子。

12.5.1SEL

二元选择

OUT:

=SEL(G,IN0,IN1)means:

OUT:

=IN0ifG=FALSE;

OUT:

=IN1ifG=TRUE.

IN0,IN1和OUT可以是变量的任一类型,G必须是BOOL。

如果G是FALSE,选择结果是IN0;如果G是TRUE,结果为IN1。

IL中的实例:

LDTRUE

SEL3,4

STVar1(*Resultist4*)

LDFALSE

SEL3,4

STVar1(*Resultist3*)

ST中的实例:

Var1:

=SEL(TRUE,3,4);(*Resultis4*)

FBD中的实例:

提示:

如果IN0是TRUE,IN1或IN2前面的表达式将不处理。

12.5.2MAX

最大功能是返回两个数值中较大的值。

OUT:

=MAX(IN0,IN1)

IN0,IN1和OUT可以是任意类型的变量。

IL中的实例:

LD90

MAX30

MAX40

MAX77

STVar1(*Resultis90*)

ST中的实例:

Var1:

=MAX(30,40);(*Resultis40*)

Var1:

=MAX(40,MAX(90,30));(*Resultis90*)

FBD中的实例:

12.5.3MIN

最大功能是显示两个数值中较小的值。

OUT:

=MIN(IN0,IN1)

IN0,IN1和OUT可以是任意类型的变量。

IL中的实例:

LD90

MIN30

MIN40

MIN77

STVar1(*Resultis30*)

ST中的实例:

Var1:

=MIN(90,30);(*Resultis30*);

Var1:

=MIN(MIN(90,30),40);(*Resultis30*);

FBD中的实例:

12.5.4LIMIT

限制处理。

OUT:

=LIMIT(Min,IN,Max)意思是:

OUT:

=MIN(MAX(IN,Min),Max)

对于结果来讲Max是上限,Min是下限。

IN的数值超过上限Max,LIMIT将返回Max。

IN的数值低于下限Min,结果将为Min。

IN和OUT可以是任意类型的变量。

IL中的实例:

LD90

LIMIT30,80

STVar1(*Resultis80*)

ST中的实例:

Var1:

=LIMIT(30,90,80);(*Resultis80*);

12.5.5MUX

多路转换器(Multiplexer)。

OUT:

=MUX(K,IN0,...,INn)意思是:

OUT:

=INK.

IN0,...,INn和OUT可以是变量的任意类型。

K必须是BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT或UDINT。

MUX从一组数值中选择第K个值。

IL中的实例:

LD0

MUX30,40,50,60,70,80

STVar1(*Resultis30*)

ST中的实例:

Var1:

=MUX(0,30,40,50,60,70,80);(*Resultis30*);

提示:

除了INK以外,输入前的表达式将不被执行存储运行时间!

所有表达式只在仿真模式下执行。

12.6比较操作符(ComparisonOperators)

12.6.1GT

大于。

当第一个操作数的值比第二个大时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD20

GT30

STVar1(*ResultisFALSE*)

ST中的实例:

VAR1:

=20>30>40>50>60>70;

FBD中的实例:

12.6.2LT

小于。

当第一个操作数的值比第二个小时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD20

LT30

STVar1(*ResultisTRUE*)

ST中的实例:

VAR1:

=20<30;

FBD中的实例:

12.6.3LE

小于等于。

当第一个操作数的值小于或等于第二个值时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD20

LE30

STVar1(*ResultisTRUE*)

ST中的实例:

VAR1:

=20<=30;

FBD中的实例:

12.6.4GE

大于等于。

当第一个操作数的值大于或等于第二个值时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD60

GE40

STVar1(*ResultisTRUE*)

ST中的实例:

VAR1:

=60>=40;

FBD中的实例:

12.6.5EQ

等于。

当操作数的值相等时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD40

EQ40

STVar1(*ResultisTRUE*)

ST中的实例:

VAR1:

=40=40;

FBD中的实例:

12.6.6NE

不等于。

当操作数的值不相等时,布尔操作符返回TRUE。

操作数可以是BOOL,BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL,TIME,DATE,TIME_OF_DAY,DATE_AND_TIME和STRING。

IL中的实例:

LD40

NE40

STVar1(*ResultisFALSE*)

ST中的实例:

VAR1:

=40<>40;

FBD中的实例:

12.7地址操作符(AddressOperators)

12.7.1ADR

地址功能。

ADR是以DWORD的形式返回其变量的地址。

输送给制造机能的这个地址作为一个指针处理,或在项目中被分配给一个指针。

IL中的实例:

LDVar1

ADR

STVar2

man_fun1

12.7.2容量操作符(ContentOperator)

一个指针可通过在其后面添加这个容量操作符(contentoperator)"^"而被取消。

ST中的实例:

pt:

POINTERTOINT;

var_int1:

INT;

var_int2:

INT;

pt:

=ADR(var_int1);

var_int2:

=pt^;

12.8调用操作符(CallingOperator)

12.8.1CAL

调用一个功能块或程序。

在IL中使用CAL调用一个功能块实例。

输入变量放在功能块实例名之后的圆括号中。

例如:

从功能块中调用实例Inst,其输入变量Par1和Par2分别为0和TRUE。

CALINST(PAR1:

=0,PAR2:

=TRUE)

12.9类型转化功能(TypeConversionFunctions)

从“较大”类型到“较小”类型的隐含转换是禁止的(例如:

从INT到BYTE或从DINT到WORD)。

如需要,可使用特殊类型转换。

从一种类型到另一种元素类型的转换是基本类型转换。

语法结构:

_TO_

请注意TO_STRING的转换,字符串从左边开始产生。

如果定义短了,将剪切掉其右边的字符。

12.9.1BOOL_TO

从BOOL类型转换到任意其它类型:

当操作数为TRUE时,数字类型的结果为1;当操作数为FALSE时,结果为0。

STRING类型的结果为'TRUE'或'FALSE'。

IL中的实例:

LDTRUE

BOOL_TO_INT

STi(*Resultis1*)

LDTRUE

BOOL_TO_STRING

STstr(*Resultis'TRUE'*)

LDTRUE

BOOL_TO_TIME

STt(*ResultisT#1ms*)

LDTRUE

BOOL_TO_TOD

STtof(*ResultisTOD#00:

00:

00.001*)

LDFALSE

BOOL_TO_DATE

STdat(*ResultisD#1970-01-01*)

LDTRUE

BOOL_TO_DT

STdandt(*ResultisDT#1970-01-01-00:

00:

01*)

ST中的实例:

i:

=BOOL_TO_INT(TRUE);(*Resultis1*)

str:

=BOOL_TO_STRING(TRUE);(*Resultis"TRUE"*)

t:

=BOOL_TO_TIME(TRUE);(*ResultisT#1ms*)

tof:

=BOOL_TO_TOD(TRUE);(*Resultis

TOD#00:

00:

00.001*)

dat:

=BOOL_TO_DATE(FALSE);(*ResultisD#1970*)

dandt:

=BOOL_TO_DT(TRUE);(*ResultisDT#1970-01-01-00:

00:

01*)

FBD中的实例:

(*Resultis1*)

(*Resultis'TRUE'*)

(*ResultisT#1ms*)

(*ResultisTOD#00:

00:

00.001*)

(*ResultisD#1970-01-01*)

 

(*ResultisDT#1970-01-01-00:

00:

01*)

12.9.2TO_BOOL

从其它变量类型转换为BOOL:

当操作数不等于0时,结果为TRUE。

当操作数等于0时,结果为FALSE。

当操作数为"TRUE"时,STRING类型变量的结果为

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2