第3章 S7-1200的指令3.1 位逻辑指令位逻辑指令 1.常开触点与常闭触点.常开触点与常闭触点 打开项目“位逻辑指令应用”,常开触点在指定的位为1状态时闭合,为0状态时断开常闭触点反之两个触点串联将进行“与”运算,两个触点并联将进行“或”运算 2.取反.取反RLO触点触点 RLO是逻辑运算结果的简称,中间有“NOT”的触点为取反RLO触点,如果没有能流流入取反RLO触点,则有能流流出如果有能流流入取反RLO触点,则没有能流流出 3.线圈.线圈 线圈将输入的逻辑运算结果(RLO)的信号状态写入指定的地址,线圈通电时写入1,断电时写入0可以用Q0.4:P的线圈将位数据值写入过程映像输出Q0.4,同时立即直接写给对应的物理输出点 如果有能流流过M4.1的取反线圈,则M4.1为0状态,其常开触点断开,反之M4.1为1状态,其常开触点闭合第1页,共59页 4.置位、复位输出指令.置位、复位输出指令 S(置位输出)、R(复位输出)指令将指定的位操作数置位和复位 如果同一操作数的S线圈和R线圈同时断电,指定操作数的信号状态不变。
置位输出指令与复位输出指令最主要的特点是有记忆和保持功能如果I0.4的常开触点闭合,Q0.5变为1状态并保持该状态即使I0.4的常开触点断开,Q0.5也仍然保持1状态在程序状态中,用Q0.5的S和R线圈连续的绿色圆弧和绿色的字母表示Q0.5为1状态,用间断的蓝色圆弧和蓝色的字母表示0状态第2页,共59页 5.置位位域指令与复位位域指令.置位位域指令与复位位域指令 “置位位域”指令SET_BF将指定的地址开始的连续的若干个位地址置位,“复位位域”指令RESET_BF将指定的地址开始的连续的若干个位地址复位 7.扫描操作数信号边沿的指令.扫描操作数信号边沿的指令 中间有P的触点的名称为“扫描操作数的信号上升沿”,在I0.6的上升沿,该触点接通一个扫描周期M4.3为边沿存储位,用来存储上一次扫描循环时I0.6的状态通过比较I0.6前后两次循环的状态,来检测信号的边沿边沿存储位的地址只能在程序中使用一次不能用代码块的临时局部数据或I/O变量来作边沿存储位 中间有N的触点的名称为“扫描操作数的信号下降沿”,在M4.4的下降沿,RESET_BF的线圈“通电”一个扫描周期。
该触点下面的M4.5为边沿存储位第3页,共59页 6.置位.置位/复位触发器与复位复位触发器与复位/置位触发器置位触发器 SR方框是置位/复位(复位优先)触发器,在置位(S)和复位(R1)信号同时为1时,方框上的输出位M7.2被复位为0可选的输出Q反映了M7.2的状态 RS方框是复位/置位(置位优先)触发器,在置位(S1)和复位(R)信号同时为1时,方框上的M7.6为置位为1可选的输出Q反映了M7.6的状态第4页,共59页 8.在信号边沿置位操作数的指令.在信号边沿置位操作数的指令 中间有P的线圈是“在信号上升沿置位操作数”指令,仅在流进该线圈的能流的上升沿,该指令的输出位M6.1为1状态其他情况下M6.1均为0状态,M6.2为保存P线圈输入端的RLO的边沿存储位 中间有N的线圈是“在信号下降沿置位操作数”指令,仅在流进该线圈的能流的下降沿,该指令的输出位M6.3为1状态其他情况下M6.3均为0状态,M6.4为边沿存储位 上述两条线圈格式的指令对能流是畅通无阻的,这两条指令可以放置在程序段的中间或最右边在运行时改变I0.7的状态,可以使M6.6置位和复位。
第5页,共59页 9.扫描.扫描RLO的信号边沿指令的信号边沿指令 在流进“扫描RLO的信号上升沿”指令(P_TRIG指令)的CLK输入端的能流(即RLO)的上升沿,Q端输出脉冲宽度为一个扫描周期的能流,方框下面的M8.0是脉冲存储位 在流进“扫描RLO的信号下降沿”指令(N_TRIG指令)的CLK输入端的能流的下降沿,Q端输出一个扫描周期的能流方框下面的M8.2是脉冲存储器位P_TRIG 指令与N_TRIG 指令不能放在电路的开始处和结束处第6页,共59页 10.检测信号边沿指令.检测信号边沿指令 R_TRIG是“检测信号上升沿”指令,F_TRIG是“检测信号下降沿”指令它们是函数块,在调用时应为它们指定背景数据块这两条指令将输入CLK的当前状态与背景数据块中的边沿存储位保存的上一个扫描周期的CLK的状态进行比较如果指令检测到CLK的上升沿或下降沿,将会通过Q端输出一个扫描周期的脉冲 在输入CLK输入端的电路时,选中左侧的垂直“电源”线,双击收藏夹中的“打开分支”按钮,生成一个串联电路用鼠标将串联电路右端的双箭头拖拽到CLK端松开鼠标左键,串联电路被连接到CLK端。
第7页,共59页 11.边沿检测指令的比较.边沿检测指令的比较 以上升沿检测为例,P触点用于检测触点上面的地址的上升沿,并且直接输出上升沿脉冲其他3种指令都是用来检测RLO(流入它们的能流)的上升沿 P线圈用于检测能流的上升沿,并用线圈上面的地址来输出上升沿脉冲其他3种指令都是直接输出检测结果 R_TRIG指令与P_TRIG指令都是用于检测流入它们的CLK端的能流的上升沿,并直接输出检测结果其区别在于R_TRIG指令用背景数据块保存上一次扫描循环CLK端信号的状态,而P_TRIG指令用边沿存储位来保存它第8页,共59页 12.故障显示电路.故障显示电路 【例3-1】 设计故障信息显示电路,从故障信号I0.0的上升沿开始,Q0.7控制的指示灯以1Hz的频率闪烁操作人员按复位按钮I0.1后,如果故障已经消失,则指示灯熄灭如果没有消失,则指示灯转为常亮,直至故障消失 设置MB0为时钟存储器字节,M0.5提供周期为1s的时钟脉冲出现故障时,将I0.0提供的故障信号用M2.1锁存起来,M2.1和M0.5的常开触点组成的串联电路使Q0.7控制的指示灯以1Hz的频率闪烁。
按下复位按钮I0.1,故障锁存标志M2.1被复位为0状态如果故障已经消失,指示灯熄灭如果没有消失,M2.1的常闭触点与I0.0的常开触点组成的串联电路使指示灯转为常亮,直至I0.0变为0状态,故障消失,指示灯熄灭第9页,共59页3.2 定时器与计数器指令定时器与计数器指令3.2.1 定时器指令定时器指令 1.脉冲定时器.脉冲定时器 将指令列表中的“生成脉冲”指令TP拖放到梯形图中,在出现的“调用选项”对话框中,将默认的背景数据块的名称改为T1,可以用它来做定时器的标示符单击“确定”按钮,自动生成背景数据块 定时器的输入IN为启动输入端,PT为预设时间值,ET为定时开始后经过的当前时间值,它们的数据类型为32位的Time,单位为ms,最大定时时间为24天多Q为定时器的位输出,各参数均可以使用I(仅用于输入参数)、Q、M、D、L存储区,PT可以使用常量定时器指令可以放在程序段的中间或结束处第10页,共59页 脉冲定时器用于将输出Q置位为PT预设的一段时间在IN输入信号的上升沿启动该指令,Q输出变为1状态,开始输出脉冲,ET从0ms开始不断增大,达到PT预设的时间时,Q输出变为0状态。
如果IN输入信号为1状态,则当前时间值保持不变(见波形A)如果IN输入信号为0状态,则当前时间变为0s(见波形B)IN输入的脉冲宽度可以小于预设值,在脉冲输出期间,即使IN输入出现下降沿和上升沿,也不会影响脉冲的输出 I0.1为1时,定时器复位线圈RT通电,定时器T1被复位如果正在定时,且IN输入信号为0状态,将使当前时间值ET清零,Q输出也变为0状态(见波形C)如果此时正在定时,且IN输入信号为1状态,将使当前时间清零,但是Q输出保持为1状态(见波形D)复位信号I0.1变为0状态时,如果IN输入信号为1状态,将重新开始定时(见波形E)第11页,共59页 2.接通延时定时器.接通延时定时器 接通延时定时器TON用于将Q输出的置位操作延时PT指定的一段时间在IN输入的上升沿开始定时ET大于等于PT指定的设定值时,输出Q变为1状态,ET保持不变(见波形A) IN输入电路断开时,或定时器复位线圈RT通电,定时器被复位,当前时间被清零,输出Q变为0状态如果IN输入信号在未达到PT设定的时间时变为0状态(见波形B),输出Q保持0状态不变 复位输入I0.3变为0状态时,如果IN输入信号为1状态,将开始重新定时(见波形D)。
第12页,共59页 3.关断延时定时器指令.关断延时定时器指令 关断延时定时器(TOF)用于将Q输出的复位操作延时PT指定的一段时间IN输入电路接通时,输出Q为1状态,当前时间被清零在IN的下降沿开始定时,ET从0逐渐增大ET等于预设值时,输出Q变为0状态,当前时间保持不变,直到IN输入电路接通(见波形A)关断延时定时器可以用于设备停机后的延时 如果ET未达到PT预设的值,IN输入信号就变为1状态,ET被清0,输出Q保持1状态不变(见波形B)复位线圈RT通电时,如果IN输入信号为0状态,则定时器被复位,当前时间被清零,输出Q变为0状态(见波形C)如果复位时IN输入信号为1状态,则复位信号不起作用(见波形D)第13页,共59页 4.时间累加器.时间累加器 时间累加器TONR的IN输入电路接通时开始定时(见波形A和B)输入电路断开时,累计的当前时间值保持不变可以用TONR来累计输入电路接通的若干个时间段图3-21中的累计时间t1+t2等于预设值PT时,Q输出变为1状态(见波形D) 复位输入R为1状态时(见波形C),TONR被复位,它的ET变为0,输出Q变为0状态。
“加载持续时间”线圈PT通电时,将PT线圈指定的时间预设值写入TONR定时器的背景数据块的静态变量PT(”T4”.PT),将它作为TONR的输入参数PT的实参用I0.7复位TONR时,”T4”.PT也被清0第14页,共59页 【例3-2】 用接通延时定时器设计周期和占空比可调的振荡电路 图3-22中的串联电路接通后,定时器T5的IN输入信号为1状态,开始定时2s后定时时间到,它的Q输出使定时器T6开始定时,同时Q0.7的线圈通电3s后T6的定时时间到,它的输出“T6”.Q的常闭触点断开,使T5的IN输入电路断开,其Q输出变为0状态,使Q0.7和定时器T6的Q输出也变为0状态下一个扫描周期因为“T6”.Q的常闭触点接通,T5又从预设值开始定时Q0.7的线圈将这样周期性地通电和断电,直到串联电路断开Q0.7线圈通电和断电的时间分别等于T6和T5的预设值第15页,共59页 【例3-3】 用3种定时器设计卫生间冲水控制电路I0.7是光电开关检测到的有使用者的信号,用Q1.0控制冲水电磁阀 从I0.7(有人使用)的上升沿开始,TON延时3s后其输出Q变为1状态,使TP的Q输出“T8”.Q输出一个宽度为4s的脉冲。
从I0.7的上升沿开始,TOF的Q输出“T9”.Q变为1状态在I0.7的下降沿,TOF开始定时,5s后“T9”.Q变为0状态T9”.Q的波形减去I0.7的波形得到宽度为5s的脉冲波形,用“T9”.Q的常开触点与I0.7的常闭触点串联的电路来实现上述要求两块脉冲波形的叠加用并联电路来实现T7”.Q的常开触点用于防止3s内有人进入和离开时冲水第16页,共59页 5.用数据类型为.用数据类型为IEC_TIMER的变量的变量提供背景数据提供背景数据 图3-23和图3-24中的程序的控制要求完全相同图3-24中的定时器用数据块“定时器DB”中数据类型为IEC_TIMER的变量提供背景数据 单击TON方框上面的问号 ,再单击出现的小方框右边的 按钮,单击出现的地址列表中的“定时器DB”,地址域出现“‘定时器DB’.”单击地址列表中的“T1”,地址域出现“‘定时器DB’.T1.”单击地址列表中的“无”,指令列表消失,地址域出现“定时器DB”.T1用同样的方法为TP和TOF提供背景数据用类似的方法生成地址“定时器DB”.T3.Q第17页,共59页 6.定时器线圈指令.定时器线圈指令 两条运输带顺序相连,按下起动按钮I0.3,1号运输带开始运行,8s后2号运输带自动起动。
按了停止按钮I0.2,先停2号运输带,8s后停1号运输带 在运输带控制程序中设置了一个用起动、停止按钮控制的M2.3,用它来控制TON的IN输入端和TOF线圈第18页,共59页 中间标有TOF的线圈上面是定时器的背景数据块,下面是时间预设值PTTOF线圈和TOF方框定时器指令的功能相同 TON的Q输出端控制的Q0.6在I0.3的上升沿之后8s变为1状态,在M2.3的下降沿时变为0状态所以可以用TON的Q输出端直接控制2号运输带Q0.6T11是DB11的符号地址按下起动按钮I0.3,TOF线圈通电它的Q输出“T11”.Q在它的线圈通电时变为1状态,在它的线圈断电后延时8s变为0状态,因此可以用“T11”.Q的常开触点控制1号运输带Q1.1第19页,共59页3.2.2 计数器指令计数器指令 1.计数器的数据类型.计数器的数据类型 S7-1200的计数器属于函数块,调用时需要生成背景数据块单击指令助记符下面的问号,用下拉式列表选择某种整数数据类型 CU和CD分别是加计数输入和减计数输入,在CU或CD信号的上升沿,当前计数器值CV被加1或减1PV为预设计数值,CV为当前计数器值,R为复位输入,Q为布尔输出。
2.加计数器.加计数器 当接在R输入端的I1.1为0状态,在CU信号的上升沿,CV加1,直到达到指定的数据类型的上限值用,CV的值不再增加 CV大于等于PV时,输出Q为1状态,反之为0状态第一次执行指令时,CV被清零各类计数器的复位输入R为1状态时,计数器被复位,输出Q变为0状态,CV被清零第20页,共59页 3.减计数器.减计数器 减计数器的装载输入LD为1状态时,输出Q被复位为0,并把PV的值装入CV在减计数输入CD的上升沿,CV减1,直到CV达到指定的数据类型的下限值此后CV的值不再减小 CV小于等于0时,输出Q为1状态,反之Q为0状态第一次执行指令时,CV被清零第21页,共59页 4.加减计数器.加减计数器 在CU的上升沿,CV加1, CV达到指定的数据类型的上限值时不再增加 在CD的上升沿,CV减1 ,CV达到指定的数据类型的下限值时不再减小 CV大于等于PV时,QU为1,反之为0CV小于等于0时,QD为1,反之为0 装载输入LD为1状态时,PV被装入CV,QU变为1状态,QD被复位为0状态 R为1状态时,计数器被复位,CV被清零,输出QU变为0状态,QD变为1状态,CU 、CD和LD不再起作用。
第22页,共59页3.3 数据处理指令数据处理指令3.3.1 比较器操作指令比较器操作指令 比较指令用来比较数据类型相同的两个操作数的大小满足比较关系式给出的条件时,等效触点接通操作数可以是I、Q、M、L、D存储区中的变量或常数比较指令需要设置数据类型,可以设置比较条件 “值在范围内”指令IN_RANGE与“值超出范围”指令OUT_RANGE可以视为一个等效的触点, MIN、MAX和VAL的数据类型必须相同有能流流入且满足条件时等效触点闭合,有能流流出 OK和NOT OK触点指令检查是否是有效或无效的浮点数第23页,共59页 【例3-4】 用接通延时定时器和比较指令组成占空比可调的脉冲发生器 “T1”.Q是TON的位输出,PLC进入RUN模式时,TON的IN输入端为1状态,TON的当前值从0开始不断增大当前值等于预设值时,“T1”.Q变为1状态,其常闭触点断开,定时器被复位,“T1”.Q变为0状态下一扫描周期其常闭触点接通,定时器又开始定时TON的当前时间“T1”.ET按锯齿波形变化比较指令用来产生脉冲宽度可调的方波,Q1.0为0状态的时间取决于比较触点下面的操作数的值。
第24页,共59页3.3.2 使能输入与使能输出使能输入与使能输出 1..BCD码码 BCD是二进制编码的十进制数的缩写,用4位二进制数表示一位十进制数,每位BCD码允许的数值范围为2#0000~2#1001,对应于十进制数0~9BCD码的最高位二进制数用来表示符号,负数为1,正数为0一般令负数和正数的最高4位二进制数分别为1111或000016位BCD码的范围为-999~+999,32位BCD码的范围为-9999999~+9999999BCD码各位之间的关系是逢十进一,图3-38中的BCD码为-829BCD码用于PLC的输入和输出 2..EN与与ENO 有能流流到方框指令的EN(使能输入)端,方框指令才能执行如果EN输入有能流流入,而且执行时无错误,则使能输出ENO端将能流传递给下一个元件如果执行过程中有错误,能流在出现错误的方框指令终止右键单击指令框,可以生成ENO或不生成ENO(ENO变为灰色)不生成ENO时,ENO端始终有能流流出第25页,共59页 CONVERT是数据转换指令,需要在CONV下面“to”两边设置转换前后的数据的数据类型 启动程序状态功能, 设置转换前的BCD码为16#F234,转换后得到-234,程序执行成功,有能流从ENO输出端流出。
转换前的数值如果为16#23F,16#F不是BCD码的数字,指令执行出错,没有能流从ENO流出可以在指令的帮助中找到使ENO为0状态的原因 ENO可以作为下一个方框的EN输入,只有前一个方框被正确执行,与它连接的后面的程序才能被执行EN和ENO的操作数均为能流,数据类型为Bool3.3.3 转换操作指令 1.转换值指令 转换值指令CONVERT的参数IN、OUT可以设置十多种数据类型有4条浮点数转换为双整数指令,用得最多的是四舍五入的取整指令ROUND第26页,共59页 3.标准化指令.标准化指令 标准化指令NORM_X的整数输入值VALUE(MIN≤VALUE≤MAX)被线性转换(标准化)为0.0~1.0之间的浮点数,需设置变量的数据类型OUT =(VALUE - MIN)/(MAX - MIN) 4.缩放指令缩放指令 缩放指令SCALE_X的浮点数输入值VALUE(0.0≤VALUE≤1.0)被线性转换(映射)为MIN和MAX定义的数值范围之间的整数OUT = VALUE(MAX - MIN)+ MIN第27页,共59页 【例3-5】 某温度变送器的量程为-200~850℃,输出信号为4~20mA,符号地址为“模拟值”的IW96将0~20mA的电流信号转换为数字0~27648,求以℃为单位的浮点数温度值。
4mA对应的模拟值为5530,IW96将-200~850℃的温度转换为模拟值5530~27648,用“标准化”指令NORM_X将5530~27648的模拟值归一化为0.0~1.0之间的浮点数“归一化” ,然后用“缩放”指令SCALE_X将归一化后的数字转换为-200~850℃的浮点数温度值,用变量“温度值”保存第28页,共59页 【例3-6】地址为QW96的整型变量“AQ输入”转换后的DC 0~10V电压作为变频器的模拟量输入值,0~10V的电压对应的转速为0~1800rpm求以rpm为单位的整型变量“转速”对应的AQ模块的输入值“AQ输入” “标准化”指令NORM_X将0~1800的转速值归一化为0.0~1.0之间的浮点数“归一化”,然后用“缩放”指令SCALE_X将归一化后的数字转换为0~27648的整数值,用变量“AQ输入”保存第29页,共59页3.3.4 移动操作指令移动操作指令 1.移动值指令.移动值指令 “移动值”指令MOVE用于将IN输入的源数据传送给OUT1输出的目的地址,并且转换为OUT1允许的数据类型(与是否进行IEC检查有关),源数据保持不变。
MOVE指令的IN和OUT1可以是Bool之外所有的基本数据类型、数据类型DTL、Struct、Array,IN还可以是常数可增减输出参数的个数 如果IN数据类型的位长度超出OUT1数据类型的位长度,源值的高位丢失如果IN数据类型的位长度小于输出OUT1数据类型的位长度,目标值的高位被改写为0 2.交换指令.交换指令 交换指令SWAP用于交换字或双字中的字节第30页,共59页 3.填充存储区指令.填充存储区指令 生成“数据块_1”(DB3)和“数据块_2”(DB4),在DB3中创建有40个Int元素的数组Source,在DB4中创建有40个Int元素的数组Distin “Tag_13”(I0.4)的常开触点接通时,“填充存储区”指令FILL_BLK将常数3527填充到数据块_1中的数组Source的前20个整数元素中 “不可中断的存储区填充”指令UFILL_BLK与FILL_BLK指令的功能相同,其填充操作不会被操作系统的其他任务打断第31页,共59页 4.存储区移动指令.存储区移动指令 I0.3(Tag_12)的常开触点接通时,“存储区移动”指令MOVE_BLK将源区域数据块_1的数组Source的0号元素开始的20个Int元素的值,复制给目标区域数据块_2的数组Distin的0号元素开始的20个元素。
复制操作按地址增大的方向进行 IN和OUT是待复制的源区域和目标区域中的首个元素 “不可中断的存储区移动”指令UMOVE_BLK与MOVE_BLK的功能基本上相同,其复制操作不会被操作系统的其他任务打断第32页,共59页 5.块填充与块传送指令的实验.块填充与块传送指令的实验 将项目“数据处理指令应用”下载到CPU,双击打开项目树中的DB4,显示各数组元素,启动监视因为没有设置保持性功能,此时DB3和DB4的各数组元素的初始值均为0 接通I0.4(“Tag_13”)的常开触点,FILL_BLK与UFILL_BLK指令被执行,DB3中的数组元素Source[0]~Source[19]被填充数据3527,Source[20]~Source[39]被填充数据32153 接通I0.3(Tag_12)的常开触点,MOVE_BLK与UMOVE_BLK指令被执行,DB3中的数组Source的40个元素被传送给DB4中的数组Distin的40个元素第33页,共59页3.3.5 移位与循环移位指令移位与循环移位指令 1.移位指令.移位指令 右移指令SHR和左移指令SHL将输入参数IN指定的存储单元的整个内容逐位右移或左移N位。
需要设置指令的数据类型有符号数右移后空出来的位用符号位填充无符号数移位和有符号数左移后空出来的位用0填充右移n位相当于除以2n ,左移n位相当于乘以2n 如果移位后的数据要送回原地址,应在信号边沿操作 2.循环移位指令.循环移位指令 “循环右移”指令ROR和“循环左移”指令ROL将输入参数IN指定的存储单元的整个内容逐位循环右移或循环左移N位,移出来的位又送回存储单元另一端空出来的位移位的结果保存在输出参数OUT指定的地址移位位数N可以大于被移位存储单元的位数第34页,共59页 3.使用循环移位指令的彩灯控制器.使用循环移位指令的彩灯控制器 M1.0是首次扫描脉冲,用它给彩灯置初值7时钟存储器位M0.5的频率为1Hz是否移位用I0.6来控制,移位的方向用I0.7来控制因为QB0循环移位后的值又送回QB0,必须使用P_TRIG指令第35页,共59页3.4 数学运算指令数学运算指令3.4.1 数学函数指令数学函数指令 1.四则运算指令.四则运算指令 ADD、SUB、MUL和DIV指令可选多种整数和实数数据类型,整数除法截尾取整IN1和IN2可以是常数,IN1、IN2和OUT的数据类型应相同。
ADD和MUL指令可增加输入个数 【例3-7】压力变送器的量程为0~10MPa,输出信号为0~10V,被IW64转换为0~27648的数字N试求以kPa为单位的压力值 P =(10000 N)/ 27648 (kPa) Temp1的数据类型为DInt,在运算时一定要先乘后除,应使用双整数乘法和除法为此首先用CONV指令将IW64转换为双整数第36页,共59页【例3-8】 使用浮点数运算计算上例以kPa为单位的压力值P =(10000 N)/ 27648 = 0.361690×N (kPa) 首先用CONV指令将IW64转换为实数,再用实数乘法指令完成运算最后用ROUND指令,将运算结果四舍五入为整数 第37页,共59页 2..CALCULATE指令指令 可以用“计算”指令CALCULATE定义和执行数学表达式,根据所选的数据类型计算复杂的数学运算或逻辑运算双击指令框中间的数学表达式方框,打开下图的对话框输入待计算的表达式,表达式只能使用方框内的输入参数INn和运算符可增加输入参数的个数 运行时使用方框外输入的值执行指定的表达式的运算,运算结果传送到MD36中。
第38页,共59页 3.浮点数函数运算指令 浮点数数学运算指令的操作数IN和OUT的数据类型均为Real SQRT和LN指令的输入值如果小于0,输出OUT为无效的浮点数 三角函数指令和反三角函数指令中的角度均为以弧度为单位的浮点数以度为单位的角度值乘以/180.0,转换为弧度值 【例 3-9】 测量远处物体的高度,已知被测物体到测量点的距离L和以度为单位的夹角θ,求被测物体的高度H,H = Ltan θ,MD40中角度的单位为度,乘以/180 = 0.0174533,得到角度的弧度值,运算的中间结果用实数临时局部变量Temp2保存MD44中是L的实数值,运算结果在MD48中第39页,共59页 4.其他数学函数指令 (1)“返回除法的余数”指令MOD用于求各种整数除法的余数输出OUT中的运算结果为除法运算IN1/ IN2的余数 (2)“求二进制补码”(取反)指令NEG将输入IN的值的符号取反后,保存在输出OUT中IN和OUT的数据类型可以是SInt、Int、DInt和Real (3)递增指令INC与递减指令DEC将参数IN/OUT的值分别加1和减1。
数据类型为各种整数图中的INC指令用来计I0.4动作的次数,应在INC指令之前添加P_TRIG指令第40页,共59页 (4)“计算绝对值”指令ABS用来求输入IN中的有符号整数或实数的绝对值,将结果保存在输出OUT中IN和OUT的数据类型应相同 (5)“获取最小值”指令MIN和“获取最大值”指令MAX比较输入IN1和IN2的值,将其中较小或较大的值送给输出OUT可增加输入个数 (6)“设置限值”指令LIMIT将输入IN的值限制在输入MIN与MAX的值范围之间 (7)“提取小数”指令FRAC将输入IN的小数部分传送到输出OUT取幂”指令EXPT计算以输入IN1的值为底,以输入IN2为指数的幂(OUT = IN1IN2)第41页,共59页3.4.2 字逻辑运算指令字逻辑运算指令 1.字逻辑运算指令.字逻辑运算指令 字逻辑运算指令对两个输入IN1和IN2逐位进行逻辑运算,运算结果在输出OUT指定的地址中可以增加输入的个数 “‘与’运算”(AND)指令的两个操作数的同一位如果均为1,运算结果的对应位为1,否则为0(见表3-5)‘或’运算”(OR)指令的两个操作数的同一位如果均为0,运算结果的对应位为0,否则为1。
‘异或’运算”运算(XOR)指令的两个操作数的同一位如果不相同,运算结果的对应位为1,否则为0指令的操作数的数据类型为位字符串Byte、Word或DWord “求反码”指令INVERT将输入IN中的二进制整数逐位取反(由0变1,由1变0),运算结果存放在输出OUT指定的地址 第42页,共59页 2.解码与编码指令 如果输入参数IN的值为n,“解码”指令DECO将输出参数OUT的第n位置位为1,其余各位置0如果输入IN的值大于31,将IN的值除以32以后,用余数来进行解码操作IN为5时OUT为2#0010 0000(16#20),仅第5位为1 “编码”指令ENCO将IN中为1的最低位的位数送给OUT指定的地址如果IN为2#00101000(即16#28),OUT中的编码结果为3如果IN为1或0,OUT的值为0如果IN为0,ENO为0状态第43页,共59页 3.SEL与MUX、DEMUX指令 “选择”指令SEL(Select)的Bool输入参数G为0时选中IN0,G为1时选中IN1,选中的数值被保存到输出参数OUT指定的地址 “多路复用”指令MUX(Multiplex)根据输入参数K的值,选中某个输入数据,并将它传送到输出参数OUT指定的地址。
K = m时,将选中输入参数INm如果K的值大于可用的输入个数,ELSE的值将复制到输出OUT中,ENO为0状态可以增加输入参数INn的个数INn、ELSE和OUT的数据类型应相同 “多路分用”指令DEMUX根据输入参数K的值,将输入IN的内容复制到选定的输出,其他输出则保持不变K = m时,将复制到输出OUTm可以增加输出参数OUTn的个数IN、ELSE和OUTn的数据类型应相同如果参数K的值大于可用的输出个数,参数ELSE输出IN的值,ENO为0状态 第44页,共59页3.5 程序控制操作指令程序控制操作指令 1.跳转指令与标签指令.跳转指令与标签指令 跳转指令中止程序的顺序执行,跳转到指令中的跳转标签所在的目的地址可以向前或向后跳转,只能在同一个代码块内跳转在一个块内,跳转标签的名称只能使用一次一个程度段中只能设置一个跳转标签 “RLO为1时跳转”指令JMP的线圈通电时跳转到指定的跳转标签 “RLO为0时跳转”指令JMPN的线圈断电时跳转到指定的跳转标签 如果跳转条件不满足,将继续执行跳转指令之后的程序标签在程序段的开始处,标签的第一个字符必须是字母。
第45页,共59页 2.跳转分支指令与定义跳转列表指令.跳转分支指令与定义跳转列表指令 “跳转分支指令”SWITCH根据一个或多个比较指令的结果,定义要执行的多个程序跳转用参数K指定要比较的值,将该值与各个输入提供的值进行比较满足条件则跳转到对应的标签不满足上述条件将跳转到ELSE指定的标签可增加输出的个数 “定义跳转列表”指令JMP_LIST定义多个有条件跳转,并继续执行由参数K的值指定的程序段中的程序可增加输出的个数如果K值大于可用的输出编号,则继续执行块中下一个程序段的程序 “重新启动周期监视时间”指令RE_TRIGR用于复位监控定时器 “退出程序”指令STP使PLC进入STOP模式返回”指令RET用来有条件地结束块RET线圈上面的参数返回值是FC或FB的ENO的值第46页,共59页3.6 日期和时间指令日期和时间指令 在CPU断电时,用超级电容提供的实时时钟的保持时间通常为20天 数据类型Time的长度为4B,时间单位为ms数据结构DTL(日期时间)共12B,分别是年(2B)、月、日、星期、时、分、秒、ns(4B)星期代码1~7分别是星期日~星期六。
“转换时间并提取”指令T_CONV用于在整数和时间数据类型之间转换 T_ADD、T_SUB指令将两个时间段相加、减 “时间值相减”指令T_DIFF将 IN1 中的时间值减去 IN2 中的时间值 “组合时间”指令T_COMBINE用于合并日期值和时间值 指令WR_SYS_T和RD_SYS_T用于设置和读取CPU时钟的系统时间(格林尼治标准时间) 指令WR_LOC_T和RD_LOC_T用于设置和读取CPU时钟的本地时间 组态CPU的属性时,应设置实时时间的时区为北京,不启用夏令时 指令SET_TIMEZONE用于设置时区 指令RTM(运行时间定时器)用于对CPU的32位运行小时计数器的设置、启动、停止和读取操作第47页,共59页 生成全局数据块“数据块_1”,在其中生成数据类型为DTL的变量DT1 ~DT3 用监控表将新的时间值写入“数据块_1”.DT3写时间”(M3.2)为1状态时,“写入本地时间”指令WR_LOC_T将输入参数LOCTIME输入的日期时间作为本地时间写入实时钟参数DST与夏令时有关,我国不使用夏令时 “读时间”(M3.1)为1状态时, “读取时间”指令RD_SYS_T和“读取本地时间”指令RD_LOC_T的输出OUT分别是数据类型为DTL的PLC中的系统时间和本地时间。
本地时间多8个小时 第48页,共59页3.7 字符串与字符指令字符串与字符指令3.7.1 字符串转换指令字符串转换指令 String数据类型的首字节是字符串的最大长度,第2个字节是当前实际使用的字符数,后面是最多254B的ASCII字符代码此外还有宽字符串Wstring 在DB1中生成3个字符串,数据类型为String[18],最大长度18个字符 “转换字符串”指令S_CONV用于字符串和数值的相互转换STRG_VAL是“将字符串转换为数值”指令,VAL_STRG是“将数值转换为字符串”指令 指令Strg_TO_Chars将字符串转换为字符元素组成的数组,指令Chars_TO_ Strg将字符元素组成的数组转换为字符串指令ATH将ASCII字符串转换为十六进制数,指令HTA将十六进制数转换为ASCII字符串3.7.2 字符串指令字符串指令 LEN是“确定字符串的长度”指令,MAX_LEN是“确定字符串的最大长度指令”, CONCAT是“合并字符串”指令第49页,共59页 LEFT、RIGHT和MID指令分别用来读取字符串左边、右边和中间的字符。
DELETE、INSERT、REPLACE和FIND指令分别用来删除、插入、替换和查找字符指令中的L用来定义字符个数,P是字符串中字符的位置第50页,共59页3.8 高速脉冲输出与高速计数器高速脉冲输出与高速计数器3.8.1 高速脉冲输出高速脉冲输出 1.高速脉冲输出.高速脉冲输出 每个CPU有4个PTO/PWM发生器,通过DC输出的CPU集成的Q0.0~Q0.3或信号板上的Q4.0~Q4.3输出PTO或PWM脉冲 脉冲宽度与脉冲周期之比称为占空比,脉冲列输出(PTO)功能提供占空比为50%的方波脉冲列输出脉冲宽度调制(PWM)功能提供脉冲宽度可以用程序控制的脉冲列输出 2..PWM的组态的组态 项目“高速计数器与高速输出”用2DI/2DQ信号板输出高速脉冲打开设备视图,选中CPU选中巡视窗口的“属性 > 常规”选项卡,再选中左边的“PTO1/ PWM1”文件夹中的“常规”,用右边窗口的复选框启用该脉冲发生器选中左边窗口的“参数分配”,设置信号类型为PWM,“时基”为ms,“脉宽格式”为百分之一,用“循环时间”输入域设置脉冲周期为2ms,“初始脉冲宽度” 为50%。
选中左边窗口的“I/O地址”(见图3-77),右边窗口PWM1默认的的起始地址为1000第51页,共59页 3..PWM的编程的编程 将指令列表的“扩展指令”选项板的文件夹“脉冲”中的“脉宽调制”指令CTRL_PWM拖放到OB1,单击出现的“调用选项”对话框中的“确定”按钮,生成该指令的背景数据块DB1 单击参数PWM左边的问号,再单击出现的 按钮,用下拉式列表选中PWM1的硬件标识符“Local~Pulse_1”,其值为9EN为1状态时,用输入参数ENABLE(I0.4)来启动或停止脉冲发生器参数STATUS是状态代码3.8.2 高速计数器高速计数器 高速计数器与增量式编码器一起工作单通道增量式编码器内部只有1对光耦合器,只能产生一个脉冲列双通道增量式编码器又称为A/B相或正交相位编码器,输出相位差为90°的两组独立脉冲列正转和反转时两路脉冲的超前、滞后关系相反,可以识别出转轴旋转的方向第52页,共59页 3.高速计数器的功能.高速计数器的功能 HSC有4种高速计数工作模式:有内部、外部方向控制的单相计数器,具有两路时钟脉冲输入的双相计数器和A/B相正交计数器。
每种HSC模式都可以使用或不使用复位输入复位输入为1状态时,HSC的实际计数值被清除 某些HSC模式可以选用 3 种频率测量的周期来测量频率值 使用“扩展高速计数器”指令CTRL_HSC_EXT,可以按指定的时间周期,测量出被测信号的周期 4.高速计数器的组态步骤.高速计数器的组态步骤 1)选中设备视图中的CPU,选中巡视窗口的“属性”选项卡左边的高速计数器HSC1的“常规”,用复选框选中“启用该高速计数器” 2)选中左边窗口的“功能”(见图3-82),设置“计数类型”为计数,“工作模式”为单相,“计数方向取决于”为“用户程序(内部方向控制)”,“初始计数方向”为“增计数” 3)选中图3-83左边窗口的“复位为初始值”,设置“初始计数器值”为0,“初始参考值”为2000 4)选中左边窗口的“事件组态”,用右边窗口的复选框激活“计数器值等于参考值这一事件生成中断”生成硬件中断组织块OB40后,将它指定给计数值等于参考值的中断事件 5)选中左边窗口的“硬件输入”,在右边窗口可以看到该HSC使用的时钟发生器输入点为I0.0,最高频率为100kHz。
第53页,共59页 6)选中左边窗口的“I/O地址”,可以看到HSC1的起始地址为1000 5.设置数字量输入的输入滤波器的滤波时间.设置数字量输入的输入滤波器的滤波时间 高速计数器的数字量输入点I0.0的滤波时间应小于计数输入脉冲宽度(1ms),故设置I0.0的输入滤波时间为0.8ms3.8.3 高速脉冲输出与高速计数器实验高速脉冲输出与高速计数器实验 1.实验的基本要求.实验的基本要求 用高速脉冲输出功能产生周期为2ms,占空比为50%的PWM脉冲列,送给高速计数器HSC1计数期望的高速计数器的当前计数值和Q0.4~Q0.6的波形见图3-85 2.硬件接线.硬件接线 用信号板的输出点Q4.0发出PWM脉冲,送给HSC1的高速脉冲输入点I0.0计数用CPU内置的电源作输入回路的电源,它同时又作为2DI/2DQ信号板的电源第54页,共59页 3..PWM的组态与编程的组态与编程 用信号板上的输出点产生PWM脉冲,脉冲周期为2ms,初始脉冲宽度为1ms在OB1中调用CTRL_PWM指令,用I0.4启动脉冲发生器 4.高速计数器的组态.高速计数器的组态 设置HSC1的工作方式为单相脉冲计数,使用CPU集成的输入点I0.0,通过用户程序改变计数的方向。
HSC的初始状态为加计数,初始计数值为0,初始参考值为2000出现计数值等于参考值的事件时,调用硬件中断组织块OB40HSC默认的地址为ID1000 5.程序设计.程序设计 设置MB11为标志字节,初始值为0HSC1的计数值等于参考值时,调用OB40根据MB11的值,用比较指令来判断是图3-85中的哪一次中断,以调用不同的“控制高速计数器”指令CTRL_HSC,来设置下一阶段的计数方向、计数值的初始值和参考值,同时对输出点进行置位和复位处理处理完后,将MB11的值加1,运算结果如果为3,将MB11清零(见图3-87) 首次扫描时M1.0为1状态,在OB1中,用M1.0的常开触点将标志字节MB11清零,将输出点Q0.4置位为1第55页,共59页 指令CTRL_HSC的参数DIR、CV和RV为TRUE时,计数方向NEW_DIR、计数值NEW_CV和参考值NEW_RV分别被装载到HSC 下载程序后进入RUN模式,用外接的小开关使I0.4为TRUE,信号板的Q4.0开始输出PWM脉冲,送给I0.0计数开始运行时使用组态的初始值,计数值小于参考值2000时,输出Q0.4为TRUE。
计数值等于参考值时产生中断,调用硬件中断组织块OB40此时标志字节MB11的值为0,OB40的程序段1中的比较触点接通,调用第一条CTRL_HSC指令,CV为0,HSC1的实际计数值保持不变RV为1,将新的参考值3000送给HSC1复位Q0.4,置位下一阶段的输出Q0.5在程序段4将MB11的值加1第56页,共59页 当计数值等于参考值3000时产生中断,第2次调用硬件中断组织块OB40此时标志字节MB11的值为1,OB40的程序段2中的比较触点接通,调用第2条CTRL_HSC指令,CV为FALSE,HSC1的实际计数值保持不变RV为1,装载新的参考值1500DIR为1,NEW_DIR为-1,将计数方向改为减计数复位Q0.5,置位下一阶段的输出Q0.6在程序段4将MB11的值加1 第57页,共59页 当计数值等于参考值1500时产生中断,第3次调用硬件中断组织块OB40此时标志字节MB11的值为2,OB40的程序段3中的比较触点接通,调用第3条CTRL_HSC指令RV为1,装载新的参考值2000CV为1,用参数NEW_CV将实际计数值复位为0DIR为1,NEW_DIR为1,计数方向改为加计数。
复位Q0.6,置位下一阶段的输出Q0.4在程序段4将MB11加1后,其值为3,比较触点接通,MOVE指令将MB11复位为0以后将重复上述的3个阶段的运行,直到I0.4变为0状态,脉冲发生器停止发出脉冲为止Q0.4~Q0.6依次为1状态的时间分别为4s、2s和3s,分别与3个阶段的计数值2000、1000和1500对应 用监控表监视ID1000,可以看到HSC1的计数值的变化情况第58页,共59页3.8.4 用高速计数器测量频率的实验用高速计数器测量频率的实验 项目为“频率测量例程”,用2DI/2DO信号板的输出点Q4.0发出PWM脉冲,送给HSC1的高速脉冲输入点I0.0测量频率 组态PTO1/PWM1产生PWM脉冲,信号源为信号板上的输出点,脉冲的周期为2ms,初始脉冲宽度为50%在OB1中调用CTRL_PWM指令,用I0.4启动脉冲发生器 设置HSC1的工作方式为“频率”(频率测量),使用I0.0HSC的初始状态为加计数,频率测量周期为1.0sHSC1默认的地址为ID1000,在运行时可以用该地址监视HSC的频率测量值实验时用外接的小开关使I0.4为1状态,信号板的Q4.0开始输出PWM脉冲,送给I0.0测频。
在监视表中HSC1的地址ID1000为测量得到的频率值第59页,共59页。