资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,4,章,S7-200,SMART,的功能指令,4.1,功能指令概述,4.1.1,怎样学习功能指令,功能指令分为较常用的指令、与数据的基本操作有关的指令、与,PLC,的高级应用有关的指令和用得较少的指令。,初学功能指令时,首先可以按指令的分类浏览所有的指令。初学者没有必要花大量的时间去熟悉功能指令使用中的细节,应重点了解指令的基本功能和有关的基本概念。应通过读程序、编程序和调试程序来学习功能指令。,4.1.2 S7-200,的指令规约,1,使能输入与使能输出,使能输入端,EN,有能流,流入方框指令,时,指令才能被执行。,EN,输入端有能流且,指令,执行时无错误,则使能输出,ENO,将能流传递给下一个,方框指令或线圈。,语句表用,AENO,指令来产生与方框指令的,ENO,相同的效果。删除,AENO,指令后,方框指令将由串联变为并联。,2,梯形图中的指令,条件输入指令必须通过触点电路,连接到左侧母线上。,不需要条件的指令必须,直接连接在左侧母线上。,键入语句表指令时,必须使用英文的标点符号。,3,能流指示器,双箭头是开路能流指示器,,必须解决开路问题,,程序段,才能成功编译。可将其他梯形图元件附加到,ENO,端的可选能流指示器。没有在该位置添加元件,程序段也能成功编译。,4.2,数据处理指令,4.2.1,比较指令与数据传送指令,1,字节、整数、双整数和实数比较指令,比较触点中间的,B,、,I,、,D,、,R,、,S,分别表示无符号字节、有符号整数、有符号双整数、有符号实数和字符串比较。满足比较关系式给出的条件时,比较指令对应的触点接通。字符串比较指令的比较条件“,x”,只有,=,和,。,整数和双整数比较指令比较两个有符号数。,IN1,在触点的上面,,IN2,在触点下面。,【例,4-1,】 用接通延时定时器和比较指令组成占空比可调的脉冲发生器。,T37,的常闭触点控制它的,IN,输入端,使,T37,的当前值按锯齿波变化。比较指令用来产生方波,为,OFF,的时间取决于比较指令,第2,个操作数的值。,2,字符串比较指令,字符串比较指令比较,ASCII,码字符串相等或不相等。常数字符串,应,是比较触点上面的参数,或比较指令中的第一个参数。,3,字节、字、双字和实数的传送,传送指令助记符中最后的,B,、,W,、,DW,(或,D,)和,R,分别表示操作数为字节、字、双字和实数。,4,字节立即读写指令,字节立即读取指令,MOV_BIR,读取,IN,指定的一个字节的物理输入,但是并不更新对应的过程映像输入寄存器。字节立即写入指令,MOV_BIW,将一个字节的数值写入,OUT,指定的物理输出,同时更新对应的过程映像输出字节。,5,字节、字、双字的块传送指令,块传送指令将起始地址为,IN,的,N,个连续的存储单元中的数据,,,传送到从地址,OUT,开始的,N,个存储单元,字节变量,N = 1,255,。,6,字节交换指令,字节交换指令,SWAP,用来交换输入字,IN,的高字节与低字节。应采用脉冲执行方式。,4.2.2,移位与循环移位指令,移位位数,N,的数据类型为,BYTE,。,1,右移位和左移位指令,移位指令将输入,IN,中的数各位的值向右或向左移动,N,位后,送给输出,OUT,指定的地址。移位指令对移出位自动补,0,,,有符号的字和双字,的,符号位也被移位。,如果移位次数非,0,,“溢出”标志位保存最后一次被移出的位的值,。,2,循环右移位和循环左移位指令,循环移位指令将输入,IN,中各位的值向右或向左循环移动,N,位后,送给输出,OUT,指定的地址。被移出来的位将返回到另一端空出来的位置。移出的最后一位的数值存放在溢出标志位。,如果移动的位数,N,大于允许值,执行循环移位之前先对,N,进行求模运算。例如字循环移位时,将,N,除以,16,后取余数,得到,的,有效移位次数,为,0,15,。如果为,0,则,不移位。符号位也被移位。,3,移位寄存器指令,下图中的,14,位移位寄存器由,组成,在的上升沿,,的值从移位寄存器的最低位移入,寄存器中的各位左移一位,最高位的值被移到溢出标志位。,N,为,14,时,的值从最高位移入,寄存器中的各位,右,移一位,从最低位移到溢出标志位。,4.2.3,数据转换指令,1,标准转换指令,除了解码、编码指令之外的,10,条指令属于标准转换指令。输入参数,IN,指定的数据转换后保存到输出参数,OUT,指定的地址。,BCD,码与整数相互转换的指令中,,,整数的有效范围为,0,9999,。,如果,转换后的数值超出输出的允许范围,溢出标志位被置为,ON,。,2,段码指令,七段显示器的,D0,D6,段分别对应于,段码指令,输出字节的第,0,位第,6,位,某段应亮时输出字节中对应的位为,1,,反之为,0,。,段码指令很少使用。,3,计算程序中的数据转换,压力变送器的量程为,0,10MPa,,输出信号为,0,10V,,,AI,模块的量程为,0,10V,,转换后的数字量为,0,27648,,设转换后的数字为,N,,压力值转换公式为,P,=,(,10000,N,),/ 27648 = 0.36169,N,(kPa),4,解码指令与编码指令,解码指令,DECO,根据输入字节,IN,的最低,4,位表示的位号,将输出字,OUT,对应的位置为,1,,输出字的其他位均为,0,。,16#0008=2#0000 0000 0000 1000,。,编码指令,ENCO,将输入字,IN,中的最低有效位(为,1,的位,)的位编号写入输出字节,OUT,的最低,4,位。,16#0210=2#0000 0010 0001 0000,。,存储器填充指令,FILL,用输入参数,IN,指定的字值填充从地址,OUT,开始的,N,个连续的字,。,4.2.5,实时时钟指令,1,用编程软件读取与设置实时时钟的日期和时间,单击“,PLC,”菜单功能区的“设置时钟”按钮,打开“,CPU,时钟操作”对话框。可以读取,PC,、,PLC,的时钟,修改和下载日期时间。,2,读取实时时钟指令,READ_RTC,从,CPU,的实时时钟读取当前日期和时间,,,8,字节时间缓冲区依次存放年的低,2,位、月、日、时、分、秒、,0,和星期的代码,,星期日为,1,。,日期和时间的数据类型为字节型,BCD,码。,3,设置实时时钟指令,SET_RTC,将,8,字节时间日期值写入,CPU,的实时时钟。,【,例,4-2】,用实时时钟定时控制设备。,TODRVB70/,小时分钟值在,VW73,LDW= VW73, VW78/VW78,中是起始时、分值,AWVW73, VW80/VW80,中是结束时、分值,=Q0.2/,在设置的时间范围内,,为,1,状态,4.3,数学运算指令,4.3.1,四则运算指令与递增递减指令,1,加减乘除指令,梯形图,IN1 + IN2 = OUT,,,IN1,IN2 = OUT,,,IN1 * IN2 = OUT,,,IN1 / IN2 = OUT,语句表,IN1+OUT = OUT,,,OUT,IN1 = OUT,,,IN1*OUT = OUT,,,OUT/IN1=OUT,指令影响(零标志)、(溢出标志)、(负数标志)和(除数为,0,)。,MUL,将两个,16,位整数相乘,产生一个,32,位乘积。,DIV,指令将两个,16,位整数相除,运算结果的高,16,位为余数,低,16,位为商。,【例,4-3,】,压力变送器的压力计算公式为,P = 10000(,N, 5530) / 22118(kPa),,,N,为整数。,MUL,指令得到的乘积为双整数。用右键菜单命令强制,AIW16,。,2,递增与递减指令,梯形图中,IN + 1 = OUT,,语句表中,OUT+1=OUT,4.3.2,浮点数函数运算指令,浮点数函数运算指令的输入参数,IN,与输出参数,OUT,均为实数。,1,三角函数指令,输入值是以弧度为单位的浮点数,角度值乘以,/180,转换为弧度值。,2,自然对数和自然指数指令,3,平方根指令将正实数开平方,4.3.3,逻辑运算指令,1,取反,指令,取反,指令将,多位,二进制数逐位取反,各位由,0,变为,1,,由,1,变为,0,。,2,逻辑运算指令,字节、字、双字“与”运算时,,,如果两个操作数的同一位均为,1,,运算结果,的,对应位为,1,,否则为,0,。“或”运算时如果两个操作数的同一位均为,0,,运算结果的对应位为,0,,否则为,1,。“异或”(,Exclusive Or,)运算时如果两个操作数的同一位不同,运算结果的对应位为,1,,否则为,0,。,3,逻辑运算指令,应用举例,用字节逻辑“或”运算将,QB0,的,最低,3,位,置为,1,,其余各位保持不变,。,QB0,的某一位与,1,作“或”运算,运算结果为,1,,与,0,作“或”运算,运算结果不变。,IW4,的低,12,位,用来,读取,3,位拨码开关的,BCD,码,,IW4,的高,4,位另作他用。,16#0FFF,的最高,4,位二进制数为,0,,低,12,位为,1,。,与,IW4,作“与”运算后,,VW12,的低,12,位与,IW4,的低,12,位的值相同,,VW12,的高,4,位为,0,。,4.4,程序控制指令,4.4.1,跳转指令,1,跳转与标号指令,JMP,线圈通电时,跳转条件满足,跳转指令使程序流程跳转到对应的标号处。,JMP,与,LBL,指令的操作数,n,为常数,0,255,,只能,在同一个程序块中,跳转,。,的常开触点断开,时,,跳转条件不满足,顺序执行下面的,指令。,的常开触点接通,时,,跳转到标号,LBL 2,处,,不,执行,第二个程序段。,2,跳转指令对定时器的影响,在各定时器正在定时时跳转,,100ms,定时器停止定时,当前值保持不变。,10ms,和,1ms,定时器继续定时,定时时间到时跳转区外的触点也会动作。停止跳转,时,100ms,定时器继续定时。,3,跳转对功能指令的影响,未跳转时,INC_B,指令使,VW2,每秒加,1,。跳转条件满足时,VW2,的值保持不变。,【例,4-6,】 用跳转指令实现图,4-28,中的流程图的要求。,4.4.2,循环指令,1,单重循环,驱动,FOR,指令的逻辑条件满足时,反复执行,FOR,与,NEXT,之间的指令。执行到,NEXT,指令时,,INDX,的值加,1,,如果,INDX,的值小于等于结束值,FINAL,,返回去执行,FOR,与,NEXT,之间的指令。如果,INDX,的值大于结束值,循环终止,。,【,例,4-7】,在的上升沿,求,VB130 VB133,这,4,个字节的异或值,用,VB134,保存。,首先将,VB134,清,0,,,并,设置地址指针,AC1,的初始值。,第一次循环将指针,AC1,所指的,VB130,与,VB134,异或,然后将指针值加,1,,指针指向,VB131,,为下一次循环的异或运算做好准备。,VB130,VB133,同一位中,1,的个数为奇数时,,VB134,对应位的值为,1,,反之为,0,。,2,多重循环,循环最多可以嵌套,8,层。,在的上升沿,执行,10,次外层循环,如果为,ON,,每执行一次外层循环,将执行,8,次内层循环。执行完后,,VW10,的值增加,80,。,4.4.3,其他指令,1,条件结束指令与条件停止指令,条件结束指令,END,的逻辑条件,满足时,终止当前的扫描周期。,条件,停止指令,STOP,使,CPU,从,RUN,模式切换到,STOP,模式,。,2,GET_ERROR,(获取非致命错误代码)指令很少使用。,3,监控定时器复位指令,T32,等组成一个脉冲发生器,从的上升沿开始,,,输出一个宽度等于,T32,预设值的脉冲。在脉冲期间反复执行,JMP,指令,因此扫描时间略大于,T32,的预设值。扫描周期超过,500ms,时,,CPU,自动切换到,STOP,模式,。,可用,WDR,指令重新触发监控定时器,以扩展允许使用的扫描时间。,4.5,局部变量与子程序,4.5.1,局部变量,1,局部变量与全局变量,每个程序组织单元(,POU,)均有由,64,字节局部(,L,)存储器组成的局部变量。局部变量只在它被创建的,POU,中有效,全局符号在各,POU,中均有效。局部变量有以下优点:,1),尽量使用局部变量的子程序易于移植到别的项目。,2),同一级,POU,的局部变量使用公用的,物理,存储区,。,3,)局部变量用来在子程序和调用它的程序之间传递输入参数和输出参数。,2,查看局部变量表,单击,“,视图,”,菜单的,“,组件,”,按钮,再单击打开的下拉式菜单中的,“,变量表,”,。,3,局部变量的类型,临时变量,(TEMP),是暂时保存在局部数据区中的变量。主程序或中断程序只有,TEMP,变量。,IN (,输入参数,),用来将调用它的,POU,提供的数据值传入子程序。,OUT(,输出参数,),用来将子程序的执行结果返回给调用它的,POU,。,IN_OUT(,输入,_,输出参数,),的初始值由调用它的,POU,传送给子程序,并用同一参数将子程序的执行结果返回给调用它的,POU,。,每个子程序最多,可以使用,16,个输入,/,输出参数。,4,在局部变量表中增加和删除变量,子程序中变量名称前面的“,#”,表示局部变量,是软件自动添加的。,5,局部变量的地址分配,由编程软件自动分配,局部变量的,地址。,6,局部变量数据类型检查,局部变量表中指定的数据类型,应,与调用它的,POU,的变量的数据类型匹配,。,子程序的编写与调用,1,子程序的作用,子程序将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。可以多次调用同一个子程序,使用子程序可以减少扫描时间。,2,子程序中的定时器,停止调用子程序时,如果子程序中的定时器正在定时,,100ms,定时器将停止定时,当前值保持不变,重新调用时继续定时;,1ms,、,10ms,定时器继续定时,定时时间到时,其常开触点可以在子程序之外起作用,。,3,子程序举例,子程序的重命名,生成局部变量,编写程序。,4,子程序的调用:将指令树中的子程序,“,拖,”,到程序编辑器中需要的位置。,如果用语句表编程,子程序调用指令的格式为,CALL,子程序名称,参数,1,,参数,2,,参数,n,n = 1,16,。,在语句表中调用带参数的子程序时,输入参数在最前面,其次是输入,/,输出参数,最后是输出参数。梯形图中从上到下的同类参数,在语句表中按从左到右的顺序排列。,在调用子程序时,,CPU,保存当前的逻辑堆栈,将栈顶值置为,1,,堆栈中的其他值清零,控制转移至被调用的子程序。该子程序执行完后,,CPU,将堆栈恢复为调用时保存的数值,并将控制权交还给调用子程序的,POU,。,子程序在同一个周期内被多次调用时,子程序内部不能使用上升沿、下降沿、定时器和计数器指令。,如果在使用子程序调用指令后修改,了,该子程序中的局部变量表,调用指令将变为无效。必须删除无效调用,重新调用修改后的子程序。,子程序调用最多可以嵌套,8,级,从中断程序调用子程序时嵌套深度是,4,级。,5,用地址指针作输入参数的子程序,【例,4-8,】 对,VB30,开始的,4B,数据作异或运算,,并将运算结果存放在,VB40,中。,6,子程序的有条件返回,在子程序中的,RET,(从子程序有条件返回)线圈通电时停止执行子程序,返回调用它的程序。,7,有保持功能的电路的处理,如果参数,“,电机,”,的数据类型为输出(,OUT,),两次调用子程序,SBR_0,,因为保存参数,“,电机,”,()的存储器是共用的,,接通外接的小开关,和同时变为,ON,。,将输出参数,“,电机,”,的变量类型改为,IN_OUT,,参数,“,电机,”,返回的运算结果分别用和保存,解决了上述问题。,4.6,中断程序与中断指令,4.6.1,中断的基本概念,在中断事件发生时由操作系统立即调用中断程序。中断程序是用户编写的。中断程序不能再被中断,中断程序越短越好。,中断事件号见表,4-12,。,4.6.2,中断指令,1,中断允许指令与中断禁止指令,中断允许指令,ENI,允许处理所有被连接的中断事件。,禁止中断指令,DISI,禁止处理所有中断事件。进入,RUN,模式时自动禁止中断。,2,中断连接指令与中断分离指令,中断连接指令,ATCH,建立中断事件,EVNT,与对应的中断程序,INT,的联系。中断事件由中断事件号指定,中断程序由中断程序号指定。,中断分离指令,DTCH,断开中断事件与中断程序之间的联系。,3,中断程序的执行,CPU,自动调用中断程序需要满足下列条件:,1,)执行了全局中断允许指令,ENI,。,2,)执行了中断事件对应的,ATCH,指令。,3,)出现对应的中断事件。,4,中断优先级与中断队列溢出,中断优先级分组:通信(最高优先级)、,I/O,中断和定时中断。,在优先级范围内,,CPU,按照先来先服务的原则处理中断,。,4.6.3,中断程序举例,1,通信端口中断,在自由端口模式,接收消息完成、发送消息完成和接收一个字符均可以产生中断事件。,2,I/O,中断,I/O,中断包括的上升沿、下降沿中断;高速计数器的当前值等于设定值、计数方向改变和计数器外部复位中断。,【,例,4-9】,在的上升沿通过中断使立即置位。在的下降沿通过中断使立即复位,。,/,主程序,OB1,LD SM0.1 /,第一次扫描时,上升沿时执行,0,号中断程序,下降沿时执行,1,号中断程序,ENI /,允许全局中断,LD SM5.0/,如果检测到,I/O,错误,DTCH0/,禁用的上升沿中断,DTCH3/,禁用的下降沿中断,/,中断程序,0,(,INT_0,),LD SM0.0 /,该位总是为,ON,SIQ0.0, 1/,使立即置位,TODRVB10/,读实时时钟,/,中断程序,1,(,INT_1,),LD SM0.0 /,该位总是为,ON,RIQ0.0, 1/,使立即复位,TODRVB18/,读实时时钟,3,定时中断,定时中断,0,、,1,的周期为,1,255ms,,分别写入,SMB34,和,SMB35,。每当定时时间到时,执行相应的定时中断程序。,【,例,4-10】,用定时中断,0,实现周期为,2s,的高精度定时。,/,主程序,OB1,LD SM0.1 /,第一次扫描时,MOVB 0, VB10 /,将中断次数计数器清,0,MOVB 250, SMB34 /,设置定时中断,0,的中断时间间隔为,250ms,ATCH INT_0, 10 /,指定产生定时中断,0,时执行,0,号中断程序,ENI /,允许全局中断,/,中断程序,INT_0,每隔,250ms,中断一次,LD SM0.0 /,该位总是为,ON,INCBVB10/,中断次数计数器加,1,LDB=8, VB10 /,如果中断了,8,次(,2s,),MOVB 0, VB10 /,将中断次数计数器清,0,INCB QB0 /,每,2s,将,QB0,加,1,4. T32/T96,中断,【,例,4-11】,使用,T32,中断控制,8,位节日彩灯,每,3s,循环左移一位。,1ms,定时器,T32,定时时间的中断事件号为,21,,最长定时时间为。,/,主程序,OB1,LD SM0.1 /,第一次扫描时,MOVB 16#F, QB0/,设置彩灯的初始状态,最低,4,位的灯被点亮,ATCH INT_0, 21 /,指定,T32,定时时间到时执行中断程序,INT_0,ENI /,允许全局中断,LDNM0.0/T32,和组成脉冲发生器,TONT32, 3000/T32,的预设值为,3000ms,LD T32,/,中断程序,INT_0,LD SM0.0,RLB QB0, 1/,彩灯循环左移,1,位,4.7,高速计数器与高速脉冲输出指令,高速计数器的工作模式与外部输入信号,1,增量式编码器,高速计数器一般与增量式编码器配合使用,单通道增量式编码器只产生一个脉冲序列。双通道,A,、,B,相型编码器提供转速和转轴旋转方向的信息。三通道增量式编码器的,Z,相零位脉冲用作系统清零信号,或作为坐标的原点。,2,绝对式编码器,绝对式编码器,输出多,位二进制数,,,反映了运动物体所处的绝对位置,。,3,高速计数器的工作模式,HSC0,和,HSC2,有,8,种计数模式:,1),无外部方向控制,信号的单相加,/,减计数器(模式,0,、,1,)。,2),带外部方向控制信号的单相加,/,减计数器(模式,3,、,4,)。,3),有加、减计数时钟脉冲输入的双相计数器(模式,6,、,7,)。,4) A/B,相正交计数器(模式,9,、,10,),两路计数脉冲的相位互差,90,。,根据有无复位输入和启动输入,上述,4,类工作模式又可以各分为,两,种,。,图,4,-38 1,倍速,A/B,相正交计数器,A/B,相正交计数器可以选择,1,倍速模式和,4,倍速模式,,1,倍速模式在时钟脉冲的每一个周期计,1,次数,,4,倍速模式在两个时钟脉冲的上升沿和下降沿都要计数。,HSC1,和,HSC3,因为只有一个时钟脉冲输入,只支持模式,0,。,4,高速计数器的外部输入信号见表,4-15,。,4.7.2,高速计数器的程序设计,1,高速计数器指令,HDEF,指令定义高速计数器的工作模式,,HSC,指令用来激活高速计数器。,【,例,4-12,】,要求高速计数器,HSC0,用模式,0,的计数来周期性地控制和,计数脉冲的周期为,1ms,。,第,1,页选中配置“,HC0,”,计数模式为默认的模式,0,。,第,2,页采用默认的计数器名称,HSC0,。,第,3,页(模式)设置计数模式为默认的模式,0,。,第,4,页采用默认的计数器初始化子程序的符号名,HSC0_INIT,。设置计数器的预设值,PV,为,4000,,当前值,CV,为默认的,0,,初始计数方向为加计数。,第,5,页(中断)设置当前值等于预设值时产生中断,使用默认的中断程序符号名,COUNT_EQ,。,第,6,页(步)设置步数为,3,步。,第,7,页(第,1,步)自动选中“连接此事件到一个新的中断程序”,采用默认的新的中断程序的名称,HSC0_STEP1,。设置“新,PV,”为,7000,,不更新计数当前值和计数方向。单击上面的“下一步”按钮,。,第,8,页(第,2,步)自动选中“连接此事件到一个新的中断程序”,采用默认的新的,INT,的名称,HSC0_STEP2,。,设置“新,PV,”为,3000,,不更新计数当前值,新的计数方向为减计数。,第,9,页(第,3,步)选中“连接此事件到一个新的中断程序”,,设置,新,INT,的名称为,COUNT_EQ,。,预设值更新为,4000,,当前值更新为,0,,计数方向改为加计数。,实际上是开始下一周期的计数操作,。,单击下面的“下一步”按钮,。,第,10,页(组件)显示将要生成的初始化子程序,HSC_INIT,和,3,个中断程序。,在第,11,页(完成)单击“生成”按钮,自动生成上述的,4,个程序。,主程序在的上升沿时调用,HSC_INIT,。,程序中对和置位和复位的指令是人工添加的。,4.7.3,高速脉冲输出,1,PWM,发生器,占空比是脉冲宽度与脉冲周期之比。,脉冲列,(PTO),功能提供周期与脉冲数目可以由用户控制的占空比为,50%,的方波脉冲输出。脉冲宽度调制,(PWM),功能提供连续的、周期与脉冲宽度可以由用户控制的输出。,CPU ST20,有两个脉冲输出通道和,,CPU ST30/ST40/ST60,有,3,个脉冲输出通道、和,支持的最大脉冲频率为,100kHz,。,用脉冲输出向导生成,PWM,指令,PWMx_RUN,,,时间基准为,s,。输入参数,RUN,为,ON,时输出脉冲。,4.8,数据块应用与字符串指令,4.8.1,数据块概述,1,在数据块中对地址和数据赋值,数据块用来,给,V,存储器的字节、字和双字地址赋,初始,值。,数据块的第一行必须包含明确的地址(包括符号地址),以后的行可以不包含明确的地址。,在单地址值后面键入多个数据或键入只包含数据的行时,由编辑器进行地址赋值。,2,错误处理,输入错误的地址和数据、地址在数据值之后、数值超出允许范围、使用非法语法或无效值、使用了符号地址或中文的标点符号,时,,错误行的左边出现红色的,叉,,出错的地址或数据的下面用波浪线标示。,用,输出窗口显示,编译,错误。,4.8.2,字符串指令,1,字符和字符串的表示方法,字符串常量的第一个字节是字符串的长度(即字符个数)。在符号表和程序编辑器中,字节、字和双字的,ASCII,字符用英语的单引号表示,例如,A,、,AB,和,AB12,。,ASCII,常量字符串用英语的双引号表示,例如,”ABCDE”,。,数据块用英语的单引号定义字符常量,可以将,VB,地址分配给任意个字符的常量,将,VW,和,VD,地址分别分配给,2,个和,4,个字符的常量。用英语的双引号定义最多,254,个字符的字符串,只能将,V,或,VB,地址用于字符串分配。,程序编辑器中用英语的单引号,表示,1,个、,2,个、,4,个,ASCII,字符常量,。用英语的双引号定义最多,126,个字符的字符串。,有效的地址为,VB,。,2,字符、字符串与数据转换指令见表,4-17,。,3,复制、连接字符串和求字符串长度指令,求字符串长度指令,SLEN,返回输入参数,IN,指定的字符串的长度值。,字符串复制指令,SCPY,将参数,IN,指定的字符串复制到,OUT,指定的字符串。,字符串连接指令,SCAT,将参数,IN,指定的字符串附加到,OUT,指定的字符串后面。,【,例,4-13】,字符串指令应用举例。,SCPY HELLO , VB70 /,将字符串,HELLO ,复制到,VB70,开始的存储区,SCAT WORLD, VB70 /,将字符串,WORLD,附到,VB70,开始的字符串的后面,SLEN VB70, VB82 /,求,VB70,开始的字符串的长度,4,从字符串中复制子字符串指令,执行完例,4-13,中的程序后,,SSTR_CPY,指令将,IN,指定的字符串“,HELLO WORLD,”中的第,7,个字符开始,的,5,个字符,WORLD,复制到,VB83,开始的新字符串中,。,5,字符串搜索指令,STR_FIND,指令在,IN1,指定的字符串“,HELLO WORLD,”中,搜索字符串“,WORLD,”,用地址,VB89,保存字符,WORLD,的首个字符,W,在字符串,IN1,中的位置。,VB89,的初始值为,1,表示从第一个字符开始搜索。如果没有找到,,OUT,被清零。,
展开阅读全文