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
文章为作者独立观点不代本网立场,未经允许不得转载。