导读
本章节主要介绍西门子公司S7-1200系列可编程序控制器(PLC)的基本结构与应用特点,对它的编程环境及应用进行详细的讲解,结合实例介绍典型指令编程方法,并介绍PLC应用设计中应注意的主要问题。
5. 数学函数
6.转换操作
(1)转换值指令
“转换值”指令CONVERT(CONV)的IN和OUT数据类型可以为位字符串、整数、浮点数、Char、 WChar、BCD16(16 位BCD码)、BCD32(32 位BCD码)。该指令将读取参数IN的内容,并根据指令框中选择的数据类型对其进行转换,转换值存储在OUT指定的地址中。
(2)浮点数转换为整数指令
“取整”指令ROUND是将浮点数转换为四舍五入的整数。“浮点数向上取整”指令CEIL是将浮点数向上转换为较大的相邻整数,比如将32.4转换为33。“浮点数向下取整”指令FLOOR是将浮点数向下转换为较小的相邻整数,比如将32.7转换为32。“截尾取整”指令TRUNC是只取浮点数的整数部分,舍去小数部分。
(3)缩放与标准化指令
①缩放指令。
“缩放”指令SCALE_X是将浮点数输入值VA L U E(0.0≤VALUE≤1.0)线性转换为MIN(下限值)和MAX(上限值)之间的数值,并将其保存在OUT指定的地址中。单击指令框内指令名称下的问号,从下拉列表中可以设置输入输出变量的数据类型,参数MIN、MAX和OUT的数据类型应相同。输入输出之间的线性关系如图2-52(a)所示,其线性转换关系满足OUT=VALUEX(MAX-MIN)+MIN。
②标准化指令。“标准化”指令NORM_X是将输入值VALUE(MIN≤VALUE≤MAX)线性转换为0.0~1.0之间的浮点数,称为标准化或归一化,转换结果保存在OUT指定的地址中。单击指令框内指令名称下的问号,从下拉列表中可以设置输入输出变量的数据类型,参数MIN、MAX和VALUE的数据类型应相同。输入输出之间的线性关系如图2-52(b)所示,其线性转换关系满足OUT=( VALUE-MIN)/(MAXMIN)。
转换指令的应用如图2-53所示,在程序段1中,当I0.0常开触点接通时,将MW30中的整数(45)转换为实数保存在MD40(45.0),将MD50中的实数(36.4)四舍五入取整保存在MW32(36)、向上取整保存在MW34(37)、向下取整保存在MW36(36)、截尾取整保存在MW38(36)。
在程序段2中,将设定速度MW10(范围为0~1430r/min)标准化为0.0~1.0之间的值,保存在局部变量“#归一化”中,同时通过缩放指令将“#归一化”中的值(0.0~1. 0)缩放为0~27648之间的值,保存在MW20中。
7.移动操作
(1)移动值指令
移动值指令MOVE是将IN输入的源数据传送到OUT指定的目标地址中,IN和OUT的数据类型可以是所有的数据类型。如果输入IN数据类型的位长度超出输出OUT数据类型的位长度,则源值的高位会丢失。如果输入IN数据类型的位长度低于输出OUT数据类型的位长度,则目标值的高位会被改写为0。
(2)块移动指令
“块移动”指令MOVE_BLK是将一个存储区( 源范围)的数据移动到另一个存储区(目标范围)中。输入COUNT用于指定将移动到目标范围中的元素个数,IN 和OUT是待移动源区域和目标区域的首个元素地址(可以不是第一个元素地址)。
“不可中断的存储区移动”指令UMOVE_BLK的功能与MOVE_BLK 基本相同,区别在于此移动操作不会被操作系统的其他任务打断。在执行UMOVE_BLK指令期间,CPU的中断响应时间会增加。
“移动块”指令MOVE_BLK_VARIANT是将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。可以将一个完整的数组或数组的元素复制到另一个相同数据类型的数组中。源数组和目标数组的大小(元素个数)可能会不同。可以复制一个数组内的多个或单个元素。
移动值指令和块移动指令如图2-54(a)所示,当I0.0常开触点接通时,执行MOVE指令,将3送到MB10~MB12中。执行MOVE_BLK_VARIANT 指令,将源数据块中的源数组(SRC)从索引7(SRC_INDEX)开始的5个(COUNT)数据移动到目标数据块中的目标数组(DEST)从索引7(DEST_INDEX)开始的5个元素中。
执行MOVE_BLK指令,将源数据块中从源数组[1]开始的5个数据移动到目标数据块的目标数组[0]开始的单元中。执行UMOVE_BLK指令,将源数据块中从源数组[10]开始的2个数据移动到目标数据块的目标数组[5]开始的元素中。执行结果如图2-54(b)所示。
(3)填充块指令
“填充存储区”指令FILL BLK是将用IN输入的值填充到从输出OUT指定起始地址的目标范围,参数COUNT指定填充元素的个数。源范围和目标范围的数据类型应相同。“不可中断的存储区填充”指令UFILL BLK与FIL_BLK指令的功能相同,区别在于前者的填充操作不会被操作系统的其他任务打断。
(4)交换指令
“交换”指令SWAP是交换输入IN中字节的顺序,保存到输出OUT指定的地址中。填充指令与交换指令的应用如图2-55所示,当I0.0常开触点接通时,执行FILL_BLK指令,将常数35填充到源数据块中从源数组[0]开始的5个元素中。执行UFILL_BLK指令,将常数23填充到源数据块中从源数组[5]开始的5个元素中。执行DWord数据类型的SWAP指令,交换4个字节中数据的顺序,保存到OUT指定的地址中。
(5)序列化和取消序列化指令
“序列化”指令Serialize是将多个PLC数据类型(UDT)、结构或数组转换为顺序表示而不会丢失结构部分。可以使用该指令临时将用户程序的多个结构化数据项保存到缓冲区中(最好位于全局数据块中),并发送到其他CPU。
“取消序列化”指令Deserialize是将PLC数据类型(UDT)、结构或数组的顺序表示进行反向转换,并填充所有内容。
内容来源:《电气工程基础与应用》
END