FX 5U PLC的FUN通用函数介绍(下)

在上一篇文章中给大家介绍了一下我们三菱FX5U PLC的一些FUN通用函数,包括位布尔功能、类型转化、算术运算,还有比较、时间数据类型、位移位等功能函数没有介绍完,那么这篇就接着继续介绍吧。

比较功能函数包括GT、GE、EQ、LE、LT、NE,它们都有两个输入IN,这些函数是进行输入值的比较运算后,将运算结果以BOOL型进行输出。我们以GT函数为例讲一下吧,GT函数就是进行多个输入的逐一比较。当全部s(n-1)>s(n)时,输出TRUE。

只要有某个为s(n-1)≤s(n)时,输出FALSE。像下图的第一段程序D0>D2>D4>D6满足逐次比较关系,所以可以使M0输出为ON,而下一段D0>D2>D4<D6,其中D4不满足大于的比较关系,所以M0输出为OFF。

比较NE函数是进行s1是否不等于s2的比较。下图程序的第一段D10≠D12,使M10输出为ON,第二段程序的D10=D12,使M10输出为OFF。

我们下面以一个简单的例子来学习下比较函数的使用。

【案例】仓库货物计数【案例源文件,下载方式请看文末!!】

仓库有进货和出货两个感应开关,当进货感应开关感应后,仓库中的货物件数加1,当出货感应开关感应后,仓库中的货物件数减1,如果货物件数达到100件时触发满仓报警信号,当货物件数小于5件时,触发缺货报警信号。

时间数据类型功能包括加法运算ADD_TIME、减法运算SUB_TIME、乘法运算MUL_TIME、除法运算DIV_TIME,与普通的算术运算功能差不多,区别在于这几个是对时间数据的运算。 ADD_TIME是对输入的TIME型数据进行加法运算(s1)+(s2)后,将运算结果从(d)以TIME型进行输出。

MUL_TIME和DIV_TIME:对输入的数据进行乘/除法运算(s1)×(s2)/(s1)÷(s2),将运算结果从(d)以TIME型进行输出。其中(s1)的输入值为TIME型,(s2)的输入值为INT型/DINT型/REAL型。

我们在使用的使用要注意一下时间的输入方式哦,是以T#后面带时间的方式,其中d代表天、h代表小时、m代表分钟、s代表秒、ms代表毫秒,我们可以以下图这样的程序去监控执行一下就清楚啦。

位移位指令包括n位左移SHL、n位右移SHR、n位循环左移ROL、n位循环右移ROR。我们就以n位左移SHL和n位循环左移ROL为例讲解一下。

n位左移SHL:将s中输入的16位数据/32位数据左移n位后,从d以与s相同的数据类型进行输出。下图是n的输入值为8的情况。

n位循环左移ROL:将s中输入的16位数据/32位数据向左n位旋转后,从d以与s相同的数据类型进行输出。下图是n的输入值为3的情况,向左旋转3位。

我们下面以一个简单的例子来学习下位移位函数的使用。

【案例】编写流水灯控制程序【案例源文件,下载方式请看文末!!】

有8盏灯,分别接Y0~Y7,要求按下启动按钮,从Y0开始每隔1s点亮下一盏熄灭上一盏,当最后一盏灯点亮后延时2s,然后以反方向以同样的方式进行点亮,当回到第一盏时,延时2后重新开始新的一个轮回,按下停止按钮指示灯熄灭。

以上就是比较、时间数据类型、位移位等功能函数的介绍,你学会了吗?

(技成培训网原创,作者:蔡慧荥,未经授权不得转载,违者必究)

C语言 函数练习题2

1. 数组逆序存放(1级)2

【题目描述】

编写程序,输人一组数据存入数组,调用函数将这组数据按原来顺序的逆序存放,输出函数调用之前和调用之后的存放情况。

【输入】

输入任意一组数据

【输出】

函数调用之前和调用之后的存放

【样例输入】

ABC 123↙

【样例输出】

Before oppsite():

str[0]=A str[1]=B str[2]=C str[3]= str[4]=1 ste[5]=2 str[6]=3↙

After oppsite():

str[0]=3 str[1]=2 str[2]=1 str[3]= str[4]=A ste[5]=B str[6]=C↙

参考代码:

2. 字符串长度(2级) 3

【题目描述】

编写函数,求一个字符串长度。main函数中输入字符串,并输出其长度

【输入】

一个字符串。

【输出】

其字符个数。

【样例输入】

china↙

【样例输出】

5↙

参考代码:

3. 数的合并(1级)1

【题目描述】

编写一个能将两个数合并成一个数的函数MergeData,具体合并的方式是:将两个两位数的正整数num1、num2合并形成一个整数放在newnum中,并将num1的十位和个位依次存放在newnum数的十位和千位上,num2的十位和个位依次存放在newnum数的个位和百位上。

【输入】

两个整数num1、num2。

【输出】

合并后的新数据newnum。

【样例输入】

45 12↙

【样例输出】

newnum=5241↙

参考代码:

4. 素数的判断(1级) 1

【题目描述】

请编写一个判断素数的函数PrimeJudge。具体功能是对录入的一个整数num进行判断,判断其是否为素数,如果是素数,则返回1,否则返回0。

【输入】

一个整数num。

【输出】

num如果是素数,则返回1,否则返回0。

参考代码:

5. 求阶乘(1级) 1

【题目描述】

请编写求阶乘的函数Facto,其功能是:对录入的任意正整数n进行计算并输出从1到n之间所有数的阶乘值。如果n>0,则输出1-n的阶乘值;否则,提示输入数据错误

【输入】

正整数n。

【输出】

如果n>0,则输出1-n的阶乘值;否则,提示输入数据错误。

参考代码:

6. 求级数(1级) 1

【题目描述】

请编写一个计算级数和的函数fun,从键盘录入整数x和整数n,按给出的算式进行计算,其结果值S由函数值返回。

【输入】

两个整数x和n。

【输出】

级数的和s。

【样例输入】

0.3 10↙

【样例输出】

1.349859↙

参考代码:

7. 浮点数四舍五入(1级) 1

【题目描述】

请编一个将浮点数四舍五入的函数Fun,其功能是使浮点数保留2位小数,并对第3位进行四舍五入(规定实型数为正数)。

例如:实型数为1234.567,则函数返回1234.570000;实型数为1234.564,则函数返回1234.560000。

【输入】

一个浮点数。

【输出】

精确到小数点后面2位的浮点数。

【样例输入】

1234.567↙

【样例输出】

1234.570000↙

参考代码:

8. 长整型截短(1级) 1

【题目描述】

编写一个函数Fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。

【输入】

一个整数n。

【输出】

按照要求形成的新整数。

【样例输入】

27638496↙

【样例输出】

The result is: 26846↙

参考代码:

9. 偶数分解(1级)Y 1

【题目描述】

编写函数实现对整数进行分解。具体要求是:输入若干个大于2的正整数,如果该数是偶数,则将其分解为两个素数(只需找出第一对素数)并输出;如果输入的奇数,则输出“××× is odd number!” ;输入为0时程序结束。只有1和它本身这两个因数的自然数叫做素数,0和1既不是素数也不是和数。

【输入】

大于2的整数序列。

【输出】

如果是偶数,则输出偶数被分解为两个素数和的表达式,否则,输出是奇数。

【样例输入】

3 4 0↙

【样例输出】

3 is odd number!↙

4=2+2↙

参考代码:

10. 公式求解(1级) 1

【题目描述】

请编写函数GetSum,其功能是:从键盘录入一个整数n,并按下列多项式计算并输出其结果。

【输入】

一个整数n。

【输出】

多项式的和s。

【样例输入】

15↙

【样例输出】

s=2.718282↙

参考代码:

[信捷PLC] 信捷PLC之C函数编程(三)

前两篇文章,我们介绍了如何新建一个函数功能块文件。也介绍了如何使用函数功能块实现温度检测上限、下限等的报警输出。

这一篇来详细介绍函数体的W和B是什么意思,以及我们如何使用它。

首先,新建一个函数功能块,命名为FUNC1,在FUNC1中输入以下代码,如图所示:

代码内容见下文,也可以直接复制到程序中使用。

void FUNC1 ( WORD W, BIT B )

{

#define SysRegAddr_HD_D_HM_M

if ( B[0] == true )

{

W[0] = 10;

}

else

{

W[0] = 9;

}

if ( B[1] == true )

{

W[1] = 20;

}

else

{

W[1] = 19;

}

}

格式化及编译后,程序不报错。如下图所示:

函数如下所示:void FUNC1 ( WORD W, BIT B )

其中的void为函数返回为空

FUNC1为我们定义的函数名称

其中的WORD W是形参,表示要传递给函数一个WORD类型的参数,即16位字类型的参数。

其中的BIT B也是形参,表示要传递给函数一个BIT类型的参数,即BOOL类型的参数。

100篇原创文章【公众号-我的原创】

EPLAN部件库下载链接

EPLAN激活教程

西门子作为OPC UA服务端

西门子制作HMI页面切换效果

在函数中我们使用W[0]、W[1]、W[2]、W[3]等,表示的是传给函数的WORD类型的寄存器往后顺延的地址。

例如:我将FUNC1的函数引用到主程序中,使用的是如下图所示的实现方式

LD SM0

FUNC1 D30 M10实现

则刚刚所讲述的在FUNC1中的W[0]、W[1]、W[2]、W[3]对应程序D寄存器的D30、D31、D32、D33等。

若调用的函数的第一个形参(指的是WORD W)给定的是D55,则W[0]、W[1]、W[2]、W[3]等分别对应的是D55、D56、D57、D58等等。

在函数中void FUNC1 ( WORD W, BIT B )中的BIT B 也是和WORD W具有相同的使用方式。

在程序中,将BIT B传入M10,则在FUNC1函数中使用的B[0]、B[1]、B[2]、B[3]等依次对应的寄存器M10、M11、M12、M13等。

但是需要注意的是,这款编程软件使用C函数编程,是区分大小写的例如,将W[0]=30;写成w[0]=30;(W被小写),则程序编译时候会报错。

信捷PLC之C函数编程(三)

http://bbs.plcjs.com/forum.php?mod=viewthread&tid=498136&fromuid=42656

(出处: PLC论坛-全力打造可编程控制器专业技术论坛)

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。