CODESYS 学习资料3.PDF

CODESYS 学习资料3.PDF
CODESYS 学习资料3.PDF

6.3计数器指令

6.3.1计数器简介

CoDeSys标准功能库中提供了加、减计数功能块,系统提供了CTU加计数器、CTD减计数器和CTUD加减计数器三个功能块。

6.3.2计数器指令

表6-x 标准计数器的图形化与文本化指令表

表6-x 标准计数器指令参数

1.增计数器CTU

当计数器输入端CU的信号从状态“0”变为状态“1”时,当前计算值加1,并通过输出端CV进行显示,第一次调用时(复位输入RESET信号状态为“0”),输入PV端的计数为默认值,当计数达到上限32767后,计数器将不会再增加,CU也不会再起作用。

当复位输入端RESET的信号状态为“1”时,计数器的CV和Q都为“0”,只要输入端RESET状态为“1”,上升沿对CU就不再起作用。当CV值大于或等于PV时,输出端Q为“1”。此时CV仍可继续累加,输出端Q继续为输出“1”。

增计数器CTU 指令示例如图6.x 所示,时序图如6.x 所示。

图6.x 增计数器CTU 使用举例

图6.x 增计数器CTU 特性时序图

增量功能块。输入变量CU 和复位RESET 以及输出变量Q 是布尔类型的,输入变量PV 和输出变量CV 是WORD 类型。

CV 将被初始化为0 ,如果复位RESET 是TRU 真的。如果CU 有一个上升沿从FALSE 为TRUE ,CV 提升1,Q 将返回TRUE ,如此CV 将大于或等于上限PV 。

【例6.X 】某工厂要实现每天的产量计数,每个产品出厂前都会经过流水线,流水线上有一个光电传感器,当产品经过时,该信号会被置为“1”,示意图如图 6.x a )所示。通过计数器指令,使用程序计算输出的总产量。

a) b)

图6.x 增计数器CTU 使用举例 b) 应用示意图 b)程序梯形图

表6-x 变量分配表 变量分配表请见表6-x ,当流水线上有产品流经时,

bDI_ConverySensor 的感应状态对应为“1”,无产品时为

“0”,故可直接使用此信号作为增计数器CTU 的CU 输入

信号,当前实时值通过nCurrentValue 进行显示。bDI_Reset

作为清零信号清除当前值。样例程序请参考

\Counter_Convery \。

2. 减计数器CTD

当减计数器输入端的CD 信号从“0”变为状态“1”时,当前计数值减1,并在输出端上CV 显示当前值,第一次调用时(需要将加载输入端信号LOAD 初始化,需要将其从“0

”变为状态

光电传感器

“1”,再变为状态“0”后功能块才能生效),输入PV 端的计数为默认值,当计数达到0后,计数值将不在会减少,CD 也不再起作用。

当加载输入端信号LOAD 为“1”时,计数值将设定成PV 默认值,只要加载输入端信号LOAD 状态为“1”,输入端的CD 上升沿就不起作用。当CV 值小于或等于0时,输出端Q 为“1”。减计数器CTD 指令示例如图6.x 所示,时序图如6.x 所示。

图6.x 减计数器CTD 使用举例

图6.x 减计数器CTD 特性时序图

【例6.X 】某工厂生产的产品每25个可以装一箱,流经流水线后,每次满箱后,需要输出一个3s 的延时指示bPackingDone 信号,流水线上装有光电传感器,通过bDI_ConverySensor 信号反馈给PLC 。此外需要统计当日生产的总箱数nPackageQTY 。

图6.x 减计数器CTU 程序举例

表6-x 变量分配表

变量分配表如表6-x 所示,使用传输线上的

bDI_ConverySensor 传感器信号作为CTD 功能块的CD 源信

号,PV 给定25,当满25箱时Counter_Down.Q 输出一个高

电平脉冲作为满箱的BOOL 信号。同时将此信号作为累计

箱数的Package_Counter 计数器的CU 源信号,

nPackageQTY 为当日的生产总箱数。满箱指示灯通过使用TP 功能块做延时输出。样例程序请参考\CTU_Packing \。

3.增/减双向计数器CTUD

当加计数输入端的CU信号从“0”变为状态“1”时,当前计数值加1,并在输出CV上线时。当减计数输入端的CD的信号状态从“0”变为状态“1”时,当前计数值减1,并在输出端CV上显示。如果两个输入端都是上升沿,当前计数值将保持不变。

当计数值达到上限值32767后,加计数输入端CU的上升沿不再起作用。因此即使加计数输入端CU出现上升沿,及数值也不会增加。同理,当计数值达到下极限值0后,减计数输入端CD也不会在其作用,因此,即使减计数输入端CD出现上升沿,计数值也不会减少。

当CV值大于或等于PV值时,输出QU为“1”。当CV值小于或等于0时,输出QD为“1”。

【例6.X】创建一个POU,使用增/减双向计

数器CTUD,当bUp有上升沿信号时,计数值增

加,bDown有上升沿信号时,计数值减小。

bReset用于数据复位,具体代码如下。

VAR

bUp: BOOL;

bDown: BOOL;

bReset: BOOL;

bLoad: BOOL;

CTUD_0: CTUD;

END_VAR

CTUD_0(CU:= bUp,CD:=

bDown,RESET:=bReset ,LOAD:= bLoad,

PV:= ,QU=> ,QD=> ,CV=> );

图6.x 增/减计数器CTUD使用举例

【例 6.X】一自动仓库存放某种货物,最多6000箱,需对所存的货物进出计数,货物多于1000箱,灯L1亮;货物多余5000箱,灯L2亮。进货的输入信号为bInput,出货对应输入信号为bOutput。具体详见表6-x的变量分

配表。

使用CTUD指令,当进货时,

bInput连接双向计数器的CU信号

进行数值累加,出货时,bOutput

连接双向计数器的CD信号进行数

值递减。当前数值用FB_CTUD.CV

进行表示。输出采用比较指令,如

当前计数数值大于nL1Value,L1

为ON,大于nL2Value,L2为ON。

程序举例详见图 6.x所示,样例程

序请参考\AutoWarehouse\。

图6.x 自动仓库进出货计数功能举例

6.4数据处理指令

CoDeSys标准功能库中所提供数据处理指令包括选择操作指令、比较指令和移位指令等,下文会对各部分的指令进行详细说明。

6.4.1选择操作指令

在实际的应用中常会用到一些数据的选择和筛选,在选择操作指令中会介绍几种常用的指令供读者在将来的实际应用中提供便利,常用选择操作指令如表6-x所示。

表6-x 选择操作指令的图形化与文本化指令表

1.二选一指令SEL

功能:通过选择开关,在两个输入数据中选择一个作为输出,选择开关为FALSE时,输出为第一个输入数据,选择开关为TRUE时,输出为第二个数据。

语法:其文本化语言语法格式如下,

OUT := SEL(G, IN0, IN1)

参数G必须是布尔变量。如果G是FALSE,则返回值的结果是IN0,如果G是TRUE ,则返回值的结果为IN1,其参数说明详见表6-x所示。

表6-x二选一指令SEL参数说明

【例6.x TRUE时,输出为4,具体实现程序如下。

VAR

iVar1:INT:=3;

iVar2:INT:=4;

iOutVar: INT;

bInput: BOOL;

END_VAR

iOutVar:=SEL(bInput,iVar1,iVar2);

2.取最大值MAX

功能:最大值函数。在多个输入数据中选择最大值作为输出。

语法:其文本化语言语法格式如下所示,

OUT := MAX(IN0, …,INn)

其参数说明详见表6-x所示。

表6-x 取最大值MAX参数说明

【例6.x

VAR

iVar1:INT:=30;

iVar2:INT:=60;

iOutVar: INT;

END_VAR

iOutVar:=MAX(iVar1,iVar2);

程序运行后输出结果为60。

3.取最小值MIN

功能:最小值函数。在多个输入数据中选择最小值作为输出。

语法:其文本化语言语法格式如下所示,

OUT := MIN(IN0, …,INn)

IN0, INn 以及 OUT 可以是任何数据类型,其参数说明详见表6-x所示。

表6-x取最小值MIN参数说明

【例6.x

VAR

iVar1:INT:=30;

iVar2:INT:=60;

iOutVar: INT;

END_VAR

iOutVar:=MIN(iVar1,iVar2);

程序运行后输出结果为30。

4.限制值LIMIT

功能:限制值输出。判断输入数据是否在最小值和最大值之间,若输入数据在两者之间,则直接把输入数据作为输出数据进行输出。若输入数据大于最大值,则把最大值作为输出值。若输入数据小于最小值,则把最小值作为输出值。

语法:其文本化语言语法格式如下,

OUT := LIMIT(Min, IN, Max)

IN, Min ,Max以及返回值可以是任何数据类型,其参数说明详见表6-x所示。

表6-x限制值LIMIT参数说明

【例6.x30~80的范围内。具体实现程序如下。

VAR

iVar:INT:=90;

iOutVar: INT;

END_VAR

iOutVar:=limit(30,iVar,80);

最小值输入值为30,最大值输入值为80,实际输入值为90,大于最大值,故最终输出以最大值80为输出,故最终结果为80。

5.多选一MUX

功能:多路器操作。通过控制数在多个输入数据中选择一个作为输出。

语法:其文本化语言语法格式如下,

OUT := MUX(K, IN0,...,INn)

IN0,...,INn 以及返回值可以是任何变量类型。但是K必须为 BYTE, WORD, DWORD, LWORD, SINT, USINT, INT, UINT, DINT, LINT, ULINT 或者UDINT。 MUX 从变量组中选择第K个数据输出。其参数说明详见表6-x所示。

表6-x多选一MUX参数说明

【例6.x

体实现程序如下。

VAR

iVar:INT:=1;

iOutVar: INT;

END_VAR

iOutVar:=MUX(iVar,30,40,50,60,70,80);

最终输出结果为40,因为数据排序是从第0个元素开始累积。

如果数据超出范围,最数据按最后一个数据为输出,如例6.x中,将iVar的值设定为10,最终的输出结果为80。如果iVar为-1,最终输出值还是为80。

6.4.2 比较指令

比较指令用于两个相同数据类型的有符号数或无符号数 IN1 和IN2 的比较判断操作。涉及到的运算有: = ,>=,<=,>,<,<>在图形化语言中,比较指令是以动合触点的形式编程的,在动合触点的中间注明比较参数和比较运算符。当比较的结果为真时,该动合触点闭合;在文本化语言中,比较指令可以用符号直接表示,当比较结果为真时, PLC 将运算结果置 True 。比较指令的图形化及文本化指令的表现形式见表6-x 。

表6-x 比较指令的图形化及文本化指令表

图形化语言

【例6.X 】某风力发电设备需要对发电机温度进行实时监控,要求程序能够当发电机温度大于等于90摄氏度,并且时间维持在1min 以上,发出发电机过热警告;当温度小于等于60摄氏度,且时间维持在1min 以上,发出发电机温度过低警告。变量分配表如表6-x 所示。

表6-x 变量分配表

程序通过GE 与LE 指令对输入温度AI_rGenTemperature 进行比较。输出结果直接赋值给

定时器的输入端IN 。程序如图6.x 所示,样例程序请

参考\Temp_CMP \。

图6.x 发电机温度报警程序举例

6.4.3移位指令

移位操作指令是CeDeSys中经常使用的指令,它分为按位移位指令,循环移位指令两大类。其功能为将操作数的所有位按操作指令规定的方式移动1位n次移动,将其结果送入返回值。移位指令表的图形化及文本化指令表详见表6-x所示。

表6-x 移位指令的图形化及文本化指令表

图形化语言

1.按位左移SHL

功能:对操作数进行按位左移,左边移出位不做处理,右边空位自动补0。

语法:指令可以将输入IN中的数据左移n位,输出结果赋值至OUT,二进制数左移一位相当于将原数乘以2。如果n 大于数据类型宽度,BYTE,Word和DWORD值将填补为零。文本化语言语法格式如下所示,

OUT:= SHL (IN, n)

【例6.x】利用了按位左移指令完成WORD类型输入变量wWord1当前值左移4位,程序如6.x所示,样例程序请参考\SHL\。

图6.x 按位左移程序举例

图6.x 按位左移4位过程

如上,wWord1为16进制的0001,经过按位向左移动4位后,最终输出结果为16#0010。其过程见图6.x。低4位的空位补0。

移位运算的总位数会受到输入变量的数据类型的影响。如果输入变量是常量,将会取长度最小的数据类型。而输出变量的数据类型则不会对算术运算产生影响,通过如下例子鉴别两者的区别。

【例6.x】请比较下面16进制数的按位左移的运算,尽管byte和word形式的输入变量值相等,但根据输入变量的数据类型不同(BYTE或WORD),erg_byte和erg_word将得到不同的结果。

VAR

in_byte : BYTE:=16#45;

in_word : WORD:=16#45;

erg_byte : BYTE;

erg_word : WORD;

n: BYTE :=2;

END_VAR

erg_byte:=SHL(in_byte,n); (* 结果为16#14 *)

erg_word:=SHL(in_word;n); (* 结果为16#0114 *)

图6.x BYTE与WORD变量按位左移比较

当BYTE类型变量b6和b7位左移2位后溢出,最终的数据为16进制的14。而当WORD类型变量的b6和b7位左移两位后,进入高字节的b8和b9位,该位会继续保留,最终的结果为16进制的114。其过程见图6.x所示。

2.按位右移SHR

功能:对操作数进行按位右移,右边移出位不做处理,左边空位自动补0。

语法:指令可以将输入IN中的数据右移n位,输出结果赋值至OUT,二进制数右移一位相当于将原数除以2。如果n 大于数据类型宽度,BYTE,Word和DWORD值将填为零。如果使用带符号数据类型,则算术移位将按最高位补充数。其文本化语言语法格式如下所示,OUT:= SHR (IN, n)

【例6.x】利用按位右移指令完成WORD类型输入变量wWord1的当前值右移5位,输出结果赋值给wWord2,程序如6.x所示,样例程序请参考\SHR_WORD\。

图6.x 按位右移程序举例

图6.x 按位右移5位过程

如上,wWord1为16进制的0100,经过向右移动5位后,最终输出结果为16#0008。由于WORD类型变量属于无符号数据类型,有效值从0~65535,故右移5位后,没有符号位,高5位补0,移位过程如图6.x所示。

例6.x为无符号位的数据右移,如遇到有符号整型数据,高位右移需要补符号位。如下例 6.x 所示。

【例6.x】利用按位右移指令完成INT类型输入变量iINT1的当前值右移4位,输出结果赋值给iINT2,程序如6.x所示,样例程序请参考\SHR_INT\。

图6.x 带符号位的按位右移程序举例

图6.x 带符号位的按位右移4位过程

如上,由于INT为有符号位数据,有效值为-32768~32767,iINT1为16进制有符号数据F100,最高位b15为符号位,经过向右移动4位后,需要补数据,由于源数据符号位为1,故高4位补4个1,故程序运行最终结果为16#FF10,具体移位过程如图6.x所示。

3.循环左移ROL

功能:对操作数进行按位循环左移,左边移出的位直接补充到右边的最低位。

语法:允许的数据类型:BYTE、WORD、DWORD,使用该指令可以将输入IN中的全部内容循环的逐位左移,空出的位用移出位的信号状态填充。输入参数n提供数值表示循环移动的位数,OUT是循环移位的操作结果。其文本化语言语法格式如下所示,

OUT:= ROL (IN, n)

【例 6.x】创建一个POU,试对比按位左移和循环左移的区别,将16进制WORD型变量wWord1分别采用两种不同的左移方式移动同样的位数,试比较结果。

图6.x 按位左移循环左移比较程序举例

图6.x 循环左移4位程序举例

通过例6.x不难看出,使用循环右移后的输出wWord3的b0~b3位并不是将空位补0,而是将输入数据wWord1中的b12~b15中的1010补到b0~b3位,其详细过程详见6.x图示。

循环移位指令的总位数同样也会受到输入变量的数据类型的影响。如果输入变量是常量,将会取长度最小的数据类型。而输出变量的数据类型则不会对算术运算产生影响,通过如下例子鉴别两者的区别。

【例6.x】请比较下面16进制数的循环左移的运算,尽管byte和word形式的输入变量值相等,但根据输入变量的数据类型不同(BYTE或WORD),erg_byte和erg_word将得到不同的结果。

VAR

in_byte: BYTE:=16#45;

in_word: WORD:=16#45;

erg_byte : BYTE;

erg_word : WORD;

n: BYTE :=2;

END_VAR

erg_byte:=ROL(in_byte,n); (* 结果为16#15 *)

erg_word:=ROL(in_word,n); (* 结果为16#0114 *)

图6.x BYTE与WORD变量循环左移比较

如图6.x所示,当BYTE类型变量的b6,b7位左移2位后移至输出数据中的b0和b1位,最终的数据为16进制的15。而当WORD类型变量的b6,b7位左移两位后,移至输出数据中的b8和b9位,原数据的b14和b15位为0,左移后,移至输出数据的b0和b1位,故最终的结果为16进制的114。

4.循环右移ROR

功能:对操作数进行按位循环右移,右边移出的位直接补充到左边最高位。

语法:允许的数据类型:BYTE、WORD、DWORD。使用该指令可以将输入IN中的全部内容循环的逐位右移,空出的位用移出位的信号状态填充。输入参数n提供数值表示循环移动的位数,OUT是循环移位的操作结果,其文本化语言语法格式如下所示,

OUT: = ROR (IN, n)

【例6.x】利用循环按位右移指令完成WORD类型输入变量wWord1的当前值循环右移5位,输出结果赋值给wWord2,程序如6.x所示,样例程序请参考\ROR_WORD\。

图6.x 循环按位右移程序举例

图6.x 循环按位右移5位过程

最终程序的运行结果为16进制的1008,程序将原来wWord1的低5位b0~b4移至wWord2中的b11~b15。

【例6.x】利用循环右移指令,设计一个16位的闪灯程序,按2s的频率逐一向右闪烁。

图6.x 循环按位右移闪灯程序

通过通电延时定时器的输出每2秒触发一次指令循环右移指令,样例程序请参考\ROR_LIGHT\。

6.5运算指令

运算指令针对操作数进行运算,同时产生运算结果。运算指令是一种专门处理数据运算的特殊符号,数据变量结合的运算指令形成完整的程序运算语句。本节会针对CoDeSys中常用的运算指令做详细介绍,包括赋值指令、算术运算指令、数学运算指令和地址运算指令。

6.5.1赋值指令

赋值指令是CoDeSys中最常用的指令,在实际应用中,他实现的功能是将一个变量的数据传送给另外一个变量中。

1.赋值指令MOVE

功能:将一个常量或者变量的值赋给另外一个变量,也是CoDeSys中最常用的指令,赋值指令表的图形化及文本化指令表详见表6-x所示。

表6-x 赋值指令的图形化及文本化指令表

图形化语言

【例

图6.x MOVE指令程序举例

如使用文本化指令,实现例6.x中的代码为:

nVar2:=nVar1;

6.5.2算术运算指令

+、-、*、/、MOD运算指令都算算术运算指令,分别用于进行加、减、乘、除和求余数运算。下面对这几种算术运算指令进行详细的讲解。其指令详细详见表6-x所示。

表6-x 算术运算指令的图形化及文本化指令表

1. 加法运算ADD

功能:加法运算指令,两个(或者多个)变量或常量相加。两个时间变量也可相加,结果是另一个时间变量。

语法:指令可以将输入变量IN0的值直至INn 的值做加法运算,将其结果赋值至OUT 。加法运算指令支持如下的变量类型,BYTE 、WORD 、DWORD 、SINT 、USINT 、INT 、UINT 、DINT 、UDINT 、(L)REAL 、TIME 和常数。其文本化语言语法格式如下所示,

OUT := IN0 +…+INn

【例6.x 】创建一个POU ,声明两个整型变量iVar1和iVar2,并将iVar1赋值为2014,然后使iVar2的值为iVar1与 iVar1相加后的值,具体代码如下。

VAR

iVar1:INT :=2014; iVar2:INT; END_VAR

iVar2:=iVar1+iVar1;

程序的运行结果为iVar2等于4028。

【例6.x 】在实际工程中,经常需要记录操作的次数,使用ST 程序语言,当数字累加到10时,将该累计变量清零。

如下为使用ST 语言的程序实现。通过上升沿触发功能块对被加数iCounter 进行累加。 VAR

bCalStart: BOOL;

FB_StartTrigR_TRIG:R_TRIG; iCounter:word; END_VAR

FB_StartTrigR_TRIG(CLK:=bCalStart); IF FB_StartTrigR_TRIG.Q THEN iCounter:=iCounter+1; END_IF

IF iCounter=10 THEN iCounter:=0; END_IF

样例程序请参考\ADD \。

注意:

TIME 型变量也可使用加法功能,两个TIME 变量相加得到一个新的时间。 例 :t#45s + t#50s = t#1m35 s 。

被选择的输出数据类型应可存储输出结果,否则可能引起数据错误。 2. 减法运算SUB

功能:减法运算指令,两个变量或常量相减。

语法:指令可以将输入变量IN0的减去IN1的值,将其结果赋值至OUT。减法运算指令支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、(L)REAL、TIME和常数。其文本化语言语法格式如下所示,

OUT := IN0 –IN1

【例6.x】创建一个POU,声明两个浮点数变量rVar1和rVar2,分别赋值3.14和10,此外再声明一个rResult变量,将其值为rVar2减去rVar1之后得到的值,具体代码如下。

VAR

rVar1:REAL:=3.14;

rVar2:REAL:=10;

rResult:REAL;

END_VAR

rResult:=rVar2-rVar1;

程序的运行结果为rResult等于6.86。

注意:

TIME型变量也可使用减法功能,两个TIME变量相减得到一个新的时间。

例:t#1m35s - t#50s = t#45s ,但时间结果不能有负值。

TOD 型变量也可使用减法功能,两个TOD型相减得到一个新的TIME型数据。

例:TOD#45:40:30- TOD#22:30:20=T#1390m10s0ms ,但时间结果不能有负值。

3.乘法运算MUL

功能:乘法运算指令,两个(或者多个)变量或常量相乘。

语法:指令可以将输入变量IN0的值直至INn的值做乘法运算,将其乘积赋值至OUT。乘法运算指令支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、(L)REAL、TIME、TOD和常数。其文本化语言语法格式如下所示,

OUT := IN0 *…*INn

【例6.x】创建一个POU,声明两个整形变量iVar1和iVar2,并分别赋值为10和2,再声明一个整型变量iResult,使其结果为iVar1和iVar2的乘积,具体实现代码如下。

VAR

iVar1:INT:=10;

iVar2:INT:=2;

iResult:INT;

END_VAR

iResult:=iVar1*iVar2;

程序的运行结果为iResult等于20。

4.除法运算DIV

功能:除法运算指令,两个变量或常量相除。

语法:指令可以将输入变量IN0的除以IN1的值,将其得到商值赋值至OUT。除法运算指令支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数。其文本化语言语法格式如下所示,

OUT := IN0 / IN1

【例6.x】创建一个POU,声明两个整型变量iVar1和iVar2,并分别赋值为10和2,再声明一个整型变量iResult,使其值为iVar1除以iVar2得到的值,具体实现代码如下。

VAR

iVar1:INT:=10;

iVar2:INT:=2;

iResult:INT;

END_VAR

iResult:=iVar1/iVar2;

在工程中使用DIV指令时,可使用CheckDivByte、CheckDivWord、CheckDivDWord和

CheckDivReal等指令检查除数是否为零,避免了除数为零的现象

5.求余数运算MOD

功能:变量或常量相除取余,结果为两数相除后的余数,是一个整型数据。

语法:求余数运算指令MOD指令可以将输入变量IN0与IN1相除的余数赋值给OUT,通常使用该运算指令创建余数在特定范围内的等式。求余数运算指令支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数。其文本化语言语法格式如下所示,

OUT := IN0 MOD IN1;

【例6.x】创建一个POU,声明两个整型变量iVar1和iVar2,并分别赋值为44和9,再声明一个整型变量iResult,使其值为iVar1与iVar2求余运算之后的值,具体实现代码如下。

VAR

iVar1:INT:=44;

iVar2:INT:=9;

iResult:INT;

END_VAR

iResult:=iVar1 MOD iVar2;

程序的运行结果为iResult等于8。

6.5.3数学运算指令

数学运算指令包括三角函数运算指令,高级算术指令,相关指令表如表6-x所示。

表6-x 数学运算指令的图形化及文本化指令表

数学运算指令图形化语言

数学算术运算

1.绝对值ABS

功能:这个函数指令是用来计算一个数的绝对值,与正负号数符号没有关系。

语法:绝对值运算指令支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数。其文本化语言语法格式如下所示,OUT := ABS (IN);

【例6.x】ABS函数示例。

VAR

iVar1:INT:=-44;

iResult:INT;

END_VAR

iResult:=abs(iVar1);

程序的运行结果为iResult等于44。

2.平方根SQRT

功能:非负实数的平方根。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := SQRT(IN);

【例6.x】SQRT函数示例。

VAR

rVar1:REAL:=16;

rResult:REAL;

END_VAR

rResult:=SQRT(rVar1);

程序的运行结果为rResult等于4。

3.指数函数EXP

功能:返回 e(自然对数的底)的幂次方,e是一个常数为2.71828的数。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := EXP(IN);

【例6.x】EXP函数示例。

VAR

rVar1:REAL:=2;

rResult:REAL;

END_VAR

rResult:=EXP(rVar1);

程序的运行结果为rResult等于7.389056。

4.自然对数LN

功能:返回一个数的自然对数。自然对数以常数项 e (2.71828182845904) 为底。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := LN (IN);

【例6.x】LN函数示例。

VAR

rVar1:REAL:=45;

rResult:REAL;

END_VAR

rResult:=LN(rVar1);

程序的运行结果为rResult等于3.80666。

5.10为底的对数LOG

功能:返回底为10数的对数。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := LOG(IN);

【例6.x】LOG函数示例。

VAR

rVar1:REAL:=314.5;

rResult:REAL;

END_VAR

rResult:=LOG(rVar1);

程序的运行结果为rResult等于2.49762。

6.正弦函数SIN

功能:正弦函数。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := SIN(IN);

【例6.x】SIN函数示例。

VAR

rVar1:REAL:=0.5;

rResult:REAL;

END_VAR

rResult:=SIN(rVar1);

程序的运行结果为rResult等于0.479426。

【例 6.x】下列程序中通过算术指令完成某角度的正弦值运算。在使用三角函数指令之前先将角度值换算成弧度值,然后再用SIN指令求正弦值。程序如图6.x所示。

图6.x 正弦SIN指令程序示例

7.余弦函数COS

功能:余弦函数。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := COS(IN);

【例6.x】COS函数示例。

VAR

rVar1:REAL:=0.5;

rResult:REAL;

END_VAR

rResult:=COS(rVar1);

程序的运行结果为rResult等于0.877583。

8.反余弦函数ACOS

功能:余弦弧度(反余弦函数)。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := ACOS(IN);

【例6.x】ACOS函数示例。

VAR

rVar1:REAL:=0.5;

rResult:REAL;

END_VAR

rResult:=ACOS(rVar1);

程序的运行结果为rResult等于1.0472。

9.反正弦函数ASIN

功能:正弦弧度(反正弦函数)。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := ASIN(IN);

【例6.x】ASIN函数示例。

VAR

rVar1:REAL:=0.5;

rResult:REAL;

END_VAR

rResult:=ASIN(rVar1);

程序的运行结果为rResult等于0.523599。

10.正切函数TAN

功能:正切函数。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := TAN(IN);

【例6.x】TAN函数示例。

VAR

rVar1:REAL:=0.5;

rResult:REAL;

END_VAR

rResult:= TAN (rVar1);

程序的运行结果为rResult等于0.546302。

11.反正切函数ATAN

功能:正切弧度(反正切函数)。

语法:输入变量IN可以是BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL和常数,但输出必须是REAL或LREAL类型。其文本化语言语法格式如下所示,

OUT := ATAN(IN);

相关主题
相关文档
最新文档