西门子S7-200系列PLC实操(32 整数运算案例二)
大家好,这节课我们学习“整数运算案例二 ”
我们先来看一下编程要求:
经过初步计算,可以明确这个运算最终的结果,肯定是不能整除的(除不尽的),那该怎么处理呢?
我们先用上节课用到的整数计算指令来处理一下看看结果哈。
可以看到,这里的结果是5。我们通过口算也可以知道,这个题的结果,商是5,余数也是5.那这个5到底是商,还是余数呢?
答案是:这个5是商,而余数呢,则被舍弃掉了。那么该如何完成这个运算呢,这里就需要运用到“转换”指令。首先,要将“整数转换成为双整数”,再将“双整数转换成为实数”。要想得到的结果满足要求,就要将除法中的除数与被除数,都转换成实数,再运用“浮点除法 ”计算结果。如下图:
上电之后,我们来看一下结果:
结果是一个5.714286的一个小数。目前这个题目的结果就结束了。
这里,我们再温习一下在“整数计算指令”中的DIV(整数相除得商/余数)的指令。
当我们使用该指令时,要注意的是输出的位置要使用VD0.我们看一下程序上电后的结果:
没错,输出就变成了一个32位的整数。转化成二进制,就是 0000 0000 0000 1001(高16位);低位相同。
说明一下,这里高位是余数, 低位是商。
下节课,我们来学习“传送指令 ”
新手西门子PLC编程技巧,就是简单快速好用
本文通过例程的方式总结一些常用的西门子PLC编程技巧,从简单到复杂,从梯形图到SCL,希望对大家有所帮助。
(一)PLC系统常闭点
PLC程序的绝对常闭点,可以作为逻辑支路断开、调试或检修的屏蔽开关,尽量使用比较独立的存储位。
(二)PLC系统常开点
PLC程序的绝对常开点,可以作为逻辑支路接通、调试或检修的接通开关,尽量使用比较独立的存储位。
(三)PLC系统上电脉冲
PLC程序的系统上电脉冲,可以作为系统初始化脉冲来复位、清零和设置系统重要参数,尽量使用比较独立的存储位。
(四)一键触发启停功能
用一个按钮实现启动和停止功能,可以作为操作按钮不够时的一个补救措施。
(五)模拟量输入标定功能
将整数的模拟量标定为实数的工程量,相当于博途中自带的SCALE_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Emin < #Emax) AND (#Dmin < #Dmax) THEN
IF #Raw < #Dmin THEN
#RawTemp := #Dmin;
END_IF;
IF #Raw > #Dmax THEN
#RawTemp := #Dmax;
END_IF;
IF (#Raw >= #Dmin) AND (#Raw <= #Dmax) THEN
#RawTemp := #Raw;
END_IF;
#OutReal := (INT_TO_REAL(#RawTemp - #Dmin) / INT_TO_REAL(#Dmax - #Dmin)) * (#Emax - #Emin) + #Emin;
#OutPercentage := (#OutReal / (#Emax - #Emin)) * 100.0;
ELSE
#OutReal := 0.0;
#OutPercentage := 0.0;
END_IF;
(六)模拟量输出标定功能
将实数的工程量标定为整数的数字量,相当于博途中自带的NORM_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Dmin < #Dmax) AND (#Emin < #Emax) THEN
IF #Raw < #Emin THEN
#RawTemp := #Emin;
END_IF;
IF #Raw > #Emax THEN
#RawTemp := #Emax;
END_IF;
IF (#Raw >= #Emin) AND (#Raw <= #Emax) THEN
#RawTemp := #Raw;
END_IF;
#OutInteger := REAL_TO_INT(((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin));
#OutPercentage := ((((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin)) / INT_TO_REAL((#Dmax - #Dmin))) * 100.0;
ELSE
#OutInteger := 0;
#OutPercentage := 0.0;
END_IF;
RETURN;
(七)冒泡法排序功能
通过冒泡法升序或降序模式排序数组。
(1)子程序调用
(2)子程序变量声明
(3)模式为1(升序)的运行结果如下图所示:
(4)模式为0(降序)的运行结果如下图所示:
(5)SCL代码
IF #Enable THEN
//获取数组上限
#L := LOWER_BOUND(ARR := #Array, DIM := 1);
//获取数组下限
#H := UPPER_BOUND(ARR := #Array, DIM := 1);
//冒泡法排序
FOR #i := #L TO #H-1 DO
FOR #j := #L TO #H-1-#i DO
IF #Mode THEN
//升序
IF #Array[#j] > #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
ELSE
//降序
IF #Array[#j] < #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_IF;
(八)斜坡函数功能
输出值按照指定斜率(单位/秒)跟随设定值,可以用来防止数值突变,这个功能可以在博途中添加扩展库函数(LGF)后直接调用Ramp函数。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
#rv1:= RD_SYS_T(#ActualTime);
IF #InitFB = true THEN
#LastTime := #ActualTime;
#AuxOut := #SetPoint;
#Out := #AuxOut;
END_IF;
#DeltaTime_T:= T_DIFF(IN1:=#ActualTime, IN2:=#LastTime);
#DeltaTime_DI:= TIME_TO_DINT(#DeltaTime_T);
#DeltaTime:= DINT_TO_REAL(#DeltaTime_DI);
#DeltaTime := #DeltaTime / 1000.0;
#LastTime := #ActualTime;
IF #SetPoint < #AuxOut THEN
#Out := #AuxOut;
#auxR := #AuxOut - (#Rate * #DeltaTime);
#Out := #AuxOut;
#AuxOut := MAX(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
RETURN;
ELSE
IF #SetPoint > #AuxOut THEN
#Out := #AuxOut;
#auxR := (#Rate * #DeltaTime) + #AuxOut;
#Out := #AuxOut;
#AuxOut := MIN(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
END_IF;
END_IF;
RETURN;
例程说明
以上例程均在博途V15.1环境下测试通过,大家有什么好的编程技巧,欢迎留言!
相关问答
库卡机器人给plc发送整数的方式?
库卡机器人给PLC发送整数的方式是通过使用Modbus通信协议。Modbus是一种常用的工业通信协议,它允许不同设备之间进行数据交换。库卡机器人可以通过Modbus协议...
plc中数据类型如何改成长整数?
将浮点数转化成整数用INT指令,将整数转成浮点数用FLT指令,指令不难理解,值得注意的是,一个16位的整数转化成浮点数后要占32位的空间。一般PLC用作浮点数运算...
plc程序等于整数什么意思?
作为语法语言,PLC程序中的各种标识符都必须遵守固定的命名规则和语法规则。在某些编程语言中,等于号(=)是用来表示变量赋值操作的符号。因此,“PLC程序等于...
plc中时间如何转换成整数?
在PLC中,时间通常以小时、分钟和秒的形式表示。为了将时间转换为整数,需要将小时、分钟和秒分别乘以60和3600,然后将它们相加。例如,时间为3小时、20分钟和45...
三菱plc整数怎么转浮点?
关于这个问题,在三菱PLC中,可以使用以下方法将整数转换为浮点数:1.使用数据转换指令(DTC):DTC指令可用于将整数数据转换为浮点数。您可以指定要转换的整...
台达SX2系列PLC怎么进行16进制整数与浮点数的转换啊,梯形图指令是什么?存储结果是32位的么?多谢啦?
用FLT指令,转换结果占用2个寄存器,转换后要用双字处理用FLT指令,转换结果占用2个寄存器,转换后要用双字处理
三菱FXPLC如何将32位整数变成16位整数?
1、要看你32位的数据是否都用到,如果数值很大(要用到32位),那必须将这个数据进行等比缩小至16位数据以下,再通过数据转化即可;2、要看你的采集模块所采集...
西门子plcs7-200如何将整数转化成双整数?
Round指令,小数部分四舍五入TRUNC指令,放弃小数部分看你需要什么了。Round指令,小数部分四舍五入TRUNC指令,放弃小数部分看你需要什么了。
plc中mov怎么用?
在PLC编程中,MOV是一种数据传输指令,可以将一个寄存器或数据块中的数据传输到另一个寄存器或数据块中。以下是MOV指令的使用方法:确定要传输的数据源和目的地...
三菱q系列plc整数转化为浮点数怎么写?
关于这个问题,在三菱PLC中,将整数转换为浮点数可以这样写:1.使用数据转换指令(DTC):DTC指令可用于将整数数据转换为浮点数。您可以指定要转换的整数数据...