




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章
S7-1200PLC基本指令(SCL)第七章S7-1200PLC基本指令(SCL)
位逻辑运算1
定时器操作2
计数器操作3
比较操作4-2-
数学函数5
移动操作6
转换操作7
字逻辑运算8
移位和循环9理论课程电动机正反转连续运行控制1三相异步电动机Y-△降压启动控制2车库出入口闸机控制3十字路口交通灯控制4数学运算指令的综合应用5一个数码管显示9秒的倒计时控制6深度测量传感器模拟量控制7圆盘工件箱捷径传送控制8八层霓虹灯塔控制9第七章S7-1200PLC基本指令(SCL)实践操作7.1位逻辑运算R_TRIG经常用于启动仅需执行一次的操作,例如计数器的加一操作、触发一个短暂的动作、或者启动一个只需要在特定条件变化时触发的过程。1、指令添加步骤(1)将系统默认的OB1删除,新建SCL的OB块,如图7-1所示。图7-1新建SCL的OB块7.1位逻辑运算(2)进入OB块后,在右侧指令栏-基本指令-位逻辑运算中找到“R_TRIG”指令,双击。(3)在弹出的调用选项中默认单个实例,对其数据块命名和编号,如图7-2所示。图7-2配置R_TRIG指令的背景数据块7.1位逻辑运算加入完成后,可以在左侧项目工程系统块中看到自动生成的R_TRIG[FB1001]块和R_TRIG_DB[DB1]块。程序段中出现了R_TRIG指令的SCL程序。输入变量的上一个状态即存储在R_TRIG_DB[DB1]块中,如图7-3所示。图7-3系统生成的R_TRIG和F_TRIG程序块7.1位逻辑运算2、指令参数说明R_TRIG用于检测输入信号的上升沿,即从0变到1的瞬间,CLK中变量的上一个状态存储在“R_TRIG_DB”变量中。当R_TRIG检测到其输入参数的上升沿时,它会在一个扫描周期内将其输出Q设置为1。在下一个扫描周期开始时,输出会自动重置为0。在其它任何情况下,该指令输出的信号状态均为“0”。该指令的参数表如表7-1所示。表7-1上升沿指令的参数情况功能框SCL参数数据类型"R_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);
CLKBOOLQBOOL7.1位逻辑运算CLK(输入):控制输入端子,BOOL量,通常连接到I、Q、M、D、L中任一存储区变量或硬件输入。当这个输入从0变为1时,上升沿被激活。Q(输出):输出信号端子,BOOL量,通常连接到I、Q、M、D、L中任一存储区变量或硬件输出。当检测到输入的上升沿时,在一个PLC扫描周期中,这个输出会被设置为1。3、注意事项(1)使用R_TRIG时,需要注意PLC的扫描周期,因为输出Q只在一个扫描周期内为1。(2)R_TRIG适合用于检测短暂事件,因为它仅在检测到上升沿的那个扫描周期内激活输出。7.1位逻辑运算该指令主要用于检测一个信号的下降沿,即从逻辑“1”(高电平)到逻辑“0”(低电平)的转变。F_TRIG在自动化领域内广泛应用于各种场景,比如捕捉按钮的释放、监测传感器的状态变化等。1、指令添加步骤(1)将系统默认的OB1删除,新建SCL的OB块;(2)进入OB块后,在右侧指令栏-基本指令-位逻辑运算中找到“F_TRIG”指令,双击。(3)在弹出的调用选项中默认单个实例,对其数据块命名和编号,如图7-4所示。7.1位逻辑运算加入完成后,可以在左侧项目工程系统块中看到自动生成的F_TRIG[FB1002]块和F_TRIG_DB[DB1]块。程序段中出现了F_TRIG指令的SCL程序。输入变量的上一个状态即存储F_TRIG_DB[DB1]块中,如图7-3所示。图7-4配置F_TRIG指令背景数据块7.1位逻辑运算2、指令参数说明F_TRIG用于检测输入信号的下降沿,即从1变到0的瞬间,CLK中变量的上一个状态存储在“F_TRIG_DB”变量中。当F_TRIG检测到其输入参数的下降沿时,它会在一个扫描周期内将其输出Q设置为1。在下一个扫描周期开始时,输出会自动重置为0。在其它任何情况下,该指令输出的信号状态均为“0”。该指令的参数表如表7-2所示。表72下降沿指令的参数情况功能框SCL参数数据类型"F_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);
CLKBOOLQBOOL7.1位逻辑运算CLK(输入):控制输入,BOOL量,通常连接到I、Q、M、D、L中任一存储区变量或硬件输入。当这个输入从1变为0时,触发器被激活。Q(输出):输出信号,BOOL量,通常连接到I、Q、M、D、L中任一存储区变量或硬件输出。当检测到输入的下降沿时,在一个PLC扫描周期中,这个输出会被设置为1。3、注意事项(1)使用F_TRIG时,需要注意PLC的扫描周期,因为输出Q只在一个扫描周期内为1。(2)该指令特别适用于需要捕捉设备状态变化的场合,比如按钮释放或传感器从触发状态到非触发状态的转变。7.1.3实操案例15:电动机正反转连续运行控制任务:使用S7-1200PLC实现电动机正反转连续运行控制。控制要求:1.按下正向启动按钮SB1,交流接触器KM1得电,控制电动机正转;按下停止按钮SB3,电动机停止转动;按下反向启动按钮SB2,交流接触器KM2得电,控制电动机反转。2.若电动机正转运行时,按下反转启动按钮SB2,电动机将变成反转运行;若电动机反转运行时,按下正转启动按钮SB1,电动机将变成正转运行。注意:电动机任何时候不能同时正转和反转,否则会造成短路现象。7.1.3实操案例15:电动机正反转连续运行控制步骤:1.I/O分配表(见章节4.1.6)2.PLC外部接线图(见章节4.1.6)3.编写程序图7-5PLC变量7.1.3实操案例15:电动机正反转连续运行控制图7-6电动机正反转连续运行控制SCL程序7.1.3实操案例15:电动机正反转连续运行控制4.调试程序单击程序编辑器工具栏上的按钮,程序状态进入监视运行,该状态可以显示程序中操作数和网络的逻辑运行结果(RLO),同时可以查看用户程序中某些变量值的变化。按下正向启动按钮SB1,观察电动机是否正转,再按下反向启动按钮SB2,观察电动机能否反转。同时按下正反转启动按钮,看看电动机是否运行工作。7.2定时器操作本节我们来学习定时器对应的SCL编程方法,我们不仅要学习脉冲定时器(TP)、接通延时定时器(TON)、关断延时定时器(TOF)、保持型接通延时定时器(TONR)四个指令之外,还要学习到复位定时器(RESET_TIMER)和加载持续时间(PRESET_TIMER)两个指令。命名规则:1.IEC定时器是一个IEC_TIMER或TP_TIME数据类型的结构,可如下声明:声明为一个系统数据类型为IEC_TIMER的背景数据块(例如,“IEC_TIMER_DB”)7.2定时器操作2.声明为程序块的“Static”中数据类型为TP_TIME的局部变量(例如,#IEC_TIMER_Instance)3.IEC定时器作为系统数据类型为IEC_<定时器>的背景数据块(共享DB)您可以按如下所示将IEC定时器声明为数据块:<IEC_Timer_DB>.TP();4.IEC定时器作为块接口的局部变量(多重实例)您可以按如下所示将IEC定时器声明为局部变量:#My_Timer();7.2定时器操作脉冲定时器(TP)的指令对照表和参数表,见表7-3所示。表7-3脉冲定时器(TP)指令对照表和参数表功能框SCL参数数据类型"TP_DB".TP(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");
INBoolQBoolPTTimeETTimea)脉冲定时器LAD程序7.2定时器操作脉冲定时器的应用如图7-7所示。图7-7a为LAD程序,图7-7b为SCL程序,其功能效果是一样的,同学们可以通过第四章的学习来验证SCL的程序运行过程。图7-7c为SCL监控,可以清晰的显示出IN和Q的状态(True为1,False为0),ET“Tag_2”的值默认显示十六进制,我们可以修改为十进制,在十进制中它是以ms为单位显示内容。若在SCL程序中删除第5行代码,则监控区域里不会显示“Tag_2”的监控值。b)脉冲定时器SCL程序 c)脉冲定时器SCL监控图7-7关断延时定时器的应用7.2定时器操作接通延时定时器(TON)的指令对照表和参数表,见表7-4所示。表7-4
接通延时定时器(TON)指令对照表和参数表功能框SCL参数数据类型"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");
INBoolQBoolPTTimeETTimea)接通延时定时器LAD程序7.2定时器操作接通延时定时器的应用如图7-8所示。图7-8a为LAD程序,图7-8b为SCL程序,其功能效果是一样的,图7-8c为SCL监控。b)脉冲定时器SCL程序 c)脉冲定时器SCL监控图7-8接通延时定时器的应用7.2定时器操作【例7-1】两台电机的控制,当工作人员按下I0.0启动按钮,M1电机启动运行8秒后M2电机再自动运行,当按下I0.1两台电机同时停止工作。LAD程序请查阅【例4-2】,SCL程序如图7-9所示。图7-9【例7-1】SCL程序使用脉冲定时器7.2定时器操作关断延时定时器(TOF)的指令对照表和参数表,见表7-5所示。表7-5
关断延时定时器(TOF)指令对照表和参数表功能框SCL参数数据类型"TOF_DB".TOF(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");INBoolQBoolPTTimeETTimea)关断延时定时器LAD程序7.2定时器操作关断延时定时器的应用如图7-10所示。图7-10a为LAD程序,图7-10b为SCL程序,其功能效果是一样的,图7-10c为SCL监控。b)关断延时定时器SCL程序 c)关断延时定时器SCL监控图7-10关断延时定时器的应用b)
7.2定时器操作【例7-2】设备风扇电机延时控制,当工作人员按下I0.0启动按钮,M1主电机和M2风扇电机同时启动运行,当按下I0.1停止按钮后,主轴电机停止工作,风扇电机1分钟后停止工作。LAD程序请查阅【例4-3】,SCL程序如图7-11所示。图7-11【例7-2】SCL程序使用脉冲定时器7.2定时器操作累加型定时器(TONR)的指令对照表和参数表,见表7-6所示。表7-6累加型定时器(TONR)指令对照表和参数表功能框SCL参数数据类型"TONR_DB".TONR(IN:="Tag_Start",R:="Tag_Reset",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_Time");INBoolQBoolRBoolPTTimeETTimea)累加型定时器LAD程序7.2定时器操作关断延时定时器的应用如图7-10所示。图7-10a为LAD程序,图7-10b为SCL程序,其功能效果是一样的,图7-10c为SCL监控。b)累加型定时器SCL程序 c)累加型定时器器SCL监控图7-12累加型定时器的应用
7.2定时器操作使用RESET_TIMER“复位定时器”指令,可将IEC定时器复位为“0”。将指定数据块中定时器的结构组件复位为“0”。该指令不会影响RLO。在TIMER参数中,将“复位定时器”指令分配给程序中所声明的IEC定时器。该指令必须在IF指令中编程。示例:IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;END_IF;IF"TON_DB".ET<T#25sTHENRESET_TIMER(TIMER:="TON_DB");#Started:=False;END_IF;7.2定时器操作【例7-3】游乐场设备,当工作人员按下I0.0启动按钮,设备Q0.0运行8分钟后自动停止工作。若中途有游客感到不适,工作人员可按下I0.1停止按钮让其停止工作。LAD程序请查阅【例4-1】,SCL程序如图7-13所示。图7-13【例7-3】SCL程序7.2定时器操作可以使用PRESET_TIMER“加载持续时间”指令为IEC定时器设置时间。如果该指令输入逻辑运算结果(RLO)的信号状态为“1”,则每个周期都执行该指令。可以将在程序中声明的IEC定时器赋给“加载持续时间”指令。该指令将指定时间写入指定IEC定时器的结构中。该指令不会影响RLO。如果在指令执行时指定IEC定时器正在计时,指令将覆盖该指定IEC定时器的当前值。这将更改IEC定时器的定时器状态。示例:7.2定时器操作IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;#Preset=TrueEND_IF;IF"TON_DB".ET<T#10sAND#Preset=TrueTHENPRESET_TIMER(PT:=T#25s,TIMER:="TON_DB");#Preset:=False;END_IF;7.2.7实操案例16:三相异步电动机Y-△降压启动控制任务:使用S7-1200PLC实现机床主轴降压启动控制,降压运行5秒后转至全压运行。为了保护机床加工车削,主轴电机启动的同时冷却液电机一同工作,主轴电机停止后,冷却液电机继续工作6秒后自动停止工作。步骤:1.I/O分配表(见章节4.2.5)2.PLC外部接线图(见章节4.2.5)3.编写程序7.2.7实操案例16:三相异步电动机Y-△降压启动控制图7-15PLC变量图7-16IEC_TIMER_DB全局变量7.2.7实操案例16:三相异步电动机Y-△降压启动控制图7-17三相异步电动机Y-△降压启动控制SCL程序7.3计数器操作本节我们来学习定计数器对应的SCL编程方法,我们将分别学习加计数器(CTU)、减计数器(CTD)、加减计数器(CTUD)三个SCL指令。
CTU:加计数器的指令对照表和参数表,见表7-7所示。表7-7加计数器(CTU)指令对照表和参数表功能框SCL参数数据类型"IEC_Counter_0_DB".CTU(CU:=_bool_in_,R:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CUBOOLRBOOLPV整数QBOOLCV整数、CHAR、WCHAR、DATE7.3计数器操作b)加计数器SCL监控a)加计数器SCL程序图7-18SCL加计数器指令7.3计数器操作SCL的加计数器指令如图7-18所示。图7-18a为SCL程序,图7-18b为SCL监控。数据块_1中的Button_1变量由0变1,CU端会产生一个上身沿,计数器Number_1计数1次,直到最大值32767;PV值设置为5,计数器计数到大于等于5时,计数器输出Q信号为“1”,数据块_1中的Out_1变为1;当Reset_1为1时,计数器数值复位,清零。计数器复位Q端子,Out_1变量值变为0。7.3计数器操作减计数器(CTD)的指令对照表和参数表,见表7-8所示表7-8减计数器(CTD)指令对照表和参数表功能框SCL参数数据类型"IEC_Counter_0_DB".CTD(CD:=_bool_in_,LD:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CDBOOLLDBOOLPV整数QBOOLCV整数、CHAR、WCHAR、DATE7.3计数器操作b)减计数器SCL监控a)减计数器SCL程序图7-20SCL减计数器指令7.3计数器操作SCL减计数器如图7-20所示。图7-20a为SCL程序,图7-20b为SCL监控。当变量Load_1的信号状态变为“1”时,参数CV的值会设置为参数PV的值。只要变量Load_1的信号状态为“1”,变量Button_1的信号状态就不会影响该指令。让数据块中的load_1变为0,且每一次Button_1由0变1,CD端会产生一个上升沿,计数器减1。当计数器减至0时,计数停止,计数器输出Q信号为“1”,Out_1输出1。7.3计数器操作加减计数器(CTUD)的指令对照表和参数表,见表7-9所示。表7-9加减计数器(CTUD)指令对照表和参数表功能框SCL参数数据类型"IEC_Counter_0_DB".CTUD(CU:=_bool_in_,CD:=_bool_in_,R:=_bool_in_LD:=_bool_in_,PV:=_int_in_,QU=>_bool_out_,QD=>_bool_out_,CV=>_int_out_);CUBOOLCDBOOLRBOOLLDBOOLPVINTQUBOOL7.3计数器操作b)加减计数器SCL监控a)加减计数器SCL程序图7-20SCL加减计数器指令7.3计数器操作b)加减计数器SCL监控7.3计数器操作b)加减计数器SCL监控b)加减计数器SCL监控7.3计数器操作SCL加减计数器指令如图7-21所示。图7-21a为SCL程序,图7-21b为SCL监控。UpButton_1变量每由0变1一次,CU端会产生一个上升沿,计数器计数1次,直到最大值32767;Down_1变量每由0变1一次,CD端会产生一个上升沿,计数器减数1次,直到-32768;Load_1变为1后,PV值设置为5,计数器计数到大于等于5时,计数器输出QU信号为“1”,Up_Out输出1;4)Reset_1置1后,计数器数值复位,清零。计数器复位Up_Out,Down_out置1。7.3.4实操案例17:车库出入口闸机控制任务:使用S7-1200PLC实现地下车库车位数量的显示。控制要求如下:1.要求分别用红、绿、黄灯表示地下车库车位数的显示,本车库共有20个车位。2.系统工作时,若空余车位大于10个亮绿灯,空余车位在1~10个亮黄灯,无空余车位亮红灯。3.车库有闸机入口摄像头控制闸机入口电机和闸机出口摄像头控制闸机出口电机的车辆进出。当绿灯和黄灯亮时,汽车进入闸机可开启,当红灯亮起时入口闸机禁止抬起。(这里摄像头控制阀门我们模拟用I0.0和I0.1来代替)7.3.4实操案例17:车库出入口闸机控制4.控制室里有两个按钮,一个是计数清零按钮,另一个是计数调节按钮。5.当工作人员按下计数清零按钮时,计数器清空里面的数值,此时所有车辆无法进入。6.当工作人员按下计数调节按钮N次,3秒后计数值当前值为N次,1-20循环,即按22次为2次。步骤:1.I/O分配表(见章节4.3.4)2.PLC外部接线图(见章节4.3.4)3.编写程序7.3.4实操案例17:车库出入口闸机控制图7-22PLC变量7.3.4实操案例17:车库出入口闸机控制图7-23车库出入口闸机控制PLC程序7.3.4实操案例17:车库出入口闸机控制图7-23车库出入口闸机控制PLC程序7.4比较操作LAD中的大部分比较指令在SCL中基本消失在博图软件中的指令栏了,那是因为比较指令大部分是源比较数据与目标比较数据进行相比,他们一般比较的状态为大于、小于、等于、不等于、大于等于、小于等于之类的比较,我们在SCL中往往用>、<、=、<>、>=、<=,所以本小节主要是讲Type的检查与判断。7.4比较操作可以使用TypeOf“检查VARIANT变量的数据类型”指令查询块接口中定义的VARIANT形参变量所指向的实参变量的数据类型。使用IF语句可以将VARIANT变量与所指向的变量数据类型或直接数据类型进行比较,以确定它们是“相等”还是“不相等”。TypeOf指令没有对应的LAD指令。比较操作数可以是表7-10所示的数据类型。表7-10Typeof指令参数表参数声明数据类型存储区说明<操作数>Input二进制数、整数、浮点数、时间、日期和时间、字符串、VARIANTL(可在块接口的“Input”、“InOut”和“Temp”部分进行声明。)用于查询的操作数7.4比较操作可以使用TypeOfElements“检查VARIANT变量的ARRAY元素的数据类型”指令查询块接口界面形参VARIANT变量所指向的实参ARRAY元素的数据类型。用IF语句可以比较实参数组元素的数据类型与在块接口中声明的形参变量的数据类型,确定形参和实参的数据类型是否相等。TypeOfElements指令没有对应的LAD指令。,具体参数表见表7-11所示。表7-11TypeOfElements指令参数表参数声明数据类型存储区说明<操作数>InputVARIANT(可在块接口的“Input”、“InOut”和“Temp”部分进行声明。)用于查询的操作数7.4比较操作可以使用“IS_ARRAY”指令查询VARIANT是否指向ARRAY数据类型的变量。“IS_ARRAY”需配合IF语句使用。“IS_ARRAY”指令其参数见表7-12所示。表7-12IS_ARRAY指令参数表参数声明数据类型存储区说明<操作数>InputVARIANTL(可在块接口的“Input”、“InOut”和“Temp”部分进行声明。)用于查询的操作数函数值UDINTI、Q、M、D、L指令返回结果7.4.4实操案例18:十字路口交通灯控制任务:使用S7-1200PLC实现十字路口交通灯控制系统。控制要求如下:1.东西方向红、绿、黄联控、南北方向红、绿、黄联控。2.东西方向:先绿灯亮20秒(后3秒以1Hz闪烁),再黄灯常亮3秒,最后红灯亮,当东西方向的红灯亮时,南北方向由红灯切换为绿灯亮(工作),待南北方向由黄灯切换为红灯时,回到绿灯亮,如此循环。3.南北方向:先红灯亮,等待东西方向的红灯亮时,绿灯亮30秒(后3秒以1Hz闪烁),再黄灯常量3秒,回到红灯亮时东西方向红灯切换为绿灯亮(工作)如此循环。4.四个方向不能同时出现红灯、绿灯、黄灯亮的情况。7.4.4实操案例18:十字路口交通灯控制步骤:1.I/O分配表(见章4.4.4)2.PLC外部接线图(见章节4.4.4)3.编写程序图7-36PLC变量7.4.4实操案例18:十字路口交通灯控制图7-37十字路口交通灯控制PLC程序7.5数学函数数学函数指令用来完成数学运算。在SCL中,加、减、乘、除、取余数和幂运算可以通过+、-、*、/、MOD、**等运算符完成,其他更复杂的数学运算需要通过数学函数指令完成。ABS:计算绝对值使用“计算绝对值”指令可计算参数IN的有符号整数或实数的绝对值并将结果存储在参数OUT中。参数IN和OUT的数据类型必须相同。表7-13ABS指令对照及参数表功能框SCL参数数据类型
OUT:=ABS(IN);
INSInt,Int,DInt,Real,LRealOUTSInt,Int,DInt,Real,LReal7.5数学函数【例7-9】求-130的绝对值。图7-38ABS指令的SCL应用7.5数学函数MIN指令用于比较两个参数IN1和IN2的值并将最小值赋值给参数OUT。MIN指令的IN1、IN2和OUT三个参数的数据类型必须相同,输入最多32个参数。表7-14MIN指令对照及参数表功能框SCL参数数据类型
OUT:=MIN(in1:=_variant_in_,in2:=_variant_in_[,..in32]);
IN1IN2..IN32SInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常数OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5数学函数【例7-10】求100、150、200的最小值。图7-39MIN指令的SCL应用7.5数学函数MAX指令用于比较两个参数IN1和IN2的值并将最大值赋值给参数OUT。MAX指令的IN1、IN2和OUT三个参数的数据类型必须相同,输入最多32个参数。表7-15MAX指令对照及参数表功能框SCL参数数据类型
out:=MAX(in1:=_variant_in_,in2:=_variant_in_[,..in32]);
IN1IN2..IN32SInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常数OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5数学函数【例7-11】求100、150、200的最大值。图7-40MAX指令的SCL应用7.5数学函数LIMIT指令用于将输入参数IN的值限制在输入下限MN和输入上限MX之间。如果IN的值满足条件MN≤IN≤MX,则OUT以IN的值输出。如果IN值小于MN值则OUT值为参数MN的值。如果IN值大于MAX值则OUT值为MX的值。参数MN的值不能大于参数MX的值。参数MN、IN、MX和OUT的数据类型必须相同。表7-16LIMIT指令对照及参数表功能框SCL参数数据类型
OUT:=LIMIT(MN:=_variant_in_,IN:=_variant_in_,MX:=_variant_in_);
MN、IN和MXSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常数OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5数学函数7.5数学函数使用SQR“计算平方”指令,可以计算输入值IN的平方值,并将结果保存到指定的操作数OUT中。表7-17SQR指令对照及参数表功能框SCL参数数据类型
OUT:=SQR(IN);或OUT:=IN*IN;
IN浮点数OUT浮点数7.5数学函数【例7-13】SQR计算平方的用法。图7-42SQR指令的SCL应用7.5数学函数使用SQRT“计算平方根”指令,可以计算输入值IN的平方根,并将结果保存到指定的操作数OUT中。如果输入值大于零,则该指令的结果为正数。如果输入值小于零,则该指令返回一个无效浮点数。如果输入值为“0”,则结果也是“0”。表7-18SQRT指令对照及参数表功能框SCL参数数据类型
OUT:=SQRT(IN);
IN浮点数OUT浮点数7.5数学函数【例7-14】SQRT计算平方根的用法。图7-43SQRT指令的SCL应用7.5数学函数使用LN“计算自然对数”指令,可以计算输入值的以e(e=2.718282)为底的自然对数。如果输入值大于零,则该指令的结果为正数。如果输入值小于零,则该指令返回一个无效浮点数。表7-19LN指令对照及参数表功能框SCL参数数据类型
OUT:=LN(IN);
IN浮点数OUT浮点数7.5数学函数【例7-15】LN计算自然对数的用法。图7-44LN指令的SCL应用7.5数学函数使用EXP“计算指数值”指令,可通过底数(e=2.718282)及输入值IN来计算指数,并将结果保存在指定的操作数OUT中。表7-20EXP指令对照及参数表功能框SCL参数数据类型
OUT:=EXP(IN);
IN浮点数OUT浮点数7.5数学函数【例7-16】EXP计算指数值指令的用法。图7-45EXP指令的SCL应用7.5数学函数使用SIN“计算正弦值”指令,可以计算输入值的正弦值。输入值采用弧度形式的角度值。表7-21SIN指令对照及参数表功能框SCL参数数据类型
OUT:=SIN(IN);
IN浮点数OUT浮点数7.5数学函数【例7-17】计算+0.52359878(即π/6)的sin值。图7-46SIN指令的SCL应用7.5数学函数使用COS“计算余弦值”指令,可以计算输入值的余弦值。输入值采用弧度形式的角度值。表7-22COS指令对照及参数表功能框SCL参数数据类型
OUT:=COS(IN);
IN浮点数OUT浮点数7.5数学函数【例7-18】计算0的cos值。图7-47COS指令的SCL应用7.5数学函数使用TAN“计算正切值”指令,可以计算输入值的正切值。输入值采用弧度形式的角度值。表7-23TAN指令对照及参数表功能框SCL参数数据类型
OUT:=TAN(IN);
IN浮点数OUT浮点数7.5数学函数【例7-19】计算0.785的TAN值。图7-48TAN指令的SCL应用7.5数学函数使用ASIN“计算反正弦值”指令,可以计算正弦值所对应的角度值。输入值只能是-1到+1范围内的有效浮点数。计算出的角度值以弧度为单位,范围在-π/2到+π/2之间。表7-24ASIN指令对照及参数表功能框SCL参数数据类型
OUT:=ASIN(IN);
IN浮点数OUT浮点数7.5数学函数【例7-20】计算0.5的ASIN值。图7-49ASIN指令的SCL应用7.5数学函数使用ACOS“计算反余弦值”指令,可以计算余弦值所对应的角度值。输入值只能是-1到+1范围内的有效浮点数。计算出的角度值以弧度为单位,范围在0到+π之间。表7-25ACOS指令对照及参数表功能框SCL参数数据类型
OUT:=ACOS(IN);
IN浮点数OUT浮点数7.5数学函数【例7-21】计算0的ACOS值。图7-50ACOS指令的SCL应用7.5数学函数使用ATAN“计算反正切值”指令,可以计算正切值所对应的角度值。输入值只能是有效的浮点数(或-NaN/+NaN)。计算出的角度值以弧度为单位,范围在-π/2到+π/2之间。表7-26ATAN指令对照及参数表功能框SCL参数数据类型
OUT:=ATAN(IN);
IN浮点数OUT浮点数7.5数学函数【例7-22】计算1.0的ATAN值。图7-51ATAN指令的SCL应用7.5数学函数使用FRAC“返回小数”指令的结果将返回数值的小数位。例如,输入值123.4567时,将返回值0.4567。使用以下语法更改指令的数据类型:FRAC_<datatype>();表7-27FRAC指令对照及参数表功能框SCL参数数据类型
OUT:=FRAC(IN);
IN浮点数OUT浮点数7.5数学函数【例7-23】计算123.456的FRAC值。图7-52FRAC指令的SCL应用7.5.16实操案例19:数学运算指令的综合应用任务:编程实现{[(13+14+24)-40]×49÷17.5}4的运算结果,结果保存在MD200中。图7-53数学运算指令的综合应用SCL程序7.6
移动操作使用“Serialize”指令将多个PLC数据类型(UDT)转换成按顺序表达的版本,并且不丢失结构。可以使用该指令临时将用户程序的多个结构化数据项保存到缓冲区中(最好位于全局数据块中),并发送到其它CPU。用于保存转换后数据的存储区的数据类型必需为ARRAYofBYTE或ARRAYofCHAR。表7-28Serialize指令对照及参数表表7-28Serialize指令对照及参数表功能框SCL参数数据类型
ret_val:=Serialize(SRC_VARIABLE=>_variant_in_,DEST_ARRAY:=_variant_out_,POS:=_dint_inout_);SRC_VARIABLE所有数据类型DEST_ARRAYARRAYofBYTE或ARRAYofCHARPOSDINT函数值INT7.6
移动操作可以使用“Deserialize”指令将PLC数据类型(UDT)块的顺序表示转换回PLC数据类型并填充所有内容。该指令可以将多个按顺序表示的已转换PLC数据类型重新转换回之前的原始数据类型。表7-29Deserialize指令对照及参数表功能框SCL参数数据类型
ret_val:=Deserialize(SRC_ARRAY:=_variant_in_,DEST_VARIABLE=>_variant_out_,POS:=_dint_inout_);SRC_ARRAYARRAYofBYTE或ARRAYofCHARDEST_VARIABLE所有数据类型POSDINT函数值INT7.6
移动操作MOVE_BLK可以使用“移动块”(Moveblock)指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。使用参数COUNT可以指定将移动到目标范围中的元素个数。待移动元素的宽度由源区域中第一个元素的宽度决定。在S7-1200中,MOVE_BLK只适合实现对数据块中的数组进行移动,不能实现对不是数据块的存储器进行块移动。仅当源范围和目标范围的数据类型相同时,才能执行该指令。表7-29Deserialize指令对照及参数表功能框SCL参数数据类型
MOVE_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD7.6
移动操作【例7-25】使用MOVE_BLK:移动块指令对数据块DB1中的班级1数据移动到数据块DB1中的班级2。具体操作方法:在DB1中建立两个数组,进行数据传输。a)SCL程序7.6
移动操作b)程序运行监控
图7-55MOVE_BLK指令的应用7.6
移动操作MOVE_BLK_VARIANT可以使用“移动块”(Moveblock)指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。可以将一个完整的ARRAY或ARRAY的元素复制到另一个相同数据类型的ARRAY中。源ARRAY和目标ARRAY的大小(元素个数)可能会不同。可以复制一个ARRAY内的多个或单个元素。要复制的元素数量不得超过所选源范围或目标范围。7.6
移动操作表7-31MOVE_BLK_VARIANT指令对照及参数表功能框SCL参数数据类型MOVE_BLK(in:=_variant_in,count:=_uint_in,out=>_variant_out);
SRCVARIANT(指向一个ARRAY或一个ARRAY元素),ARRAYof<数据类型>,不为BOOL和BOOL型ARRAYCOUNTUDINTSRC_INDEXDINTDEST_INDEXDINTDESTVARIANTRET_VALINT7.6
移动操作【例7-26】使用MOVE_BLK_VARIANT:移动块指令对数据块DB1中的班级1数据移动到数据块DB1中的班级2。具体操作方法:在DB1中建立两个数组,进行数据传输。a)SCL程序7.6
移动操作b)程序运行监控图7-56MOVE_BLK_VARIANT指令的应用7.6
移动操作UMOVE_BLK指令与MOVE_BLK指令的功能一致,区别在于UMOVE_BLK指令在执行的时候不可以被中断,也就是此时CPU不会响应其他中断,得UMOVE_BLK指令执行完之后再响应,因此UMOVE_BLK指令需谨慎使用。当需要连续执行移动操作且要求不被中断,可以使用UMOVE_BLK指令。仅当源范围和目标范围的数据类型相同时,才能执行该指令。表7-32UMOVE_BLK指令对照及参数表功能框SCL参数数据类型UMOVE_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD7.6
移动操作a)SCL程序b)程序运行监控图7-57UMOVE_BLK指令的应用从图7-57b监控中我们发现,当变量Start_1为0时,数组数据不发生移动。当Start_1为1时,执行UMOVE_BLK指令,将数组A_1[1]开始的2个元素移动到以数组元素B_1[0]开始的2个元素中。7.6
移动操作可以使用“FILL_BLK:填充块”指令,用参数IN的值填充一个存储区域(目标范围)。从输出OUT指定的地址开始填充目标范围。可以使用参数COUNT指定复制操作的重复次数。执行该指令时,输入IN中的值将移动到目标范围,重复次数由参数COUNT的值指定。仅当源范围和目标范围的数据类型相同时,才能执行该指令。复制操作的最大重复次数为ARRAY或结构中的元素个数。表7-33FILL_BLK指令对照及参数表功能框SCL参数数据类型FILL_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD7.6
移动操作
图7-58FILL_BLK指令的应用b)程序运行监控
a)SCL程序从图7-58b监控中我们发现,当变量Start_1为0时,不发生复制。当Start_1为1时,执行FILL_BLK指令,将浮点型数值1.1复制到数组B_1[0]开始的2个元素中。7.6
移动操作可以使用“不可中断的存储区填充”(Fillblockuninterruptible)指令,将参数IN输入的值填充一个存储区域,存储区域变量的值都将被赋值为参数IN的值。该指令与FILL_BLK指令的功能一致,区别在于UFILL_BLK指令在执行的时候不可以被中断,也就是此时CPU不会响应其他中断,得UFILL_BLK指令执行完之后再响应,因此UMOVE_BLK指令需谨慎使用。该指令不可中断。从输出OUT指定的地址开始填充目标范围。可以使用参数COUNT指定复制操作的重复次数。执行该指令时,输入IN中的值将移动到目标范围,重复次数由参数COUNT的值指定。仅当源范围和目标范围的数据类型相同时,才能执行该指令。复制操作的最大重复次数为ARRAY或结构中的元素个数。表7-34UFILL_BLK指令对照及参数表功能框SCL参数数据类型UFILL_BLK(in:=_variant_in,count:=int,out=>_variant_out);IN二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD7.6
移动操作
图7-59UFILL_BLK指令的应用b)程序运行监控
a)SCL程序从图7-59b监控中我们发现,当变量Start_1为0时,不发生复制。当Start_1为1时,执行UFILL_BLK指令,将浮点型数值1.1复制到数组B_1[1]开始的2个元素中。7.6
移动操作SCATTER指令的功能是将一个word、Byte、Dword的数据类型转换为单个的位。并保存在ARRAYofBOOL、匿名STRUCT或仅包含有布尔型元素的PLC数据类型中。ARRAY、STRUCT或PLC数据类型中包含的元素数目必须恰好等于位序列指定的数量。当输入数据类型为BYTE,则输出的目标ARRAY、STRUCT或PLC数据类型中必须恰好包含8个元素;当输入数据类型为WORD,则输出的目标ARRAY、STRUCT或PLC数据类型中必须恰好包含16个元素;当输入数据类型DWORD,则输出的目标数据类型中必须恰好包含32个元素;LWORD则为64个元素。表7-35SCATTER指令对照及参数表功能框SCL参数数据类型SCATTER(IN:=_byte_in_,OUT=>_bool_out_);IN二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TODOUT二进制数、整数、浮点数、定时器、DATE、CHAR、WCHAR、TOD7.6
移动操作
图7-60SCATTER指令的应用b)程序运行监控
a)SCL程序从图7-60b监控中我们发现,当变量Start_1为0时,不发生解析。当Start_1为1时,执行SCATTER指令,将十六进制的Byte数值A转换为八位二进制的位数值分布在八位数组元素B_1[0]—B_1[7]中。解析转换完毕后,数组元素B_1[2]数值为0,Result_1变量为FALSE。数组元素B_1[3]数值为1,Result_2变量为TRUE。7.6
移动操作SCATTER_BLK指令用于将BYTE、WORD、DWORD或LWORD数据类型的ARRAY分解为单个位,并保存在元素类型仅为布尔型的ARRAYofBOOL、匿名STRUCT或PLC数据类型中。在COUNT参数中,可指定待解析源ARRAY中的元素数目。从分配给参数OUT指定的元素开始,将参数IN数组下限元素开始的第COUNT个BYTE、WORD、DWORD或LWORD解析为单个的位。要保存解析后的各个位,OUT参数中必须包含足够的元素数量。但这可能会增加目标存储区空间。表7-36SCATTER_BLK指令对照及参数表功能框SCL参数数据类型SCATTER_BLK(IN:=_byte_in_,COUNT_IN:=_uint_in_,OUT=>_bool_out_);INARRAY[*]of<位序列>的元素COUNT_INUSINT,UINT,UDINTOUTARRAY[*]ofBOOL、STRUCT或PLC数据类型的元素7.6
移动操作
图7-61SCATTER_BLK指令的应用b)程序运行监控
a)SCL程序从图7-61b监控中我们发现,当变量Start_1为0时,不发生解析。当Start_1为1时,执行SCATTER_BLK指令,将Input_1数组中的Input_1[2]、十六进制的Byte数值07转换为八位二进制的位数值分布在八位数组元素B_1[0]—B_1[7]中。解析转换完毕后,数组元素B_1[2]数值为1,Result_1变量为TRUE。数组元素B_1[3]数值为0,Result_2变量为FALSE。7.6
移动操作GATHER指令“将各个位组合为位序列”用于将仅包含布尔型元素的ARRAYofBOOL、STRUCT或PLC数据类型中的各个位组合为一个位序列。组合后的位序列,保存在一个变量中,变量数据类型为BYTE、WORD、DWORD或LWORD。ARRAY、STRUCT或PLC数据类型中包含的元素数目必须恰好等于位序列对应的数量。当输出数据类型为BYTE,则输入的目标ARRAY、STRUCT或PLC数据类型中必须恰好包含8个元素;当输出数据类型为WORD,则输入的目标ARRAY、STRUCT或PLC数据类型中必须恰好包含16个元素;当输出数据类型DWORD,则输入的目标数据类型中必须恰好包含32个元素;LWORD则为64个元素。表7-37GATHER指令对照及参数表功能框SCL参数数据类型GATHER(IN:=_bool_in_,OUT=>_byte_out_);INARRAY[*]ofBOOL、STRUCT或PLC数据类型*:8、16、32或64个元素OUTBYTE、WORD、DWORD7.6
移动操作
图7-62GATHER指令的应用b)程序运行监控
a)SCL程序从图7-62b监控中我们发现,当变量Start_1为0时,不发生组合。当Start_1为1时,执行GATHER指令,将Input_1数组中的八位二进制的数组元素的值转换为十六进制数保存在Byte型变量B_1中。7.6
移动操作GATHER_BLK指令“将各个位组合为ARRAYof<位序列>的多个元素”用于将仅包含布尔型元素的ARRAY数组、STRUCT或PLC数据类型中的各个位组合为ARRAYof<位序列>中的一个或多个元素。可以在COUNT_OUT参数中指定要写入的目标ARRAY元素数量。OUT参数中目标ARRAY的元素数量必须包含足够的元素数目。表7-38GATHER_BLK指令对照及参数表功能框SCL参数数据类型GATHER_BLK(IN:=_bool_in_,COUNT_OUT:=_uint_in_,OUT=>_byte_out_);INARRAY[]ofBOOL、STRUCT或PLC数据类型COUNT_OUTUSINT,UINT,UDINTOUTARRAY[]of<位序列>的数组元素7.6
移动操作
图7-63GATHER_BLK指令的应用b)程序运行监控
a)SCL程序从图7-63b监控中我们发现,当变量Start_1为0时,不发生组合。当Start_1为1时,执行GATHER_BLK指令,对输入的数组元素A_1[2]开始的2个Byte数量即16位的二进制元素串转换为2个十六进制数值,然后保存在输出数组元素B_1[1]开始的2个数组元素中。7.6
移动操作SWAP交换指令可以更改输入参数IN中字节的排列顺序,并将结果保存在指定的操作数OUT中。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-39SWAP:交换指令对照及参数表功能框SCL参数数据类型OUT:=SWAP(IN);<表达式>WORD,DWORD函数值WORD,DWORD7.6
移动操作
图7-64GATHER_BLK指令的应用b)程序运行监控
a)SCL程序从图7-62b监控中我们发现,从图7-64b监控中我们发现,当变量Start_1为0时,不发生变换。当Start_1为1时,执行SWAP交换指令,对输入变量A_1的十六进制数值A1B2C3D4交换顺序变成十六进制数值D4C3B2A1,数值D4C3B2A1以函数值返回赋值给了变量B_1。7.6.13实操案例20:一个数码管显示9秒的倒计时控制任务:使用S7-1200PLC实现一个数码管显示9秒的倒计时控制。控制要求是当按钮I0.0按下后,数码管显示9、8、7、6、5、4、3、2、1、0,熄灭。数字切换间隔1秒。步骤:I/O分配表(见章节4.6.8)2.PLC外部接线图(见章节4.6.8)3.编写程序(见章节7.6.13)7.6.13实操案例20:一个数码管显示9秒的倒计时控制
思考一下,数码显示输出部分是否可以优化程序?或者用其他指令来做。CASE语句。7.7转换操作使用该指令时,“转换”(CONVERT)对话框首先弹出。需先在此对话框中指定转换的源数据类型和目标数据类型。该指令将读取源值并将其转换为指定的目标数据类型。参数IN的存储区有I、Q、M、D、L、P或常量,参数OUT的存储区有I、Q、M、D、L、P或常量。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-40CONVERT:转换值指令对照及参数表功能框SCL参数数据类型OUT:=<datatypein>_TO_<datatypeout>(byte_in);源类型(要转换的值)二进制数、整数、浮点数、时间、日期和时间、字符串、BCD16和BCD32目标类型(转换结果)二进制数、整数、浮点数、时间、日期和时间、字符串、BCD16和BCD327.7转换操作
图7-66CONVERT指令的应用b)程序运行监控
a)SCL程序从图7-66b监控中我们发现,当Start_1为1时,执行第一条CONVERT转换值指令REAL_TO_INT,对输入变量Input_1的浮点型数值3.5按照四舍五入的原则转变成整型数值4并以函数值返回赋值给了变量Result_1。然后执行第二条CONVERT转换值指令INT_TO_REAL,对输入变量Input_2的整型数值4转变成浮点型数值4.0并以函数值返回赋值给了变量Result_2。7.7转换操作ROUND“取整”指令用于将输入IN的值取整为最接近的整数。该指令将输入IN的值解释为浮点数,并将其转换为一个整数或浮点数。如果输入值恰好是在一个偶数和一个奇数之间,则选择偶数。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-41ROUND:取整指令对照及参数表功能框SCL参数数据类型OUT:=ROUND(IN);IN浮点数OUT整数、浮点数7.7转换操作
图7-67ROUND指令的应用b)程序运行监控
a)SCL程序从图7-67b监控中我们发现,当Start_1为1时,依次执行四条ROUND取整指令,对输入的四个浮点型数值3.49、3.5、-3.49和-3.5分别取整为最接近的整数3、4、-3和-4,以函数值返回赋值给变量Result_1。7.7转换操作使用CEIL“浮点数向上取整”指令将值取整为最近接的整数。该指令将输入值解释为浮点数,并将其转换为紧邻的较大整数。函数值可以大于或等于输入值。若需更改数据类型,在CEIL后输入英文状态下的_符号则弹出数据类型选择框进行选择。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-42CEIL:浮点数向上取整指令对照及参数表功能框SCL参数数据类型OUT:=CEIL(IN);<表达式>浮点数<数据类型>整数、浮点数默认:DINT函数值整数、浮点数7.7转换操作
图7-68CEIL指令的应用b)程序运行监控
a)SCL程序从图7-68b监控中我们发现,当Start_1为1时,首先执行第一条指令CEIL,对输入变量Input_1的浮点型数值3.5向上取整为4以函数返回值赋值给变量Result_1。接着执行第二条指令CEIL,对输入变量Input_2的浮点型数值-3.5向上取整为-3以函数返回值赋值给变量Result_2。然后执行第三条指令CEIL_REAL对输入变量Input_3的浮点型数值-3.5向上取浮点数为-3.0以函数返回值赋值给变量Result_3。最后执行第四条指令CEIL_REAL对输入变量Input_4的浮点型数值-3.5向上取整再变浮点数为-3.0以函数返回值赋值给变量Result_4。7.7转换操作该指令将输入值解释为浮点数,并将其转换为紧邻的较小整数。函数值可等于或小于输入值。若需更改数据类型,在FLOOR后输入英文状态下的_符号则弹出数据类型选择框进行选择。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-43FLOOR:浮点数向下取整指令对照及参数表功能框SCL参数数据类型OUT:=FLOOR(IN);<表达式>浮点数<数据类型>整数、浮点数默认:DINT函数值整数、浮点数7.7转换操作
图7-69FLOOR指令的应用b)程序运行监控
a)SCL程序从图7-69b监控中我们发现,当Start_1为1时,首先执行第一条指令FLOOR,对输入变量Input_1的浮点型数值3.5向下取整为3以函数返回值赋值给变量Result_1。接着执行第二条指令FLOOR,对输入变量Input_2的浮点型数值-3.5向下取整为-4以函数返回值赋值给变量Result_2。然后执行第三条指令FLOOR_REAL对输入变量Input_3的浮点型数值3.5向下取整再变浮点数为3.0以函数返回值赋值给变量Result_3。最后执行第四条指令FLOOR_REAL对输入变量Input_4的浮点型数值-3.5向下取整再变浮点数为-4.0以函数返回值赋值给变量Result_4。7.7转换操作TRUNC“截尾取整”指令用于截取输入值的整数部分,并将整数部分(不含小数位)作为函数值返回。若需更改数据类型,在TRUNC后输入英文状态下的_符号则弹出数据类型选择框进行选择。在SCL中,该指令是一个表达式,指令结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-44TRUNC:截尾取整指令对照及参数表功能框SCL参数数据类型OUT:=TRUNC(IN);IN浮点数OUT整数、浮点数7.7转换操作
图7-70TRUNC指令的应用b)程序运行监控
a)SCL程序当Start_1为1时,首先执行第一条指令TRUNC,对输入变量Input_1的浮点型数值3.15取整为3以函数返回值赋值给变量Result_1。接着执行第二条指令TRUNC_REAL,对输入变量Input_2的浮点型数值3.15取整后再变为浮点数3.0以函数返回值赋值给变量Result_2。然后执行第三条指令TRUNC_REAL对输入变量Input_3的浮点型数值-3.15取整为3.0以函数返回值赋值给变量Result_3。最后执行第四条指令FLOOR_REAL对输入变量Input_4的浮点型数值-3.15取整再变浮点数为-3.0以函数返回值赋值给变量Result_4。7.7转换操作NORM_X为标准化/归一化指令,通过将输入VALUE中变量的值按照相对于最大值最小值之间的比例缩放到[0,1]之间,对其进行归一化后以OUT输出。参数MIN、MAX和OUT的数据类型必须相同。若需更改其他数据类型,则需在NORM_X后面输入英文状态下的_符号弹出数据类型选择框进行选择。输出OUT中的数据类型为浮点数,OUT输出的计算公式为:OUT=(VALUE–MIN)/(MAX–MIN);参数MIN、VALUE、MAX的存储区均为I、Q、M、D、L表7-45
NORM_X:缩放指令对照及参数表功能框SCL参数数据类型OUT:=NORM_X(min:=_in_,value:=_in_,max:=_in_);MINSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealVALUESInt,Int,DInt,USInt,UInt,UDInt,Real,LRealMAXSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealOUTReal,LReal7.7转换操作
图7-72NORM_X:标准化指令的用法从图7-72监控中我们发现,对输入变量数据块_1.VALUE的值12345在区间[0,27648]之间做归一化处理,归一化后值为(12345-0)/(27648-0)=0.4465061赋值给数据块_1.OUT图7-71NORM_X:标准化7.7转换操作使用SCALE_X:缩放“缩放”指令可以将0-1之间的浮点数按照指定的取值范围来进行缩小或放大。缩放后的取值范围为参数MIN至参数MAX之间的数值,缩放后结果为整数。若需更改其他数据类型,则需在SCALE_X后面输入英文状态下的_符号弹出数据类型选择框进行选择。Result将按以下公式进行计算:OUT=VALUE*(MAX–MIN)+MIN;表7-46SCALE_X:缩放指令对照及参数表功能框SCL参数数据类型OUT:=SCALE_X(MIN:=_int_in_,VALUE:=_real_in_,MAX:=_int_in_);MINSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealVALUEReal,LRealMAXSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealOUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal7.7转换操作
图7-74SCALE_X:缩放指令的用法从图7-74监控中我们发现,对输入变量数据块_1.VALUE的值0.4465061在区间[0,27648]之间做放大,放大后后值为0.4465061*(27648-0)=12345赋值给数据块_1.OUT。可以看出SCALE_X指令是NORM_X指令的逆运算。图7-73SCALE_X:缩放7.7.8实操案例21:深度测量传感器模拟量控制任务:使用S7-1200PLC实现一个深度测量传感器模拟量控制。控制要求:深度测量传感器可以0-10cm的深度,其电流信号为0~20mA,通过PLC获取信号模拟量并进行转换深度值。步骤:1.I/O分配表(见章节4.7.8)2.PLC外部接线图(见章节4.7.8)3.编写程序图7-75PLC变量图7-76深度测量传感器模拟量控制SCL程序7.8字逻辑运算DECO解码指令用于在输出值中将输入值所指定的位号的位置1,其余位全部赋值为0,输出值中被置1的位号就是输入IN的值,位号从左到右为从高到低排布,最右边是第0位,从最右边作为第0位往高位数,第几位那么位号就是几。输出值的数据类型可以为字节、字、双字。若需更改数据类型,在DECO后输入英文状态下的_符号则弹出数据类型选择框选择,如DECO_BYTE(_uint_in_)。表7-47DECO:解码指令对照及参数表功能框SCL参数数据类型OUT:=DECO(_in_);INUINT<数据类型>位字符串默认:DWORD函数值位字符串7.8字逻辑运算
图7-77DECO指令的应用b)程序运行监控
a)SCL程序从图7-77b监控中我们发现,当Start_1为1时,首先执行第一条指令DECO,在输出值中将第0位置1,其他位置0,因此可以看出输出值最低位为第0位,以函数返回值赋值给变量Result_1。接着执行第二条指令DECO,在输出值中将第15位置1,其他位置0,因此可以看出输出值中含有16个数但最高位为第15位,以函数返回值赋值给变量Result_2。然后执行第三条指令DECO,在输出值中将第1位置1,其他位置0,以函数返回值赋值给变量Result_3。最后执行执行第四条指令DECO,在输出值中将第3位置1(取35除以32的余数3),其他位置0,函数返回值赋值给变量Result_4。7.8字逻辑运算使用“编码”(ENCO)指令查找输入值中所有位号中值为1的最低位的位号,并将此编号作为结果返回。和DECO解码指令一样,也是最右边位为第0位,位编号从右往左依次增大。若需更改数据类型,在新建输入值变量时选择相应的数据类型即可,输入值支持的数据类型有双字/字/字节。表7-48ENCO:编码指令对照及参数表功能框SCL参数数据类型OUT:=ENCO(_in_);IN位字符串函数值INT7.8字逻辑运算
图7-78DECO指令的应用b)程序运行监控
a)SCL程序从图7-78b监控中我们发现,当Start_1为1时,首先执行第一条指令ENCO,查找出输入值中为1的最低位为第0位,以函数返回值赋值给变量Result_1。接着执行第二条指令ENCO,查找出输入值中为1的最低位为第15位,以函数返回值赋值给变量Result_2。然后执行第三条指令ENCO,查找出输入值中为1的最低位为第5位,以函数返回值赋值给变量Result_3。7.8字逻辑运算“选择”(SEL)指令根据开关(参数G)的情况,选择输入IN0或IN1中的一个,并将选择后的参数值赋值给输出参数OUT。参数G是一个布尔量,如果参数G的值为“0”,则复制输入IN0的值到OUT。如果参数G的值为“1”,则复制参数IN1的值到OUT。注意该指令只有当所有参数的变量均为同一数据类型时,才能执行该指令。在SCL中,该指令的输出结果作为函数值返回,因此需要定义变量接收该函数返回值。表7-49SEL:选择指令对照及参数表功能框SCL参数数据类型OUT:=SEL(g:=_bool_in,in0:-_variant_in,in1:=_variant_in);GBOOLIN0INTIN1二进制数、整数、浮点数、定时器、字符串、TOD、DATE、DT函数值二进制数、整数、浮点数、定时器、字符串、TOD、DATE、DT7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能物流系统构建试题及答案
- 引流袋操作规范
- 各国海关政策对国际物流的影响试题答案
- 2025年安庆师范大学单招职业技能考试题库学生专用
- 颈椎间盘突出症的护理查房
- 2025年阿勒泰职业技术学院单招职业倾向性测试题库完美版
- 2025年成都工贸职业技术学院单招职业适应性测试题库必考题
- 2025年德宏职业学院单招职业适应性测试题库汇编
- 毛皮制品质量控制考核试卷
- 2025年安徽警官职业学院单招职业适应性测试题库完美版
- 武汉光谷为明实验学校六年级小升初语文测试卷(8套试卷带答案解析)
- 儿童环内环内置式包皮
- 汽车客运站危险源辨识和风险评价记录表
- 刑事证据课件
- GB/T 24747-2023有机热载体安全技术条件
- 沪教小学英语句型转换专题
- 《素描》教案-第一章 概述
- 【成都市龙泉驿区平安村发展情况的调查(论文)】
- 申请撤销限高申请书范文
- 情绪与心理健康
- 建筑施工企业负责人带班检查记录表
评论
0/150
提交评论