西门子 _子程序_
浅谈西门子编程语言《子程序的调用》
浅谈西门子编程语言《子程序的调用》作者:李强来源:《科技创新导报》2019年第04期摘 ; 要:针对机电专业的学生学习西门子功能编程语言比较困难,功能编程语言经常用到子程序,从子程序的特点,运行方式,举例应用完整技术介绍了子功能编程,写程序时经常用到子程序,它是架构式的编程,学习西门子功能指令的重点和难点。
本文研究分析了西门子编程语言《子程序的调用》,希望为广大读者提供参考。
关键词:程序特点 ;运行方式 ;梯形图中图分类号:TP39 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 文献标识码:A ; ; ; ; ; ; ; ; ; ; ; ;文章编号:1674-098X(2019)02(a)-0148-021 ;子程序的特点(1)子程序只有在主程序发出调用指令的时候才运行,运行完毕后,自动返回主程序,所以不用每个扫描周期都执行,这样可以减少整个程序的运行时间,对于一些初始化的程序,写在子程里比较合适。
(2)S7-200 CPU可以写64个子程序(0-63) CPU226XM还可以写128个子程序(0-127)。
(3)子程序可以嵌套使用(主程序中调用子程序,子程序再调用子程序),最大嵌套深度为8级,但是中断程序里不能嵌套子程序。
(4)子程序默认的名称是SBR_n。
(n子程序编号)也可以修改。
2 ;子程序的运行方式(1)并列运行,一个程序中有多个子程序,之间没有嵌套的关系,是并列的,只要调用的条件满足,这个子程序就能被运行。
(2)嵌套运行,主程序调用子程序,子程序还可以再调用子程序,这种方式叫做嵌套,最多可以嵌套8层,这种情况下,各个子程序的运行有先后之分。
(3)在子程序中不能使用END(结束指令),每一个每一个子程序在编译时编译器自动在子程序的最后加入无条件返回指令,当用户需要编程实现有条件返回时,可以在子程序使用有条件返回RET指令。
(4)带参数调用子程序。
在调用子程序时可以带参数调用。
西门子S7-200子程序基本操作
西门子S7-200子程序基本操作
这是西门子的定时器指令,
可以在指令数中展开,然后进行调用
调用了定时器后,又调用了子程序
初始便自带了一个子程序SBR_0,和一个中断程序INT_0 你也可以改它们的名字
如果一个SBR_0不够
可以插入子程序
上面的是变量申明表,即计算机语言中的形参
在变量申明表中申明的变量,都是形参
这些形参是在调用时赋值、赋地址的
当然,在子程序中,你也可以用绝对地址,即I0.0、Q0.0,但这样不方便移植,而且建不了库,关于建库,等以后更熟练的掌握了后再详解。
定时器的PT值最多32767,即2#0111 1111 1111 1111的十进制值,与三菱的K值相同当然,这个PT值你也可以设成负值,程序运行时不会报错,有什么妙用我也不知道你要知道的话就告诉我让我知道
一开始在变量申明表中申明的in和out都是形参,在调用SBR_1时,将绝对地址赋给这些形参。
那么网络3所调用的子程序便成了
LD I0.0
= Q0.0
网络4所调用的子程序便成了
LD I0.1
= Q0.1。
西门子博图SCL语言编写的电机控制子程序
REGION DeviceStatusIndication 设备状态指示IF #Device.Recondition = 1 THEN#Device.Status := 0; // DeviceMaintenanceStatus 设备检修状态END_IF;IF #Device.Recondition = 0 THENIF #Device_REM = 0 THEN#Device.Status := 1; // DeviceNoReadyStatus设备未就绪状态END_IF;END_IF;IF #Device.Recondition = 0 THENIF #Device_REM = 1 THENIF #Device.Error = 1 THEN#Device.Status := 2; //DeviceFaultStatus 设备故障状态END_IF;END_IF;END_IF;IF #Device.Recondition = 0 THENIF #Device_REM = 1 THENIF #Device.Error = 0 THENIF #Device.AMConvert = 0 THEN#Device.Status := 3; //DeviceManualControlStatus 设备手动控制状态END_IF;END_IF;END_IF;END_IF;IF #Device.Recondition = 0 THENIF #Device_REM = 1 THENIF #Device.Error = 0 THENIF #Device.AMConvert = 1 THEN#Device.Status := 4; //DeviceAutomaticControlStatus 设备自动控制状态END_IF;END_IF;END_IF;END_IF;END_REGIONREGION DeviceControlProcessing 设备控制过程CASE #Device.Status OF //设备状态信号0: //DeviceMaintenanceStatus 设备检修状态#Device.AutomaticControl_Static := 0;1: //DeviceNoReadyStatus设备未就绪状态#Device.ManualControl_Static := 0;#Device.AutomaticControl_Static := 0;RESET_TIMER(#IEC_Timer_0_Instance);2: //DeviceFaultStatus 设备故障状态#Device.ManualControl_Static := 0;#Device.AutomaticControl_Static := 0;IF #Device.ErrorReset = 1 THEN#Device.Error1 := 0;#Device.Error2 := 0;#Device.Error := 0;#Device.ErrorReset := 0;END_IF;3: //DeviceManualControlStatus 设备手动控制状态#Device.AutomaticControl_Static := 0;IF #Device.Startup = 1 OR #Device.Start_INLOCK = 1 THEN #Device.ManualControl_Static := 1;END_IF;IF #Device.Suspend = 1 OR #Device.Stop_INLOCK = 1 THEN #Device.ManualControl_Static := 0;RESET_TIMER(#IEC_Timer_0_Instance);END_IF;IF #Device.ManualControl_Static = 1 THENIF #Device_RUN = 0 THEN#IEC_Timer_0_Instance(IN := NOT #Device_RUN,PT := t#5s);#Device.Error2 := #IEC_Timer_0_Instance.Q;ELSERESET_TIMER(#IEC_Timer_0_Instance);END_IF;END_IF;IF #Device_FLT = 1 THEN#Device.Error1 := 1;END_IF;IF #Device.Error1 = 1 OR #Device.Error2 = 1 THEN#Device.ManualControl_Static := 0;#Device.Error := 1;RESET_TIMER(#IEC_Timer_0_Instance);END_IF;4: //DeviceAutomaticControlStatus 设备自动控制状态IF #Device.Start_INLOCK = 1 OR #Device.Stop_INLOCK = 1 THENIF #Device.Start_INLOCK = 1 THEN#Device.AutomaticControl_Static := 1;END_IF;IF #Device.Stop_INLOCK = 1 THEN#Device.AutomaticControl_Static := 0;RESET_TIMER(#IEC_Timer_0_Instance);END_IF;ELSEIF #Device.AotoStart_Flag = 1 THEN#Device.AutomaticControl_Static := 1;END_IF;IF #Device.AotoStop_Flag = 1 THEN#Device.AutomaticControl_Static := 0;RESET_TIMER(#IEC_Timer_0_Instance);END_IF;END_IF;IF #Device.AutomaticControl_Static = 1 THENIF #Device_RUN = 0 THEN#IEC_Timer_0_Instance(IN := NOT #Device_RUN,PT := t#5s);#Device.Error2 := #IEC_Timer_0_Instance.Q;ELSERESET_TIMER(#IEC_Timer_0_Instance);END_IF;IF #Device_FLT = 1 THEN#Device.Error1 := 1;END_IF;IF #Device.Error1 = 1 OR #Device.Error2 = 1 THEN#Device.AutomaticControl_Static := 0;#Device.Error := 1;#Device.AMConvert := 0;RESET_TIMER(#IEC_Timer_0_Instance);END_IF;END_IF;END_CASE;END_REGIONREGION DeviceControlOutput 设备控制输出IF #Device.Recondition = 0 THENIF #Device.ManualControl_Static = 1 OR #Device.AutomaticControl_Static = 1 THEN#Device_STAP := 1;ELSE#Device_STAP := 0;END_IF;END_IF;END_REGIONREGION DeviceManualControlReset 设备手动控制复位#Device.Startup := 0;#Device.Suspend := 0;END_REGION。
西门子S7-200子程序,多次调用的“怪”现象
西门子S7-200子程序,多次调用的“怪”现象(2013-09-09 09:55:26)转载▼标签:分类:S7-200工控老鬼s7-300启程plc培训s7200深圳plc培训西门子S7-200子程序,多次调用的“怪”现象在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。
但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。
下面就是前些天热线上遇到的一个Case,非常有代表性,在这里跟大家分享。
E:您好,西门子技术支持。
C:您好,我想问下,200子程序是不是多次调用时会不好使?E:不会啊,您是不是在子程序里使用了沿指令或者定时器?C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果第一个I点闭合了,两个Q点都导通了。
E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。
于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。
客户的程序是这样的:子程序:是个常见的自保持逻辑,接口参数如红框所示。
图. 01主程序:调用了两次上面的子程序,实现I0.0和I0.1控制Q0.0的闭合和断开,I0.2和I0.3控制Q0.1的闭合和断开。
图. 02那么在线测试下程序执行情况,发现果然如客户所描述的,I0.0为1后,Q0.0和Q0.1都为1了。
见下图.03所示。
而如果闭合I0.2,则Q0.0和Q0.1都断开。
图. 03为什么会这样呢?首先我们先明确子程序局部变量的特点。
局部变量的变量类型分为四种:IN,IN_OUT,OUT和TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。
SIEMENS 802S系统的子程序
数控铣削编程与加工技术
SIEMENS 802S系统的子程序
例1-10 如图1-18所示,零件上有两排形状尺寸相同的正方 形凸台,高5 mm,试用子程序编写精加工程10 G54 G90 G17
N020 T1 D1
N030 G00 Z100 S500 M03
N040 X0 Y0
SIEMENS 802S系统的子程序
3.子程序调用
在一个程序中(主程序或子程序),可以直接利用程序名调用子 程序。子程序调用要求占用一个独立的程序段。如果要求多次 连续地执行某一子程序,则在编程时必须在所调用子程序的程 序名后的地址P下写入调用次数,最大次数为9999。
编程举例:
N010 L123
数控铣削编程与加工技术
SIEMENS 802S系统的子程序
1.子程序结构
子程序的结构与主程序相同,但在子程序中最后一个程序段可以用M02指 令结束程序运行,也可以用RET指令结束子程序;但RET指令要求占用一 个独立的程序段。
2.子程序名
为方便地选择某一个子程序,必须给子程序取一个程序名。子程序名可以 自由选择,其方法与主程序名的选取方法一样,但扩展名不同。子程序的 扩展名为.SPF,必须与子程序名一起输入,如SKX123.SPF。 另外,在子程序中,还可以使用地址字符L,其后面的值可以有七位(只能 为整数),地址字符L之后的零均有意义,不能省略。如L128、L0128、L00 128分别代表三个不同的子程序。
N050 Z5
N060 L01 P3
图1-18 子程序编程举例
SIEMENS 802S系统的子程序
N070 G00 X0 Y60 N080 L01 P3 N090 G00 Z100 N100 X0 Y0 M05 N110 M02
西门子数控.子程序调用的花样年华
西门子数控.子程序调用的花样年华
带形参的子程序调用
在调用带参数传递的子程序时常常会出现程序名称未定义的报警等问题,需要怎么解决呢?一般在主程序开始处,必须用EXTERN声明带参数传递的子程序,说明子程序名称,并且按照传递顺序说明变量类型。
注意:只有当子程序在零件工件下或者子程序目录下时才必须要EXTERN说明,用户循环或制造商循环目录下的带形参子程序(需要NC重启生效)则不需要 EXTERN 说明。
具体问题及操作过程举例如下:
1. 首先在子程序目录下建立一个带形参的子程序AAA。
2. 零件程序目录下建立一个主程序WK.SPF
3. 执行主程序,会调用子程序,报警如下:
4. 在主程序开始加入EXTERN指令后,主程序运行正常,报警解除。
转发到朋友圈吧,你的朋友也在找这篇文章呢!。
西门子PLC子程序的作用及创建方法
西门子PLC子程序的作用子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要子程序的时候调用它,而无需重写该程序。
子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少扫描时间。
使用子程序可以将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。
如果子程序中只引用参数和局部变量,可以将子程序移植到其他项目。
为了移植子程序,应避免使用全局符号和变量,如I、Q、M、SM、Al、AQ、V、T、C、S、AC等存储器中的绝对地址。
西门子PLC子程序的创建方法可采用下列方法创建PLC子程序:在“编辑”菜单中选择“插入→子程序”;在程序编辑器视窗中按鼠标右键,从弹出菜单中选择“插入→子程序”。
程序编辑器将从原来的POU显示进入新的子程序,程序编辑器底部将出现标志新的子程序的新标签,在程序编辑器窗口中可以对新的子程序编程。
可以使用该子程序的局部变量表定义参数,各子程序最多可以定义16个IN、OUT参数。
用右键双击指令树中的子程序或中断程序的图标,在弹出的窗口中选择“重新命名”,可修改它们的名称。
艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10 年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
如需进一步了解台达PLC、西门子PLC、施耐德plc、欧姆龙PLC的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城/。
S7-200 程序结构
S7-200 程序结构
西门子S7-200的程序有三种:主程序、子程序、中断程序。
主程序只有一个,名称为OB1。
子程序可以达到64个,名称分别为SBR0-SBR63。
子程序可以由子程序或中断程序调用。
中断程序可以达到128个,名称分别为INT0-INT127。
中断方式有输入中断、定时中断、高速计数中断、通信中断事件引发,当CPU响应中断时,可以执行中断程序。
由这三种程序可以组成线性程序和分块程序两种结构。
一、线性程序结构
线性程序是指一个工程的全部控制任务都按照工程控制的顺序写在一个程序中,比如写在OB1中。
程序执行过程中,CPU不断地扫描OB1,按照事先准备好的顺序去执行工作,线性程序结构简单,一目了然。
但是,当控制工程大到一定程序之后,仅仅采用线性程序就会使整个程序变得庞大而难于编制、难于调试了。
二、分块程序结构
分块程序是指一个工程的全部控制任务被分成多个小的任务块,每个任务块的控制任务根据具体情况分别放到子程序中,或者放到中断程序中。
程序执行过程中,CPU不断地调用这些子程序或者被中断程序中断。
分块程序虽然结构复杂一些,但是可以把一个复杂的过程分解成多个简单的过程。
对于具体的程序块容易编写,容易调试。
从总体上看,分块程序的优势是十分明显的。
西门子200SMART子程序调用的常问问题
子程序调用的常问问题1、为什么指令或者子程序的使能(EN)管脚前没有任何条件时,会有编译错误?当子程序或者指令的使能管脚前面没有编写任何条件时,编译后会出现一个语法错误,如图.无条件调用指令或子程序所示:图.无条件调用指令或子程序上面的编程方式是不被允许的。
如果用户希望无条件调用子程序或者指令,可以使用SM0.0作为使能条件,如图1.SM0.0作为使能条件所示:图1. SM0.0作为使能条件2、为什么子程序已经不激活了,但是子程序的输出没有复位?以下面一个简单子程序SBR_0为例,SBR_0将一个IN类型的布尔变量IN1直接连接到一个OUT布尔变量OUT1。
在主程序中使用M0.0条件调用SBR_0,如图2.子程序输出所示:图2.子程序输出当M0.0为‘1’时,子程序执行,CPU_输入0有信号时,CPU_输出0有信号输出。
此时将M0.0复位,则子程序不再执行,输出OUT1保持子程序最后一次执行的状态,不会被自动复位。
3、在子程序中如果使用了上升沿捕捉时指令,那么此子程序被多次重复调用时,为什么上升沿捕捉逻辑不能正常执行?举一个简单的例子,在子程序SBR_0中声明一个布尔类型输入变量和一个布尔类型的输出变量,输入变量IN1通过一个常开触点连接一个上升沿捕捉指令,之后再连接一个线圈输出到输出变量OUT1。
在主程序中的网络1和网络2中,连续使用SM0.0作为使能条件两次调用子程序SBR_0,子程序的输入输出分别连接M0.0、M0.1、M0.2、和M0.3。
如图3.子程序和主程序内容所示:图3.子程序和主程序内容如果将M0.0复位,M0.2置位,单纯按上升沿捕捉的逻辑,由于没有上升沿跳变,子程序的输出都应该是‘0’。
但是在线监控可以看到M0.1持续为‘0’, M0.3保持为‘1’。
如图4.在线监控所示:图4.在线监控上升沿捕捉指令的工作原理是将本次左侧能流过来的‘1’、‘0’信号与上次指令执行时的状态比较,如果检测到从0到1的变化,则导通。
西门子PLC的子程序西门子plc
西门子PLC的子程序 - 西门子plcSTEP7-Micro/Win在程序编辑器窗口里为每个POU供应一个独立的页。
主程序总是第1页,后面是子程序或中断程序。
由于各个程序在编辑器窗口里被分开,编译时在程序结束的地方自动加入无条件结束指令或无条件返回指令,用户程序只能使用条件结束和条件返回指令。
通常将具有特定功能且多次使用的程序段作为子程序。
子程序可以多次被调用,也可以嵌套(最多8层),还可以递归调用(自己调用自己)。
子程序有子程序调用和子程序返回两大类指令,子程序返回又分条件返回和无条件返回。
子程序调用指令用在主程序或其他调用子程序的程序中,子程序的无条件返回指令在子程序的最终网络段。
梯形图指令系统能够自动生成子程序的无条件返回指令,用户无需输入。
子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以削减扫描时间,同时可使整个程序功能清楚,易于查错和维护,还能削减存储空间。
为了移植子程序,应避开使用全局符号和变量,例如V存储区中的确定地址。
在编程软件的程序数据窗口的下方有主程序(OBI)、子程序(SUB0)、中断服务程序(INT0) 的标签,点击子程序标签即可进入SUB0子程序显示区。
也可以通过指令树的项目进入子程序SUB0显示区。
添加一个子程序时,可以用编辑菜单的插入项增加一个子程序,子程序编号n从0开头自动向上生成。
用鼠标右键点击指令树中的子程序或中断程序的图标,在弹出的菜单中选择“重新命名”,可以修改它们的名称。
子程序可能有要传递的参数(变量和数据),这时可以在子程序调用指令中包含相应参数,它可以在子程序与调用程序之间传送。
参数(变量和数据)必需有符号名(最多8个字符)、变量和数据类型等内容。
子程序最多可传递16个参数。
传递的参数在子程序局部变量表中定义。
局部变量表中的变量有IN、OUT、IN/OUT和TEMP等四种类型。
●IN类型:将指定位置的参数传入子程序。
参数的寻址方式可以是直接寻址(如VB10)、间接寻址(如*ACl)或马上数(如1234)。
西门子PLC子程序的编写方法FC功能
西门子PLC子程序的编写方法FC功能
当我们编写程序的时候经常会遇到被控制的设备的控制工艺都是一模一样的,这时如果我们还单独对每个设备进行程序的编写,就会显得非常麻烦与笨拙,对于这样大规模控制流程都一样的设备的编程通常我们第一时间都会想到子程序。
那么本文的内容就主要来介绍西门子提供给我们的一种子程序的编写方法FC功能。
1、无参数调用与有参数调用
对于功能的使用我们可以分为无参数调用和有参数调用,无参数调用就是FC块不从外部或者说是主调程序中接收参数,也不向外部发出参数,有参数调用和无参数调用刚好相反,需要从主调程序接收参数,将接收到的参数处理完毕后将处理结果再返还给主调程序。
图1所示程序段1是无参数调用,程序段2是有参数调用。
图1
2、有参数调用
通常情况下我们主要使用的就是有参数的调用,那么既然是有参数调用,被调用的FC功能要和调用它的主调程序进行参数的传递就必须要有参数传递的接口。
就像我们去超市买东西,超市要有入口和出口一样。
图2所示就是功能FC的各个接口.
图2
IN:输入接口,主调函数将参数传递给功能FC的接口,就像超市的入口参数只能进不能出。
OUT:输出接口,功能FC将处理完的结果返回给主调程序的接口,就像超市的出口参数只能出不能进。
IN_OUT:输入输出接口,参数既能从此接口进入也能从此接口输出。
TEMP:临时变量或者叫本地数据,是该功能FC的数据存储区域只在本功能中起作用。
RETURN:返回值,该类型下只能有一个接口,用于向主调程序返回参数。
西门子 _子程序_
可采用下列一种方法建立子程序: · 从"编辑"菜单,选择插入(Insert)> 子程序(Subroutine) · 从"指令树",用鼠标右键点击"程序块"图标,并从弹出菜单选择插入(Insert)> 子程序(Subroutine) · 从"程序编辑器"窗口,用鼠标右键点击并从弹出菜单选择插入(Insert)> 子程序(Subroutine)
布尔使能位只可用于位 (布尔) 位。此说明告诉STEP 7-Micro/WIN,这个输入参 数是基于某位逻辑指令组合的使能位结果。布尔使能位输入必须在局部变量表 中最先出现,早于任何其他类型的输入。唯有输入参数可以此方式使用。下例 中的启用输入 (EN) 输入和IN1输入使用了布尔逻辑。
子程序调用举例 用于SBR_0的局部变量表
用参数调用子程序
子程序可能包含交接的参数。参数在子程序的局部变量表中定义。参数必须有一个符号名(最多为23个字符)、 一个变量类型和一个数据类型。可向子程序交接16个参数或从子程序交接16个参数。 局部变量表中的变量类型域定义参数是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出子 程序(OUT)。下表说明子程序的参数类型。欲增加参数条目,将光标放在您希望增加的类型的变量类型域上 (IN、IN_OUT或OUT)。单极鼠标右键,获得选项菜单。选择"插入"选项,然后选择"下一行"选项。在当前条 目的下方会显示所选类型的另一个参数条目。
用于LAD和FBD 建立子程序和定义调用参数后,STEP 7-Micro/WIN自动生成子程序调用方框指令。根据局部变量表中对该子程 序的说明,调用指令包含输入/输出参数的正确数目和类型。建立子程序后,则将出现在指令树中。欲在另一个 POU中插入子程序,从指令树中拖出子程序块 图标,放入另一个POU中。
西门子840d异步子程序
运动同步指令是指NC在作程序插补的同时,可以另外执行其他一些动作,这些动作的有效范围可以不受指令执行范围限制。
按有效范围不同,同步指令分模态同步指令和非模态同步指令,非模态同步指令只在紧跟该指令后面的一条指令内有效,而模态同步指令执行后,只要没有取消该同步动作,在程序运行状态下一直有效。
模态同步指令甚至可以不受NC的工作方式限制,但这个功能是一个选项。
指令格式:(ID=n KEYWORD condition ) DO ACTION括号内部分为可选项,如果有ID号,则为模态指令,没有ID则为非模态指令,对于需要不受工作方式限制的模态指令用IDS标识。
ID号的范围为1-255,在执行时系统先按ID号从小到大执行模态指令,然后再执行非模态指令。
KEYWORD condition 是为后面要执行的动作指令执行条件,如果没有指令条件,则该指令无条件执行,常用的条件有以下几种:WHEN 每一个插补周期系统检测要执行的条件,如果条件满足,则执行一次后面指令的动作,但后面即使条件还满足,指令也不再执行。
WHENEVER 系统每一个插补周期都检测指令的执行条件是否满足,只要条件满足就执行后面的指令动作,不受次数限制。
EVERY 当指令条件从不满足变成满足时,指令动作就执行一次。
FROM 当指令执行的条件一满足,指令动作就执行,执行开始后,即使条件不再满足了,指令动作也照样执行。
对于指令要执行的条件,可以是各种系统变量间的逻辑运算,也可以是某个输入点的状态,比如:WHENEVER $AA_IM[X]>*SIN(45) DO只要 X轴的坐标值大于和SIN(45)的乘积,系统就执行后面的指令动作。
WHEN $A_IN[1]==1 DO如果NCK的快速输入1为1的话,就执行后面的指令动作,但该动作执行完以后,该指令不再执行。
对于指令后面的动作,常用的有:STOPREOF 停止译码功能取消DELDTG 删除余程RDISABLE 读入使能取消Mxx,Hxx,Sxx 输出M,S, H辅助功能指令POS[axis]= , FA[axis]= 定位轴定位功能$AA_OVR = 或者 $AC_OVR = 改变轴或者是路径进给倍率以下举例说明运动同步指令的使用一.双立柱机床的安全位置监控如下图所示,该机床有两个立柱,其中Y1和Y2是Y方向上的两个不同的机械轴,在运动过程中系统要保证Y1和Y2之间保持一定的距离,否则就有发生碰撞的危险。
西门子801数控车床子程序加工梯形螺纹的探索
西门子801数控车床子程序加工梯形螺纹的探索摘要:本着解决问题,化解难题的思想。
在程序中巧妙地结合了普通车床车削梯形螺纹时应用的各种工艺技巧,采用分层切削、左右切削、螺纹粗、精加工分段等方法,为数控车床车削大螺距梯形螺纹提供了又一个方便实用的加工方法。
关键词:梯形螺纹;数控车削;子程序;大螺距;西门子801前言梯形螺纹是机械行业中应用十分广泛,主要是用在一些机构的传动,用于传递准确的运动和动力,如车床中的走刀丝杆,镗床中的升降丝杆,虎钳上的夹紧丝杆以及其他机床上的传动丝杆,几乎都是用梯形螺纹,而且其精度直接影响传动精度,所以生产中对梯形螺纹的加工精度及螺纹槽两个侧面的粗糙度要求比较高。
随着梯形螺纹公称直径及螺距的增大,需切削的余量会大大增加,如果在普通机床上进行加工,其加工难度和时间必然会增加,而且费时费力,成本高,随着数控机床的广泛应用与数控系统功能的完善,使得梯形螺纹的数控加工成为了可能,基于以上可能,笔者在SIMENS801数控车床上进行加工梯形螺纹,并且总结了一定的经验。
相比普通车床车削梯形螺纹,数控加工梯形螺纹存在着以下几个难点:1、加工的工艺有难度;2、编程复杂、计算繁琐;3、精加工时工件质量难以保证。
针对以上几个难点,我们采取了以下一些措施:1、将梯形螺纹的粗、精加工分开,粗加工时采取分层左右车削的方法进行加工。
2、调用子程序加工螺距大直径大的梯形螺纹的梯形螺纹时,能够一定程度简化程序。
1梯形螺纹尺寸计算米制梯形螺纹的牙型角为30°,其代号用字母“Tr”及公称直径×螺距表示,左旋时需要加注“LH”,如Tr16×2,Tr40×6L2 梯形螺纹刀具的刃磨鉴于车削梯形螺纹时,切削余量和切削抗力都比较大,为尽量降低车削热和车削阻力,避免切削过程中刀具刃口损伤,因此采用低速车削方式。
车削效果比较理想的梯形螺纹车刀是使用弹性刀柄的螺纹车刀,可以避免扎刀。
西门子828D系统异步子程序功能在断电退刀中的应用
一
、
硬 件设 计
1 。 1 电容模块
根据伺 服 电机 的扭矩 选择 合适 的 电容 模块 , 保证 断 电时为I '  ̄J E J E 电机提供 足够的动力. .主要 作
用是 当 电网断 电后,S 1 2 0伺 服 控 制 器 的 直 流 母
【 关键 词 】 : 数 控 系统 : 异步 子 程 序 : 断 电退 刀
西 门子 8 2 8 D数控系统,功能强 大价格 适 中, 因其 友好的人机 交互界面、简 洁的硬件连接 、便 捷的调试 方法、高效 的刀具管理等 因素,所 以在 越来越 多的机床制造 厂商和机床使 用厂家得到 广 泛的应 用, 下列是笔 者在应 用 中利用 8 2 8 D数 控
系 统 的异 步 子 程 序 功 能 解 决 机 床 断 电 退 刀 功 能 的
2 0 0 mm, Z轴 退 回 1 0 0 mm, 回 退 速 度 为 1 0 0 0 mm/ mi n的试验程序,该 程序可根据不 同的 机床类型任意编写
・
6 8・ 第0 6 期 数控机床市场
目录 中 , 文 件 名 必 须 定 义 为 P L C A S U P 1 . S P F 和 P L C AS U P 2 . S P F . .但 同 一 时 刻 , 只 能 执 行
5 0 0 0
故 障
Bi t 7 B i t 6 B i t 5 Bi t 4 Bi t 3 Bi t 2 Bi t 1
宠 成
Bi t O
D B 3 4 0 0 P L C一 >N C K [ i  ̄ I " j 】
B y t e
0 O O O 0 0 0 1
信 息如下表. .
2 . 3修 改驱动参数
西门子S7-200系列PLC带参数子程序的编写方法
西门子S7-200系列PLC带参数子程序的编写方法摘要:西门子S7-200系列PLC是一种应用广泛的控制器,在实际应用中,我们常常需要编写带参数子程序来完成复杂的控制任务。
本文将详细介绍在S7-200 PLC中编写带参数子程序的方法,包括参数的定义、传递和使用等方面,旨在帮助PLC编程工程师更好地理解和掌握这一技术。
关键词:S7-200 PLC;带参数子程序;参数定义;参数传递;参数使用。
正文:一、带参数子程序的概念在S7-200 PLC中,子程序是一段独立的程序,可以在主程序中被多次调用。
而带参数子程序则是在子程序中引入了一些参数,使得子程序能够根据传入的参数执行不同的控制任务。
带参数子程序的使用可以极大地提高PLC编程的效率和灵活性。
二、参数定义在S7-200 PLC中,参数可以分为三类:输入参数、输出参数和内部参数。
其中输入参数是指在调用子程序时传入的数据,输出参数是指子程序在执行完毕后返回给主程序的数据,而内部参数则是在子程序内部使用的数据。
在定义参数时,需要指定参数类型和名称。
常用的参数类型包括整数型(int)、实数型(float)、布尔型(bool)等。
例如,在定义一个输入整型参数A和一个输出整型参数B时,可以如下定义:输入参数A:int输出参数B:int三、参数传递在调用带参数子程序时,需要将实际参数传递给子程序。
参数传递的方式有两种:按值传递和按引用传递。
按值传递是指将实际参数的值复制一份传递给子程序。
这种方式适用于参数的值不会改变的情况。
例如,在调用一个求平方值的子程序时,可以将实际参数的值传递给子程序,计算完毕后返回结果。
按引用传递是指将实际参数的地址传递给子程序。
这种方式适用于参数的值需要改变的情况。
例如,在调用一个交换两个变量值的子程序时,需要传递变量的地址,子程序将实际参数指向的变量值进行交换。
四、参数使用在子程序中使用参数需要先定义参数的类型和名称,再根据需要进行参数的读取和修改。
s71200调用子程序实例
s71200调用子程序实例S71200是西门子公司推出的一款先进的可编程逻辑控制器(PLC),广泛应用于工业自动化领域。
在S71200中,调用子程序是一种常见的编程技巧,可以提高程序的可读性和可维护性。
本文将以一个实例来介绍S71200如何调用子程序。
假设我们有一个简单的自动化系统,其中包含一个传送带和一个机械臂。
传送带上的物品需要被机械臂抓取并放置到指定位置。
我们需要编写一个PLC程序来控制这个系统。
首先,我们需要定义一些输入和输出变量。
在S71200中,可以使用变量表来管理这些变量。
我们定义一个名为"Start"的布尔型输入变量,用于启动系统;一个名为"Stop"的布尔型输入变量,用于停止系统;一个名为"ItemOnConveyor"的布尔型输入变量,表示传送带上是否有物品;一个名为"ItemOnPosition"的布尔型输出变量,表示物品是否已经放置到指定位置。
接下来,我们需要编写一个主程序来控制整个系统的运行。
主程序的逻辑如下:1. 如果"Start"为真且"Stop"为假,则执行以下步骤:2. 如果"ItemOnConveyor"为真,则调用子程序"GrabItem";3. 如果"ItemOnPosition"为真,则调用子程序"PlaceItem";4. 结束主程序。
在主程序中,我们通过调用子程序来执行抓取和放置物品的操作。
下面是子程序"GrabItem"的逻辑:1. 控制机械臂向下运动;2. 等待一段时间,使机械臂抓取物品;3. 控制机械臂向上运动。
子程序"PlaceItem"的逻辑类似,只是将机械臂的运动方向改为放置物品的位置。
通过将抓取和放置物品的操作封装成子程序,我们可以提高程序的可读性和可维护性。
7.11.3 带参数的子程序调用指令_零起步轻松学西门子S7-200 PLC技术_[共3页]
零起步轻松学西门子S7-200 PLC技术200电工技术系列主、子程序执行的过程是:当I0.0触点闭合时,调用子程序0指令执行,转入执行子程序0;在子程序0中,如果I0.1触点闭合,则将Q0.0线圈置位,然后又返回到主程序,开始执行调用子程序0指令的下一条指令(即网络2);当程序运行到网络3时,如果I0.3触点闭合,调用子程序1指令执行,转入执行子程序1;如果I0.3触点断开,则执行网络4指令,不会执行子程序1;若I0.3触点闭合,转入执行子程序1后,如果I0.5触点处于闭合状态,条件返回指令执行,提前从子程序1返回到主程序,子程序1中的网络2指令无法执行。
7.11.3 带参数的子程序调用指令子程序调用指令可以带参数,使用带参数的子程序调用指令可以扩大子程序的使用范围。
在子程序调用时,如果存在数据传递,通常要求子程序调用指令带有相应的参数。
1.参数的输入子程序调用指令默认是不带参数的,也无法在指令梯形图符号上直接输入参数,使用子程序编辑页面上方的局部变量表可给子程序调用指令设置参数。
子程序调用指令参数的设置方法是:打开STEP 7-Micro/WIN编程软件,单击程序编辑区下方的“SBR_0”标签,切换到SBR_0子程序编辑页面,在页面上方的局部变量表内按图7-39(a)所示进行输入设置,然后切换到主程序编辑页面,在该页面输入子程序调用指令,即可得到带参数的子程序调用指令梯形图,如图7-39(b)所示。
在局部变量表某项参数上右击,会弹出菜单,利用该菜单可对参数进行增删等操作。
局部变量表中参数的地址编号LB0、LB1等是自动生成的。
图7-39 子程序调用指令参数的设置2.指令参数说明子程序调用指令最多可以设置16个参数,每个参数包括变量名(又称符号)、变量类型、数据类型和注释四部分,注释部分不是必需的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调用指令
本标题讨论下列主题: 使用子程序 如何建立子程序 如何终止子程序 如何调用子程序 嵌套和递归
使用子程序 (返回顶端 )
子程序帮助您对程序进行分块。主程序中使用的指令决定具体子程序的执行状况。当主程序调用子程序并执行时, 子程序执行全部指令直至结束。然后,系统将控制返回至调用子程序网络中的主程序。 子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,您可以利用这项优势。 通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块,可以更 有效地使用PLC,因为所有的程序块可能无须执行每次扫描。 最后,如果子程序仅引用参数和局部内存,则可移动子程序。为了移动子程序,应避免使用任何全局变量/符号 (I、Q、M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址)。如果子程序无调用参数(IN、OUT或 IN_OUT)或仅在L内存中使用局部变量,您就可以导出子程序并将其导入另一个项目。 欲在程序中使用子程序,必须执行下列三项任务:
STL 欲在STL程序中插入调用,使用调用指令。
调用子程序时,保存整个逻辑堆栈,堆栈顶值被设为1,其他所有堆栈位置均设为0,控制转移至被调用的子程
序。该子程序完成后,用调用时保存的数值恢复堆栈,控制返回调用例行程序。 子程序和调用例行程序共用累加器。不因使用子程序对累加器执行保存或恢复操作。
嵌套和递归 (返回顶端 )
调用参数类型 IN
IN_OUT
OUT TEMP
说明
参数被交接至子程序。如果参数是直接地址(例如VB10),在指定位置的数值被 交接至子程序。如果参数是间接地址,(例如*AC1),位于指向位置的数值被交 接至子程序。如果参数是数据常数(16#1234)或地址(&VB100),常数或地址 数值被交接至子程序。 位于指定参数位置的数值被交接至子程序,来自子程序的结果数值被返回至相同
不使用RET指令终止子程序 (返回顶端 )
在子程序中不得使用END(结束)指令。 编辑器自动插入无条件POU终止指令(END用于OB1,RET用于SBR,RETI用于INT)。以下显示一个范例。
箭头表示指令由Micro/WIN自动处理
如何调用子程序 (返回顶端 )
插入新子程序并在该子程序的局部变量表中定义参数(如果有)后,您可在程序的另一个POU中放置一个子程 序调用。(您可以从OB1、另一个子程序或中断例行程序调用子程序;您不能从子程序本身调用子程序。) LAD、FBD
· 建立子程序
· 在子程序局部变量表中定义参数(如果有)
· 从适当的POU(从主程序或另一个子程序)调用子程序
当子程序被调用时,整个逻辑堆栈被保存,堆栈顶端被设为一,所有其他堆栈位置被设为零,控制被传送至调 用子程序。当该子程序完成时,堆栈恢复为在调用点时保留的数值,控制返回调用例行程序。
子程序和调用例行程序共用累加器。由于子程序的使用,对累加器不执行保存或恢复操作。
布尔使能位只可用于位 (布尔) 位。此说明告诉STEP 7-Micro/WIN,这个输入参 数是基于某位逻辑指令组合的使能位结果。布尔使能位输入必须在局部变量表 中最先出现,早于任何其他类型的输入。唯有输入参数可以此方式使用。下例 中的启用输入 (EN) 输入和IN1输入使用了布尔逻辑。
子程序调用举例 用于SBR_0的局部变量表
正确的网络单元格中,或将光标放在程序编辑器中的单元格上,然后双击指令树中的调用指令。 3. 编辑程序中的调用指令参数并为每个参数指定有效操作数。有效操作数为:内存地址、常数、总体
符号以及调用指令被放置的POU中的局部变量(并非被调用子程序中的局部变量)。 注释:如果您在子程序中插入一个调用指令,然后修改该子程序的局部变量表,调用指令则无效。您 必须删除无效调用,并用反映正确参数的最新调用指令代替该调用。
的位置。输入/输出参数不允许使用常数(例如16#1234)和地址(例如&VB100) 。
来自子程序的结果数值被返回至指定的参数位置。常数(例如16#1234)和地址 (例如&VB100)不允许用作输出。 未用作交接参数的任何本地内存不得用于子程序中的临时存储。
局部变量表中的数据类型域定义参数的大小和格式。下表列出了参数类型。
用参数调用子程序
子程序可能包含交接的参数。参数在子程序的局部变量表中定义。参数必须有一个符号名(最多为23个字符)、 一个变量类型和一个数据类型。可向子程序交接16个参数或从子程序交接16个参数。 局部变量表中的变量类型域定义参数是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出子 程序(OUT)。下表说明子程序的参数类型。欲增加参数条目,将光标放在您希望增加的类型的变量类型域上 (IN、IN_OUT或OUT)。单极鼠标右键,获得选项菜单。选择"插入"选项,然后选择"下一行"选项。在当前条 目的下方会显示所选类型的另一个参数条目。
如何建立子程序 (返回顶端 )
可采用下列一种方法建立子程序: · 从"编辑"菜单,选择插入(Insert)> 子程序(Subroutine) · 从"指令树",用鼠标右键点击"程序块"图标,并从弹出菜单选择插入(Insert)> 子程序(Subroutine) · 从"程序编辑器"窗口,用鼠标右键点击并从弹出菜单选择插入(Insert)> 子程序(Subroutine)
在STL编辑器中输入与以上显示相同的子程序调用的仅限STL的范例 注释:STL程序员可使用该简化的调用程序
NETWORK 1 // 该网络只能在STL编辑器中显示, // 因为被用作使能位输入的布尔参数 // 未保存至L内存。 LD I0.0 CALL SBR_0 I0.1 VB10 I1.0 &VB100 *AC1 VD200
程序编辑器从先前的POU显示更改为新子程序。程序编辑器底部会出现一个新标记,代表新子程序。
此时,您可以对新子程序编程,或者保留子程序,返回您先前作业的POU位置: · 如果您现在希望为子程序指定参数,您可以使用该子程序的局部变量表定义参数。 注释: * 请记住程序中每个POU都有一个独立的局部变量表。必须在选择该子程序标记后出现的局部变量表中为 该子程序定义局部变量。编辑局部变量表时,必须确保已选择适当的标签。 ** 每个子程序调用的最大输入/输出参数限制为16。如果您尝试下载超过该限制的程序,则会返回一则 错误信息。 · 选择子程序标记时,如果您希望为该子程序写入逻辑,在程序编辑器窗口中即可写入。 · 如果您希望对不同的POU编程,点击该POU的标签,以便在程序编辑器窗口中显示该POU。
参数数据类型
说明
布尔
该数据类型用于单位输入和输出。下例中的IN3是布尔输入。
字节、字、双字
这些数据类型分别识别1、2或4个字节不带符号的输入或输ቤተ መጻሕፍቲ ባይዱ参数。
整数、双整数
这些数据类型分别识别2或4个字节带符号的输入或输出参数。
实数
该数据类型识别单精度(4个字节)IEEE浮点数值。
字符串 使能位
此数据类型被用作字符串的四字节指针
对于LAD和FBD程序,在子程序局部变量表中为该子程序指定参数后,会生成一个定制调用方框指令。该 调用指令自动包括子程序输入和输出参数的正确数目和类型。
欲在LAD或FBD程序的POU中插入调用指令: 1. 打开程序编辑器窗口中所需的POU,滚动至您希望插入子程序调用的网络处。 2. 在指令树中,双击打开的"子程序"文件夹。您可将适当的调用指令从指令树拖放至程序编辑器中的
程序中总共可有64个子程序(CPU 226XM可有128个子程序)。在主程序中,您可以嵌套子程序(在子程序中 放置子程序调用指令),最大嵌套深度为8。您无法从中断例行程序嵌套子程序。子程序调用无法被放置在任何 从中断例行程序调用的子程序中。递归(子程序调用自身)不被禁止,但您在子程序中使用递归时应当小心。
LAD主程序
FBD主程序
用Micro/WIN从LAD/FBD图形建立的STL代码在LAD、FBD或STL视图中启用显示。 注释:Micro/WIN保留L内存(LB60-LB63)的四个上方字节,将其用于调用参数数据。
NETWORK 1 // L内存被用于保存布尔输入参数状态, // 该参数在LAD和FBD中显示为使能位输入。这样可允许 // 本网络在LAD、FBD和STL编辑器中显示。 LD I0.0 = L60.0 LD I0.1 = L63.7 LD L60.0 CALL SBR_0 L63.7 VB10 I1.0 &VB100 *AC1 VD200
用于LAD和FBD 建立子程序和定义调用参数后,STEP 7-Micro/WIN自动生成子程序调用方框指令。根据局部变量表中对该子程 序的说明,调用指令包含输入/输出参数的正确数目和类型。建立子程序后,则将出现在指令树中。欲在另一个 POU中插入子程序,从指令树中拖出子程序块 图标,放入另一个POU中。