SIEMENSPLC伺服控制
基于PLC与HMI的伺服电机运动控制系统设计与实现
基于PLC与HMI的伺服电机运动控制系统设计与实现摘要:随着计算机技术、可编程控制器及触摸屏科技的进步,现在机械制造行业几种控制系统越来越多的被应用到处理复杂事务中使其变得处理简易,在生活中,几种控制系统的应用提高了生产效率,使我们生活变得简单化,提高了机械产品的安全性和可操作性。
本文提出了选用S7-200SMARTCPUST30PLC为主控制器,发送脉冲指令作为伺服驱动器的输入信号,通过伺服驱动器实现对伺服电机前/后点动及连续运转、相对/绝对位置的精确控制以及自动查找参考点等操作,由SMART1000IEV3触摸屏搭建监控画面的思路。
关键词:伺服电机;PLC;运动控制;HMI1、系统总体方案设计1.1PLC和HMI简介1.1.1可编程里辑控制器简介可编辑逻辑控制器简称PLC,能够适应工作环境较为恶劣的条件,适用范围较广。
另外,PLC的维护较为方便,使用可靠性比较高。
CPU的运行状态是决定系统流畅的重要保证,而PLC的工作状态就是通过软件控制CPU的运行情况,当然通过硬件开关进行强制控制也是一种有效的控制手段,比如在进行测试阶段或者对系统进行检修时,硬件控制是一种较为方便的方式。
1.1.2 HMI简介随着我国工业水平提高,在生产过程中生产工艺越来越复杂,生产设备也在不断更新换代,生产控制人员不仅仅要对生产的每个流程熟知,还要对设备运行状况了解,做到设备运转的透明化。
HMI便是实现人机互通的关键技术,它实现了工作人员与机器之间的可靠连接。
在工作人员与Wincc flexible之间,HMI是实现二者链接的重要接口。
在控制器与Wincc flexible之间也同样需要这样的接口。
1.2 总体方案设计整个系统分为硬件设计、PLC程序设计、HMI与PLC通讯、系统实验调试共4部分。
硬件方面,主控制器选用S7-200SMARTCPUST30PLC,发送脉冲指令作为台达伺服驱动器(ASDA-B2-0121-B)的输入信号;通过伺服驱动器实现控制伺服电机(ASDAB2)的旋转速度和驱动丝杆滑台的移动位置[1]。
《西门子PLC高级项目应用》第1章 工作台运动控制
MC_Reset指令
指令名称:确认故障
功能:用来确认“伴随轴停止出现的运 行错误”和“组态错误”。
使用要点:Execute用上升沿触发。
MC_Halt指令
指令名称:停止轴运行指令
功能:停止所有运动并以组态的减速度停 止轴。
使用技巧:常用MC_Halt指令来停止通过 MC_MoveVelocity指令触发的轴的运行。
扩展参数—主动回原点
①输入原点开关:设置原点开关的DI输入点。
②选择电平:选择原点开关的有效电平,也就是当 轴碰到原点开关时,该原点开关对应的DI点是高电 平还是低电平。
③允许硬件限位开关处自动反转:如果轴在回原点 的一个方向上没有碰到原点,则需要使能该选项, 这样轴可以自动调头,向反方向寻找原点。
基本参数—驱动器
①硬件接口: a 选择脉冲发生器:选择在“设备视图”中已组态的PTO。 b 信号类型:分成4种(前面已介绍过)。在这里以PTO(脉冲A 和方向B)为例进行说明。 c 脉冲输出:根据实际配置,自由定义脉冲输出点;或是选择系 统默认脉冲输出点。 d 激活方向输出:是否使能方向控制位。 e 方向输出:根据实际配置,自由定义方向输出点;或是选择系 统默认方向输出点。 f 设备组态:跳转到“设备视图”,回到CPU设备属性修改组态。 ②驱动装置的使能和反馈 g 选择使能输出:该使能信号的作用是让驱动器通电 h 选择就绪输入:驱动器在接收到使能信号之后准备好开始执行 运动时会向 CPU 发送“驱动器准备就绪”(Drive ready) 信号。
扩展参数—主动回原点
⑥逼近速度:寻找原点开关的起始速度,当程序中触发了MC_Home指令后,轴立即以“逼近速度”运行来寻 找原点开关。 ⑦参考速度:最终接近原点开关的速度,当轴第一次碰到原点开关有效边沿儿后运行的速度,也就是触发了 MC_Home指令后,轴立即以“逼近速度”运行来寻找原点开关,当轴碰到原点开关的有效边沿后轴从“逼近 速度”切换到“参考速度”来最终完成原点定位。“参考速度”要小于“逼近速度”,“参考速度”和“逼近 速度”都不宜设置的过快。在可接受的范围内,设置较慢的速度值。
S7-200 SMART PLC读取1FL6伺服电机的绝对值编码器数值
8/CN/view/zh/99521584目录1概况 (3)2使用的硬件及软件 (3)2.1硬件2.2软件3实现方法 (3)3.1概述3.2实现步骤3.3接线3.4 PLC组态及编程4参考资料 (9)1 概况SINAMICS V90是西门子推出的一款小型、高效便捷的伺服系统。
它作为 SINAMICS 驱动系列家族的新成员,与SIMOTICS S-1FL6 伺服电机完美结合,组成最佳的伺服驱动系统,实现位置控制、速度控制和扭矩控制。
目前1FL6电机有两种编码器类型,即增量编码器类型及绝对值编码器类型。
西门子的小型自动化S7-200 SMART PLC可以控制V90驱动器,本文介绍如何实现SMART PLC读取1FL6伺服电机的绝对值编码器数值。
关于如何实现SMART PLC控制V90实现定位控制请参见《SIMATIC S7-200 SMART 系统手册》及《S7-200 SMART连接SINAMICS V90 实现位置控制》。
2使用的硬件及软件2.1硬件序号设备名称 订货号1 PS207电源24 V DC/2.5 A6EP1 332-1LA00CPUST60 6ES7288-1ST60-0AA0 S7-200SMART2 SIMATIC3 V90驱动器6SL3210-5FE10-4UA04 伺服电机1FL6042-1AF61-0LG15 V90 动力电缆(含接头)6FX3002-5CL01-1AD06 伺服电机编码器电缆6FX3002-2DB10-1AD0 (含接头,用于绝对值编码器)电缆线)6SL3260-4NA00-1VB0针接头及1m7 V90控制信号电缆(含508 SIMATIC Field PG M36ES7715-1BB23-0AA1USB电缆9 Mini2.2软件序号说明1 Window 7 旗舰版32位2 STEP 7-Micro/WIN SMART 编程软件3 SINAMICS_V-ASSISTANT3实现方法3.1概述如图1所示,使用PG通过标准mini USB电缆与V90连接,打开SINAMICS V—ASSITANT 软件设置驱动器的参数。
PLC控制伺服电机实例分析
PLC控制伺服电机实例分析PLC控制伺服电机是工业自动化领域中常见的一种应用,通过PLC控制器来实现对伺服电机的精准控制,使得生产线的运作更加高效和稳定。
在本文中,将以一个实际的应用案例来介绍PLC控制伺服电机的工作原理和实现过程。
一、系统结构本系统采用的是西门子PLC控制器和西门子伺服电机,系统主要由PLC控制器、伺服驱动器和伺服电机组成。
PLC控制器负责接收外部信号,进行逻辑控制,并向伺服驱动器发送控制指令,伺服驱动器则接收这些指令并控制伺服电机的运动。
二、PLC编程在PLC编程中,需要定义输入输出引脚、变量和逻辑控制程序。
首先需要定义输入引脚,用于接收外部传感器信号,比如光电传感器、开关等;然后定义输出引脚,用于控制伺服驱动器,实现对伺服电机的启停和速度调节;接着定义一些变量,用于存储中间状态和控制参数;最后编写逻辑控制程序,根据输入信号和变量状态来控制伺服电机的运动。
三、伺服电机控制伺服电机的控制主要包括位置控制、速度控制和力矩控制。
在PLC编程中,可以通过设定目标位置、目标速度和目标力矩来实现对伺服电机的控制。
通过调节PID控制器的参数,可以实现对伺服电机的精准控制。
四、系统调试在系统调试中,需要先进行参数设置和校准,确保伺服电机的运动符合预期。
然后通过PLC编程调试工具,监控伺服电机的运动状态和控制指令,发现问题并及时修复。
最后对整个系统进行测试,验证其性能和稳定性。
综上所述,PLC控制伺服电机是一种高效、稳定的控制方式,适用于各种需要精准位置和速度控制的场合。
通过合理的PLC编程和参数设置,可以实现对伺服电机的精确控制,提高生产效率和品质。
在实际应用中,需要根据具体情况进行调整和优化,确保系统的稳定性和可靠性。
s7-200控制伺服电机总结
s7-200控制伺服电机总结S7-200PLC具有脉冲输出功能,在运动控制系统中,伺服电机和步进电机是很重要的精确定位装置,而控制伺服电机和步进电机需要使用脉冲输出。
S7-200系列PLC可以输出20--100KHz的脉冲。
使用PTO和PWM指令可以输出普通脉冲和脉宽调制输出。
通过smb66-75,smb166-175来控制Q0.0的输出,通过smb76-85,smb176-185来控制Q0.1的脉冲输出。
控制伺服电机伺服电机是运动控制中一个很重要的器件,通过它可以进行精确的位置控制。
它一般带有编码器,通过高速计数功能,中断功能和脉冲输出功能,构成一个闭环系统,来进行精确的位置控制。
PLC的脉冲输出由于PLC在进行高速输出时需要使用晶体管输出。
当将高速输出点作为普通输出而带电感性负载时,例如电磁阀,继电器线圈等,一定要注意,在负载端加保护,例如并联二极管等。
以保护输出点。
心得二:步进电机的控制方法我带队参加《2021年全国职业院校技能大赛自动线的安装与调试》项目,我院选手和其他院校的三位选手组成了天津代表队,我院选手所在队获得了《2021年全国职业院校技能大赛自动线的安装与调试》项目二等奖,为天津市代表队争得了荣誉,也为我院争得了荣誉。
以下是我这个作为教练参加大赛的心得二:步进电机的控制方法《2021年全国职业院校技能大赛自动线的安装与调试》项目的主要内容包括如气动控制技术、机械技术(机械传动、机械连接等)、传感器应用技术、PLC控制和组网、步进电机位置控制和变频器技术等。
但其中最为重要的就是PLC方面的知识,而PLC中最重要就是组网和步进电机的位置控制。
一、 S7-200 PLC 的脉冲输出功能 1、概述S7-200 有两个置PTO/PWM 发生器,用以建立高速脉冲串(PTO)或脉宽调节(PWM)信号波形。
当组态一个输出为PTO 操作时,生成一个50%占空比脉冲串用于步进电机或伺服电机的速度和位置的开环控制。
PLC控制伺服电机应用实例
PLC控制伺服电机应用实例,写出组成整个系统的PLC模块及外围器件,并附相关程序。
PLC品牌不限。
以松下FP1系列PLC和A4系列伺服驱动为例,编制控制伺服电机定长正、反旋转的PLC程序并设计外围接线图,此方案不采用松下的位置控制模块FPG--PP11\12\21\22等,而是用晶体管输出式的PLC,让其特定输出点给出位置指令脉冲串,直接发送到伺服输入端,此时松下A4伺服工作在位置模式。
在PLC程序中设定伺服电机旋转速度,单位为(rpm),设伺服电机设定为1000个脉冲转一圈。
PLC输出脉冲频率=(速度设定值/6)*100(HZ)。
假设该伺服系统的驱动直线定位精度为±0.1mm,伺服电机每转一圈滚珠丝杠副移动10mm,伺服电机转一圈需要的脉冲数为1000,故该系统的脉冲当量或者说驱动分辨率为0.01mm(一个丝);PLC输出脉冲数=长度设定值*10。
以上的结论是在伺服电机参数设定完的基础上得出的。
也就是说,在计算PLC发出脉冲频率与脉冲前,先根据机械条件,综合考虑精度与速度要求设定好伺服电机的电子齿轮比!大致过程如下:机械机构确定后,伺服电机转动一圈的行走长度已经固定(如上面所说的10mm),设计要求的定位精度为0.1mm(10个丝)。
为了保证此精度,一般情况下是让一个脉冲的行走长度低于0.1mm,如设定一个脉冲的行走长度为如上所述的0.01mm,于是电机转一圈所需要脉冲数即为1000个脉冲。
此种设定当电机速度要求为1200转/分时,PLC应该发出的脉冲频率为20K。
松下FP1---40T 的PLC的CPU本体可以发脉冲频率为50KHz,完全可以满足要求。
如果电机转动一圈为100mm,设定一个脉冲行走仍然是0.01mm,电机转一圈所需要脉冲数即为10000个脉冲,电机速度为1200转时所需要脉冲频率就是200K。
PLC的CPU输出点工作频率就不够了。
需要位置控制专用模块等方式。
有了以上频率与脉冲数的算法就只需应用PLC的相应脉冲指令发出脉冲即可实现控制了。
基于S7-1200 PLC的伺服电机运动控制系统设计
4结语在大数据时代,信息安全要求不断提高,网络规模飞速扩展,使安全事件的监控和分析变得尤为重要。
本文通过构建安全防护日志管理系统,增强了安全监控的实时性,提升了网络安全感知能力。
未来还将收集应用系统、服务器日志等信息,通过更多维度的关联分析,结合科学算法,进一步完善分析手段和风险预警能力,为保障运营商网络信息安全提供支持。
[参考文献][1]饶琛琳.ELK Stack 权威指南[M].2版.北京:机械工业出版社,2017.[2]段娟.基于Web 应用的安全日志审计系统研究与设计[J].信息网络安全,2014(10):70-76.[3]冯立.基于粗糙集理论的安全日志分析模型[J].计算机工程,2002,28(11):164-166,182.[4]李晨光.UNIX/Linux 网络日志分析与流量监控[M].北京:机械工业出版社,2014.[5]杨秋翔.基于时间序列的多源日志安全数据挖掘仿真[J].计算机仿真,2019,36(2):297-301.收稿日期:2019-09-29作者简介:张延盛(1986—),男,江苏南京人,硕士研究生,工程师,研究方向:数据库与信息系统。
基于S7-1200PLC 的伺服电机运动控制系统设计李虹静(华中科技大学工程实训中心,湖北武汉430074)摘要:S7-1200作为西门子公司一款紧凑型PLC ,具有稳定性好、可靠性强的特点,同时还具备强大的运动控制功能。
现首先介绍了伺服电机运动控制系统的设计要求,然后针对台达B2系列伺服器工作特性,从台达B2系列伺服驱动器与西门子S7-1200PLC 的硬件设计入手,阐述了B2系列伺服驱动器参数调节的原理和步骤,最后通过在TIA 博途V15软件中对运动轴进行组态和编程,并利用S7-1200PLC 的PTO 功能实现了精准的运动控制。
关键词:S7-1200PLC ;伺服电机;运动控制;PTO1伺服电机运动控制系统概述1.1运动控制模型本伺服电机运动控制系统采用如图1所示的运动控制模型搭建,其中伺服电机由台达B2系列伺服器驱动,通过调节伺服驱动器参数以及编写PLC 程序,可实现包括距离控制、旋转角度控制、定位控制、路径控制以及闭环控制在内的多种运动控制实验[1]。
s7-200控制伺服电机总结
位装置,而控制伺服电机和步进电机需要使用脉冲输出。
S7-200系列PLC可以输出20--100KHz的脉冲。
使用PTO和PWM指令可以输出普通脉冲和脉宽调制输出。
通过smb66-75,smb166-175来控制Q0.0的输出,通过smb76-85,smb176-185来控制Q0.1的脉冲输出。
控制伺服电机伺服电机是运动控制中一个很重要的器件,通过它可以进行精确的位置控制。
它一般带有编码器,通过高速计数功能,中断功能和脉冲输出功能,构成一个闭环系统,来进行精确的位置控制。
PLC的脉冲输出由于PLC在进行高速输出时需要使用晶体管输出。
当将高速输出点作为普通输出而带电感性负载时,例如电磁阀,继电器线圈等,一定要注意,在负载端加保护,例如并联二极管等。
以保护输出点。
心得二:步进电机的控制方法我带队参加《2008年全国职业院校技能大赛自动线的安装与调试》项目,我院选手和其他院校的三位选手组成了天津代表队,我院选手所在队获得了《2008年全国职业院校技能大赛自动线的安装与调试》项目二等奖,为天津市代表队争得了荣誉,也为我院争得了荣誉。
以下是我这个作为教练参加大赛的心得二:步进电机的控制方法《2008年全国职业院校技能大赛自动线的安装与调试》项目的主要内容包括如气动控制技术、机械技术(机械传动、机械连接等)、传感器应用技术、PLC控制和组网、步进电机位置控制和变频器技术等。
但其中最为重要的就是PLC方面的知识,而PLC中最重要就是组网和步进电机的位置控制。
一、 S7-200 PLC 的脉冲输出功能1、概述S7-200 有两个置PTO/PWM 发生器,用以建立高速脉冲串(PTO)或脉宽调节(PWM)信号波形。
当组态一个输出为PTO 操作时,生成一个50%占空比脉冲串用于步进电机或伺服电机的速度和位置的开环控制。
置PTO 功能提供了脉冲串输出,脉冲周期和数量可由用户控制。
但应用程序必须通过PLC内置I/O 提供方向和限位控制。
PNP-松下伺服连西门子PLC接线说明示例
伺服输入信号:说明书上伺服输入信号端口都是默认与NPN输出的PLC接法,NPN输出就是伺服与PLC公共端24V+,PLC输出信号开关判断是否要与0V导通进行逻辑输出所以7脚COM公共端接的24V+,举例29脚SRV-ON使能信号接PLC的输出,31脚A-CLR也是一样的,由PLC输出控制那么如果PLC是PNP的输出,那就反着来PNP输出就是公共端0V,输出信号开关判断是否要与24V+导通进行逻辑输出所以7脚COM公共端接的0V,29脚SRV-ON使能信号接PLC的输出,31脚A-CLR也是一样的,由PLC输出控制输出信号:伺服默认的输出信号也是NPN输出接法,伺服输出信号开关判断是否要与0V导通进行逻辑输出,控制PLC输入触点负载通断举例ALM-37,36引脚:37接PLC的输入点,36接0V,伺服控制37与36的通断从而控制PLC输入触点负载的通断如果是要求伺服是PNP的输出,一样是反着来举例ALM-37,36引脚:37接24V+,36接PLC的输入点,伺服控制37与36的通断从而控制PLC输入触点负载的通断脉冲输入信号也是一样:支持12~24V脉冲,默认PLC是NPN输出如果你是24V的脉冲,建议用1,2,4,6端口(下面的②)因为1,2端口内置限流电阻,不用你PLC输出接了如果你用3,4,5,6,那么就需要外接限流电阻,电阻规格见①以脉冲+方向的NPN输出脉冲举例就是:1,2接24V+;4接脉冲,6接方向以脉冲+方向的PNP输出脉冲举例就是:1接脉冲,2接方向;4,6接0V松下伺服问题1)我司选用的PLC是西门子,所以是PNP形式,而松下伺服原有的电气接线原理图是NPN 形式,请问如何接线才能达到我使用的要求,我所用的50针点,只用到10针,分别是:1,2,4,6,7,29,31,41,36,37。
脉冲串接1脚,方向接2脚,4,6,7脚接0V,29脚接PLC输出点(伺服使能)或接在+24V,31接PLC输出(伺服警报清除),37脚接+24V,36脚接至PLC输入点(伺服报警)关于抱闸:10,1111接继电器控制脚,继电器另一端接24V+10接24V-,这样就形成一个回路,继电器再控制抱闸的通断。
德国西门子伺服简明手册V2.0
第6页
为了避免编码器干扰报警,编码器电缆必须屏蔽。 屏蔽线网两端分别焊在图上的位置。
编码器接口 - 电机侧
编码器接口 - 驱动侧
为了避免编码器意外报警,在编码器插头插上时, 务必插头上的两颗螺丝用十字起紧固。
模拟量输 入/输出
50 针 MDR 连接器正面
插头背面管脚
针脚号 信号
说明
针脚号 信号
说明
1,2, 通过脉冲输入实现位置设定值。不包括 5 V 高 36,3 通过脉冲输入实现位置设定值。24 V 单端脉冲输
26,2 速差分脉冲输入(RS485),最大频率00 kHz
6
DI2
数字量输入 2
30 DO1
数字量输出 1
7
DI3
数字量输入 3
31 DO2
数字量输出 2
8
DI4
数字量输入 4
32 DO3
数字量输出 3
9
DI5
10
DI6
11
DI7
12
DI8
13
DI9
18
P12AI
19
AI1+
20
AI1-
数字量输入 5
33
数字量输入 6
34
数字量输入 7
35
数字量输入 8
49
绝对编码器负向时钟信号
4
Biss_ClockP
绝对编码器正向时钟信号
5
P5V
编码器电源,+5V
6
P5V
编码器电源,+5V
7
M
S7-1200调试V90伺服
常问问题 11/2016S7-1200通过FB284实现V90PN的EPOS控制S7-1200、V90PN、FB284、EPOShttps:///cs/cn/zh/view/109742969C o p y r i g h t S i e m e n s A G C o p y r i g h t y e a r A l l r i g h t s r e s e r v e d目录1 概述.................................................................................................................. 32 SINA_POS(FB284)功能块管脚介绍 .................................................................. 4 3SINA_POS 功能块的功能实现 .......................................................................... 7 3.1 概述 ................................................................................................... 7 3.2 SINA_POS(FB284)运行模式 .............................................................. 8 3.2.1 运行条件 ............................................................................................ 8 3.2.2 绝对定位运行模式 .............................................................................. 8 3.2.3 相对定位运行模式 .............................................................................. 9 3.2.4 连续运行模式(Setup mode) .............................................................. 10 3.2.5 回零 ................................................................................................. 11 3.2.6 设置零点位置 ................................................................................... 12 3.2.7 运行程序块 ...................................................................................... 12 3.2.8 点动(Jog) ......................................................................................... 13 3.2.9 点动增量(Jog) .................................................................................. 14 3.2.10 基于ModePos 值的运行模式切换说明 (15)4项目配置......................................................................................................... 15 4.1 使用的软、硬件 ............................................................................... 15 4.2 S7-1200项目配置步骤 ...................................................................... 15 4.3 V90 PN 项目配置步骤 (21)C o p y r i g h t S i e m e n s A G C o p y r i g h t y e a r A l l r i g h t s r e s e r v e d1 概述S7-1200可以通过PROFINET 通讯连接SINMICS V90伺服驱动器,将V90驱动器的控制模式设置为“基本位置控制(EPOS)”,PLC 通过111报文及TIA Portal 提供的驱动库中的功能块FB284可实现V90的EPOS 基本定位控制,控制系统连接如图1-1所示。
西 门子V90伺服电气图纸及S7-1200 PLC程序(FB284控制V90)
校对.+COVER/1W+日期E INVT 目录 : =E+COVER/1 - =E+PTL/2+MEC/502017/4/24=编辑者栏 X:一自动生成的页被手工修改增补页字段目录日期页描述F06_001X 页=E+COVER/1XWUTAIFANG 封页/COVER 2016/5/19=E+INVT/1W 目录 : =E+COVER/1 - =E+PTL/22017/4/24=E+MEC/50W 伺服回路2017/4/24=E+MEC/56W 激光位移传感器回路2017/4/24=E+MEC/60W PLC LAYOUT 2017/4/24=E+MEC/65W NET VIEW 2017/4/24=E+MEC/402W 电柜安装板布局2017/4/24=E+MEC/405W 电柜标牌2016/12/5=E+TER/430W 端子图表 =E+MEC-X12017/4/24=E+PTL/2W 部件列表 : -2017/4/24校对.+TER/430W+日期E PTL 部件列表 : - 2017/4/24=类型号供应商部件列表F01_001数量名称设备标识符部件编号0+MEC-56L10+MEC-M10+MEC-50M16ES7214-1AG31-0XB0SIE 1SIE.6ES7214-1AG31-0XB0+MEC-60PLC1IC65N-C4A/2P SCHNEIDER 1SCH.IC65N-4A 2极空开 4A +MEC-50QF16SL3210-5FB10-2UF01SIE.6SL3210-5FB10-2UF0_2+MEC-50SV10+MEC-56U10+MEC-65U1程序块Main [OB1]Main 属性常规名称Main 编号1类型OB 语言LAD 编号自动信息标题"Main Program Sweep (Cy‐cle)"作者注释系列版本0.1用户自定义 ID名称数据类型默认值注释Input Initial_Call BoolInitial call of this OB Remanence Bool=True, if remanent data are available Temp tenpBool Constant网络 1:"常 OFF"%M0.0"常 OFF"%M0.0"常 OFF"%M0.0网络 2:"常 ON"%M0.1"常 ON"%M0.1"常 ON"%M0.1网络 3:"FC1_SVER"%FC1EN ENO程序块FC1_SVER [FC1]FC1_SVER 属性常规名称FC1_SVER 编号1类型FC 语言LAD 编号自动信息标题作者注释系列版本0.1用户自定义 ID名称数据类型默认值注释InputOutputInOutTempMode posInt SWBool SW-产品类型BBool SW-产品类型ABool POSITIONDInt ConstantReturnFC1_SVER Void网络 1:寻找参考点MOVE "伺服JOG 运行模式"%M100.0"伺服轴1寻参OK"%M20.12#"Mode pos"ENIN ENO OUT1网络 2:JOG 模 式MOVE "伺服JOG 运行模式"%M100.07#"Mode pos"ENIN ENO OUT1网络 3:MOVE "伺服轴1寻参OK"%M20.1"伺服JOG 运行模式"%M100.04#"Mode pos"ENIN ENO OUT1网络 4:Int>TON "上位允许检测"%I300.1#"Mode pos""伺服允许"%M10.0"伺服轴1寻参OK"%M20.1"伺服JOG 运行模式"%M100.0"检测OK 旋转伺服停止"%M79.0"IEC_Timer_0_DB"%DB1T#1S ...Time IN PT Q ET 网络 5:伺服启动"伺服允许"%M10.0"IEC_Timer_0_DB".Q "伺服启动"%M10.1"伺服轴1寻参OK"%M20.1网络 6:给定伺服位置1 位MOVE "伺服启动"%M10.1"工件类型2"%M77.1"工件类型1"%M77.01000#POSITIONENIN ENO OUT1网络 7:给定伺服位置2 位置值MOVE "伺服启动"%M10.1"工件类型1"%M77.0"工件类型2"%M77.12000#POSITIONENIN ENO OUT1网络 8:MOVE "检测OK 旋转伺服停止"%M79.00#POSITIONENIN ENO OUT1网络 9: 伺服off1 off2 off3 参考FB284说明书参数针脚分配ConfigEPOS"常 ON"%M0.1"Tag_14"%M53.0"Tag_15"%M53.1"Tag_8"%M53.2网络 10: 伺服原位信号 参考FB284说明书参数针脚分配ConfigEPOS"伺服原位开关"%I0.1"Tag_16"%M53.6网络 11:伺服限位 参考FB284说明书参数针脚分配ConfigEPOS"伺服限位+"%I0.2"伺服限位"%M51.6"伺服限位-"%I0.3网络 12:ConfigEPOS MD50 =MB50 MB51 MB52 MB53"SINA_POS"%FB284"SINA_POS_DB"%DB284#"Mode pos"110"伺服JOG+"%M40.1"伺服JOG-"%M40.2"伺服故障复位"%I300.6"伺服启动"%M10.1#POSITION1000100100100"Tag_13"%MD50280280............"伺服故障"%M78.0..."伺服位置到达"%M20.0"伺服轴1寻参OK"%M20.1"Tag_6"%MD64"Tag_3"%MD60.................."伺服准备好"%M203.0"伺服轴1寻参OK"%M20.1EnableAxisENModePos CancelTraversin gIntermediateSt opPositiveNegativeJog1Jog2FlyRef AckError ExecuteMode Position Velocity OverV OverAcc OverDec ConfigEPos HWIDSTW HWIDZSW ENO Error Status DiagID AxisEnabled AxisError AxisWarn AxisPosOkAxisRef ActVelocity ActPosition ActMode Lockout EPosZSW1EPosZSW2ActWarn ActFault程序块SINA_POS [FB284]SINA_POS 属性常规名称SINA_POS编号284类型FB语言SCL编号自动信息标题作者DRVDPS7注释系列DRIVES 版本 4.6用户自定义 ID SINA_POS名称数据类型默认值保持可从HMI/OPCUA 访问从HMI/OPCUA可写在 HMI 工程组态中可见设定值监控注释InputModePos Int0非保持True True True False EnableAxis Bool0非保持True True True False CancelTraversing Bool1非保持True True True False IntermediateStop Bool1非保持True True True False Positive Bool0非保持True True True False Negative Bool0非保持True True True False Jog1Bool0非保持True True True False Jog2Bool0非保持True True True False FlyRef Bool0非保持True True True False AckError Bool0非保持True True True False ExecuteMode Bool0非保持True True True False Position DInt0非保持True True True False Velocity DInt0非保持True True True False OverV Int100非保持True True True False OverAcc Int100非保持True True True False OverDec Int100非保持True True True False ConfigEPos DWord16#0000_0003非保持True True True False HWIDSTW HW_IO0非保持True True True False HWIDZSW HW_IO0非保持True True True False OutputError Bool0非保持True True True False Status Word0非保持True True True False DiagID Word0非保持True True True False AxisEnabled Bool0非保持True True True False AxisError Bool0非保持True True True False AxisWarn Bool0非保持True True True False AxisPosOk Bool0非保持True True True False AxisRef Bool0非保持True True True False ActVelocity DInt0非保持True True True False ActPosition DInt0非保持True True True False ActMode Int0非保持True True True False Lockout Bool0非保持True True True False EPosZSW1Word0非保持True True True False EPosZSW2Word0非保持True True True False ActWarn Word0非保持True True True False ActFault Word0非保持True True True False InOutStaticsbOff1Edge Bool0非保持True True True False sbOff1Bool0非保持True True True False sbExecuteEdge Bool0非保持True True True False sbExecute Bool0非保持True True True False sbRefTypEdge Bool0非保持True True True False sbRefTyp Bool0非保持True True True False sbMdiStart Bool0非保持True True True False sbMdiStartEdge Bool0非保持True True True False sbRefStart Bool0非保持True True True False sbJogInc Bool0非保持True True True False sbReady Bool0非保持True True True False sbIOp Bool0非保持True True True False sbAccel Bool0非保持True True True False sbDecel Bool0非保持True True True False sbAlarm Bool0非保持True True True False sbFault Bool0非保持True True True False sbFWD Bool0非保持True True True False sbBWD Bool0非保持True True True False sbBusy Bool0非保持True True True False swStatus Word16#0000非保持True True True False swEPosZSW1Word16#0000非保持True True True False swEPosZSW2Word16#0000非保持True True True False名称数据类型默认值保持可从HMI/OPCUA 访问从HMI/OPCUA可写在 HMI 工程组态中可见设定值监控注释siJogIncCyc Int0非保持True True True FalsesiMdiStartCyc Int0非保持True True True FalsesiRefActRetry Int0非保持True True True FalsesiModePos Int0非保持True True True FalsesiModePosMax Int14非保持True True True FalsesiCycWait Int5非保持True True True FalsesiRetryMax Int15非保持True True True FalsesbModePos Bool0非保持True True True FalsesxSendBuf Struct非保持True True True FalseSTW1Word WORD#16#0000非保持True True True FalseEPosSTW1Word WORD#16#0000非保持True True True FalseEPosSTW2Word WORD#16#0000非保持True True True FalseSTW2Word WORD#16#0000非保持True True True FalseOverrideV Word WORD#16#0000非保持True True True FalsePosition DWord DWORD#16#0000_0000非保持True True True FalseVelocity DWord DWORD#16#0000_0000非保持True True True FalseOverrideA Word WORD#16#0000非保持True True True FalseOverrideD Word WORD#16#0000非保持True True True FalseReserve Word WORD#16#0000非保持True True True FalsesxRecvBuf Struct非保持True True True FalseZSW1Word WORD#16#0000非保持True True True FalseEPosZSW1Word WORD#16#0000非保持True True True FalseEPosZSW2Word WORD#16#0000非保持True True True FalseZSW2Word WORD#16#0000非保持True True True FalseNotUsed Word WORD#16#0000非保持True True True FalsePosition DWord DWORD#16#0000_0000非保持True True True FalseVelocity DWord DWORD#16#0000_0000非保持True True True FalseErrNr Word WORD#16#0000非保持True True True FalseWarnNr Word WORD#16#0000非保持True True True FalseReserve Word WORD#16#0000非保持True True True False TemppiRetSFC IntpiCount IntswSendBuf Array[0..11] ofWordswSendBuf[0]WordswSendBuf[1]WordswSendBuf[2]WordswSendBuf[3]WordswSendBuf[4]WordswSendBuf[5]WordswSendBuf[6]WordswSendBuf[7]WordswSendBuf[8]WordswSendBuf[9]WordswSendBuf[10]WordswSendBuf[11]WordswRecvBuf Array[0..11] ofWordswRecvBuf[0]WordswRecvBuf[1]WordswRecvBuf[2]WordswRecvBuf[3]WordswRecvBuf[4]WordswRecvBuf[5]WordswRecvBuf[6]WordswRecvBuf[7]WordswRecvBuf[8]WordswRecvBuf[9]WordswRecvBuf[10]WordswRecvBuf[11]WordConstant0001// zyklische Kommunikation (PZD-Daten)0002// zyklische Kommunikation zwischen dem SINAMICS S120 und der Steuerung. Wird in der HW-Config Std.TLG 111 projek-tiert,0003// so werden in jedem Bus-Zyklus 12 PZD-Wörter hin und wieder zurück übertragen.0004// Die Parametrierung dieser Wörter sind der SINAMICS-Dokumentation zu entnehmen. Entsprechend müssen dann in dem zugeordneten DB die Bits0005// und Bytes versorgt werden. Es besteht aber auch die Möglichkeit die Rahmentypen frei zu0006// projektieren00070008// Betriebsart ermitteln0009IF #ModePos > #siModePosMax THEN00100013 #swStatus := 16#8202;0014ELSIF #ModePos < 1THEN00150016 #sbModePos := FALSE;0017 #Error := True;0018 #swStatus := 16#8202;0019ELSE0020// Betriebsartenwechsel ist nur möglich, wenn die Achse nicht beschleunigt oder nicht verzögert 0021// und die Geschwindigkeit Null ist0022IF NOT #sbFWD AND NOT #sbBWD AND NOT #sbAccel AND NOT #sbDecel THEN00230024 #sbModePos := TRUE;0025 #siModePos := #ModePos;00260027// Fehler wieder zurücknehmen, wenn er mal ausgelöst wurde0028IF #swStatus = 16#8202THEN0029 #swStatus := 16#7002;0030 #Error := False;0031END_IF;0032END_IF;0033END_IF;00340035// Überprüfung der analogen Eingabewerte, ob sie innerhalb des möglichen Bereiches liegen0036// Geschwindigkeitsoverride (0% - 199%, 100% => W#16#4000)0037IF (#OverV < 0) OR (#OverV > 199) THEN0038 #swStatus := 16#8203;0039 #Error := True;0040ELSE0041// Geschwindigkeitsoverride in den Sendepuffer eintragen0042 #sxSendBuf.OverrideV := INT_TO_WORD(REAL_TO_INT(16384.0 * (INT_TO_REAL(#OverV) / 100.0)));0043END_IF;00440045// Beschleunigungsoverride (0% - 100%, 100% => W#16#4000)0046IF (#OverAcc < 0) OR (#OverAcc > 100) THEN0047 #swStatus := 16#8203;0048 #Error := True;0049ELSE0050// Beschleunigungsoverride in den Sendepuffer eintragen0051 #sxSendBuf.OverrideA := INT_TO_WORD(REAL_TO_INT(16384.0 * (INT_TO_REAL(#OverAcc) / 100.0))); 0052END_IF;00530054// Verzögerungsoverride (0% - 100%, 100% => W#16#4000)0055IF (#OverDec < 0) OR (#OverDec > 100) THEN0056 #swStatus := 16#8203;0057 #Error := True;0058ELSE0059// Verzögerungsoverride in den Sendepuffer eintragen0060 #sxSendBuf.OverrideD := INT_TO_WORD(REAL_TO_INT(16384.0 * (INT_TO_REAL(#OverDec) / 100.0))); 0061END_IF;00620063// Fehler wieder zurücknehmen, wenn er mal ausgelöst wurde0064IF NOT (#OverV < 0) AND NOT (#OverV > 199) AND NOT (#OverAcc < 0) AND NOT (#OverAcc > 100) AND 0065 NOT (#OverDec < 0) AND NOT (#OverDec > 100) THEN0066IF #swStatus = 16#8203THEN0067 #swStatus := 16#7002;0068 #Error := False;0069END_IF;0070END_IF;00710072// Positionssollwert0073// Positionssollwert in den Sendepuffer eintragen0074 #sxSendBuf.Position := DINT_TO_DWORD(#Position);00750076// Geschwindigkeitssollwert (Begrenzung / Überwachung0077// Geschwindigkeitssollwert in den Sendepuffer eintragen0078 #sxSendBuf.Velocity := DINT_TO_DWORD(#Velocity);00790080// Einschalten bzw. Ausschalten des Antriebes erkennen0081IF #EnableAxis AND NOT #sbOff1Edge AND NOT #sbBusy AND #sbModePos THEN0082 #sbOff1 := True;0083END_IF;0084// Einschalten bzw. Ausschalten des Antriebes Flanke merken0085 #sbOff1Edge := #EnableAxis AND NOT #sbBusy;00860087// Einschaltflankenmerker wieder zurücksetzen0088IF NOT #EnableAxis THEN0089 #sbOff1 := False;0090END_IF;00910092// Fliegendes Referenzieren aktivieren erkennen0093IF #FlyRef AND NOT #sbRefTypEdge THEN0094 #sbRefTyp := True;0095END_IF;0096// Fliegendes Referenzieren aktivieren Flanke merken0097 #sbRefTypEdge := #FlyRef;00980099// Fliegendes Referenzieren Flankenmerker wieder zurücksetzen0101 #sbRefTyp := False;0102 #siRefTypCyc := 0;0103END_IF;01040105// Verfahrauftrag aktivieren erkennen0106IF #ExecuteMode AND NOT #sbExecuteEdge THEN0107 #sbExecute := True;0108END_IF;0109// Verfahrauftrag aktivieren Flanke merken0110 #sbExecuteEdge := #ExecuteMode;01110112// Verfahrauftragflankenmerker wieder zurücksetzen0113IF NOT #ExecuteMode THEN0114 #sbExecute := False;0115 #siExecuteCyc := 0;0116END_IF;01170118// Betriebsart MDI / Sollwertdirektvorgabe Flanke merken0119(*IF #sxSendBuf.sxEPosSTW1.MdiStart AND NOT #sbMdiStartEdge THEN0120 #sbMdiStart := True;0121 END_IF;0122 // Betriebsart MDI / Sollwertdirektvorgabe Flanke merken0123 #sbMdiStartEdge := #sxSendBuf.sxEPosSTW1.MdiStart AND NOT #Busy;*)01240125// Verfahrauftragflankenmerker wieder zurücksetzen0126(*IF NOT #sxSendBuf.sxEPosSTW1.MdiStart THEN0127 #sbMdiStart := False;0128 #siMdiStartCyc := 0;0129 END_IF;*)01300131IF #sxSendBuf.EPosSTW1.%X15 AND NOT #sbMdiStartEdge THEN0132 #sbMdiStart := True;0133END_IF;0134// Betriebsart MDI / Sollwertdirektvorgabe Flanke merken0135 #sbMdiStartEdge := #sxSendBuf.EPosSTW1.%X15 AND NOT #sbBusy;01360137// Verfahrauftragflankenmerker wieder zurücksetzen0138IF NOT #sxSendBuf.EPosSTW1.%X15 THEN0139 #sbMdiStart := False;0140 #siMdiStartCyc := 0;0141END_IF;01420143// Schreibdaten zusammenstellen0144// Steuerword STW1 für alle Betriebsart aufbereiten0145(*#sxSendBuf.sxSTW1.RejTrvTsk := #RejTrvTsk;0146 #sxSendBuf.sxSTW1.IntMStop := #IntMStop;0147 #sxSendBuf.sxSTW1.AckFault := #AckFlt;*)01480149 #sxSendBuf.STW1.%X4 := #CancelTraversing;0150 #sxSendBuf.STW1.%X5 := #IntermediateStop;0151 #sxSendBuf.STW1.%X7 := #AckError;0152 #sxSendBuf.STW1.%X1 := TRUE;0153 #sxSendBuf.STW1.%X2 := TRUE;0154 #sxSendBuf.STW1.%X3 := TRUE;0155 #sxSendBuf.STW1.%X10 := TRUE;01560157// Hauptbetriebsart "Positionieren / manueller Sollwertvorgabe (MDI)"0158// Betriebsart "Positionieren Relativ positiv" oder "Positionieren Relativ negativ" 0159IF (#siModePos = 1AND #sbModePos) THEN01600161// Antrieb einschalten0162//#sxSendBuf.sxSTW1.Off1 := #sbOff1;0163 #sxSendBuf.STW1.%X0 := #sbOff1;01640165// nicht verwendete Signale für den 1. Schritt und eventuell weitere Schritte 0166(*#sxSendBuf.sxSTW1.Jog1 := False;0167 #sxSendBuf.sxSTW1.Jog2 := False;0168 #sxSendBuf.sxEPosSTW1.MdiTyp := False;0169 #sxSendBuf.sxEPosSTW1.MdiPos := False;0170 #sxSendBuf.sxEPosSTW1.MdiNeg := False;0171 #sxSendBuf.sxEPosSTW1.MdiSetup := False;0172 #sxSendBuf.sxEPosSTW2.SetRefPt := False;0173 #sxSendBuf.sxEPosSTW2.JogInc := False;0174 #sxSendBuf.sxEPosSTW2.RefStDi := False;0175 #sxSendBuf.sxSTW1.RefStart := False;0176 #sxSendBuf.sxEPosSTW2.RefTyp := False;0177 #sxSendBuf.sxEPosSTW1.MdiStart := False;*)0178 #sxSendBuf.STW1.%X8 := False;0179 #sxSendBuf.STW1.%X9 := False;0180 #sxSendBuf.EPosSTW1.%X8 := False;0181 #sxSendBuf.EPosSTW1.%X9 := False;0182 #sxSendBuf.EPosSTW1.%X10 := False;0183 #sxSendBuf.EPosSTW1.%X14 := False;0184 #sxSendBuf.EPosSTW2.%X1 := False;0185 #sxSendBuf.EPosSTW2.%X5 := False;0186 #sxSendBuf.EPosSTW2.%X9 := False;0187 #sxSendBuf.STW1.%X11 := False;01910192// Nach dem Einschalten des Antriebes, prüfen ob der Antrieb betriebsbereit, in Operation ohne Fehler und Warnung ist,0193// dann die Betriebsart MDI / Sollwertvorgabe Start gesetzt werden0194IF #sbOff1 AND #sbReady AND #sbIOp AND NOT #sbFault THEN01950196// Betriebsart MDI / Sollwertdirektvorgabe setzen0197//#sxSendBuf.sxEPosSTW1.MdiStart := True;0198 #sxSendBuf.EPosSTW1.%X15 := True;01990200// Positioniertyp auf relatives Positionieren stellen0201//#sxSendBuf.sxEPosSTW1.MdiTyp := False;0202 #sxSendBuf.EPosSTW1.%X8 := False;02030204// die Richtungswahl für das Positionieren auf positive Richtung oder negative Richtung einstellen0205IF #Positive AND NOT #Negative THEN02060207// positive Richtung0208//#sxSendBuf.sxEPosSTW1.MdiPos := True;0209 #sxSendBuf.EPosSTW1.%X9 := True;02100211// negative Richtung0212//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0213 #sxSendBuf.EPosSTW1.%X10 := False;02140215// die Richtungswahl für das Positionieren auf negative Richtung einstellen0216ELSIF NOT #Positive AND #Negative THEN02170218// positive Richtung0219//#sxSendBuf.sxEPosSTW1.MdiPos := False;0220 #sxSendBuf.EPosSTW1.%X9 := False;02210222// negative Richtung0223//#sxSendBuf.sxEPosSTW1.MdiNeg := True;0224 #sxSendBuf.EPosSTW1.%X10 := True;02250226// die Richtungswahl für das Positionieren auf keine Richtung einstellen0227ELSE02280229// positive Richtung0230//#sxSendBuf.sxEPosSTW1.MdiPos := False;0231 #sxSendBuf.EPosSTW1.%X9 := False;02320233// negative Richtung0234//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0235 #sxSendBuf.EPosSTW1.%X10 := False;02360237END_IF;02380239// Nach dem Einschalten des Antriebes und dem Betriebsart MDI / Sollwertvorgabe starten,0240// ein Paar Zyklen warten bevor die Flanke für die Sollwertübernahme MDI gesetzt werden kann0241IF #sbMdiStart AND (#siMdiStartCyc < #siCycWait) THEN0242 #siMdiStartCyc := #siMdiStartCyc + 1;0243ELSE0244// Flanke Sollwertübernahme MDI0245//#sxSendBuf.sxSTW1.TrvStart := #Execute;0246 #sxSendBuf.STW1.%X6 := #ExecuteMode;02470248END_IF;02490250// "Fliegendes Referentieren" aktivieren0251// "Fliegendes Referenzieren" erst nach Einschalten des Antriebes möglich0252IF #sbRefTyp THEN02530254// Referenziertyp auf "Fliegendes Referenzieren" einstellen0255//#sxSendBuf.sxEPosSTW2.RefTyp := True;0256 #sxSendBuf.EPosSTW2.%X8 := True;02570258// Nach der Anwahl des Referenziertyps "Fliegendes Referenzieren",0259// ein Zyklus später kann das Referenzieren gestartet0260IF (#siRefTypCyc = 0) THEN0261 #siRefTypCyc := #siRefTypCyc + 1;0262ELSE0263// Referenzieren starten0264//#sxSendBuf.sxSTW1.RefStart := True;0265 #sxSendBuf.STW1.%X11 := True;02660267END_IF;0268END_IF;0269END_IF;02700271// Betriebsart "Positionieren Absolut" oder "Positonieren Absolut positiv" oder "Positionieren Absolut negativ" 0272ELSIF #siModePos = 2AND #sbModePos THEN02730274// Antrieb einschalten0278// nicht verwendete Signale für den 1. Schritt und eventuell weitere Schritte0279(*#sxSendBuf.sxSTW1.Jog1 := False;0280 #sxSendBuf.sxSTW1.Jog2 := False;0281 #sxSendBuf.sxEPosSTW1.MdiTyp := False;0282 #sxSendBuf.sxEPosSTW1.MdiPos := False;0283 #sxSendBuf.sxEPosSTW1.MdiNeg := False;0284 #sxSendBuf.sxEPosSTW1.MdiSetup := False;0285 #sxSendBuf.sxEPosSTW2.SetRefPt := False;0286 #sxSendBuf.sxEPosSTW2.JogInc := False;0287 #sxSendBuf.sxEPosSTW2.RefStDi := False;0288 #sxSendBuf.sxSTW1.RefStart := False;0289 #sxSendBuf.sxEPosSTW2.RefTyp := False;0290 #sxSendBuf.sxEPosSTW1.MdiStart := False;*)0291 #sxSendBuf.STW1.%X8 := False;0292 #sxSendBuf.STW1.%X9 := False;0293 #sxSendBuf.EPosSTW1.%X8 := False;0294 #sxSendBuf.EPosSTW1.%X9 := False;0295 #sxSendBuf.EPosSTW1.%X10 := False;0296 #sxSendBuf.EPosSTW1.%X14 := False;0297 #sxSendBuf.EPosSTW2.%X1 := False;0298 #sxSendBuf.EPosSTW2.%X5 := False;0299 #sxSendBuf.EPosSTW2.%X9 := False;0300 #sxSendBuf.STW1.%X11 := False;0301 #sxSendBuf.EPosSTW2.%X8 := False;0302 #sxSendBuf.EPosSTW1.%X15 := False;03030304// Nach dem Einschalten des Antriebes, prüfen ob der Antrieb betriebsbereit, in Operation ohne Fehler und Warnung ist,0305// dann die Betriebsart MDI / Sollwertvorgabe Start gesetzt werden0306IF #sbOff1 AND #sbReady AND #sbIOp AND NOT #sbFault THEN03070308// Betriebsart MDI / Sollwertdirektvorgabe setzen0309//#sxSendBuf.sxEPosSTW1.MdiStart := True;0310 #sxSendBuf.EPosSTW1.%X15 := True;03110312// Positioniertyp auf absolutes Positionieren stellen0313//#sxSendBuf.sxEPosSTW1.MdiTyp := True;0314 #sxSendBuf.EPosSTW1.%X8 := True;03150316// die Richtungswahl für das Positionieren auf positive Richtung oder negative Richtung einstellen0317IF #Positive AND NOT #Negative THEN03180319// positive Richtung0320//#sxSendBuf.sxEPosSTW1.MdiPos := True;0321 #sxSendBuf.EPosSTW1.%X9 := True;03220323// negative Richtung0324//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0325 #sxSendBuf.EPosSTW1.%X10 := False;03260327// die Richtungswahl für das Positionieren auf negative Richtung einstellen0328ELSIF NOT #Positive AND #Negative THEN03290330// positive Richtung0331//#sxSendBuf.sxEPosSTW1.MdiPos := False;0332 #sxSendBuf.EPosSTW1.%X9 := False;03330334// negative Richtung0335//#sxSendBuf.sxEPosSTW1.MdiNeg := True;0336 #sxSendBuf.EPosSTW1.%X10 := True;03370338// die Richtungswahl für das Positionieren auf keine Richtung einstellen0339ELSE03400341// positive Richtung0342//#sxSendBuf.sxEPosSTW1.MdiPos := False;0343 #sxSendBuf.EPosSTW1.%X9 := False;03440345// negative Richtung0346//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0347 #sxSendBuf.EPosSTW1.%X10 := False;03480349END_IF;03500351// Nach dem Einschalten des Antriebes und dem Betriebsart MDI / Sollwertvorgabe starten,0352// ein Paar Zyklen warten bevor die Flanke für die Sollwertübernahme MDI gesetzt werden kann0353IF #sbMdiStart AND (#siMdiStartCyc < #siCycWait) THEN0354 #siMdiStartCyc := #siMdiStartCyc + 1;0355ELSE0356// Flanke Sollwertübernahme MDI0357//#sxSendBuf.sxSTW1.TrvStart := #Execute;0358 #sxSendBuf.STW1.%X6 := #ExecuteMode;03590360END_IF;03610363// "Fliegendes Referenzieren" erst nach Einschalten des Antriebes möglich0364IF #sbRefTyp THEN03650366// Referenziertyp auf "Fliegendes Referenzieren" einstellen0367//#sxSendBuf.sxEPosSTW2.RefTyp := True;0368 #sxSendBuf.EPosSTW2.%X8 := True;03690370// Nach der Anwahl des Referenziertyps "Fliegendes Referenzieren",0371// ein Zyklus später kann das Referenzieren gestartet0372IF (#siRefTypCyc = 0) THEN0373 #siRefTypCyc := #siRefTypCyc + 1;0374ELSE0375// Referenzieren starten0376//#sxSendBuf.sxSTW1.RefStart := True;0377 #sxSendBuf.STW1.%X11 := True;03780379END_IF;0380END_IF;0381END_IF;03820383// Betriebsart "Positionieren als Einrichten positiv" oder "Positionieren als Einrichten negativ"0384ELSIF #siModePos = 3AND #sbModePos THEN03850386// Antrieb einschalten0387//#sxSendBuf.sxSTW1.Off1 := #sbOff1;0388 #sxSendBuf.STW1.%X0 := #sbOff1;03890390// nicht verwendete Signale für den 1. Schritt und eventuell weitere Schritte0391(*#sxSendBuf.sxSTW1.Jog1 := False;0392 #sxSendBuf.sxSTW1.Jog2 := False;0393 #sxSendBuf.sxEPosSTW1.MdiTyp := False;0394 #sxSendBuf.sxEPosSTW1.MdiPos := False;0395 #sxSendBuf.sxEPosSTW1.MdiNeg := False;0396 #sxSendBuf.sxEPosSTW1.MdiSetup := False;0397 #sxSendBuf.sxEPosSTW2.SetRefPt := False;0398 #sxSendBuf.sxEPosSTW2.JogInc := False;0399 #sxSendBuf.sxEPosSTW2.RefStDi := False;0400 #sxSendBuf.sxSTW1.RefStart := False;0401 #sxSendBuf.sxEPosSTW2.RefTyp := False;0402 #sxSendBuf.sxEPosSTW1.MdiStart := False;*)0403 #sxSendBuf.STW1.%X8 := False;0404 #sxSendBuf.STW1.%X9 := False;0405 #sxSendBuf.EPosSTW1.%X8 := False;0406 #sxSendBuf.EPosSTW1.%X9 := False;0407 #sxSendBuf.EPosSTW1.%X10 := False;0408 #sxSendBuf.EPosSTW1.%X14 := False;0409 #sxSendBuf.EPosSTW2.%X1 := False;0410 #sxSendBuf.EPosSTW2.%X5 := False;0411 #sxSendBuf.EPosSTW2.%X9 := False;0412 #sxSendBuf.STW1.%X11 := False;0413 #sxSendBuf.EPosSTW2.%X8 := False;0414 #sxSendBuf.EPosSTW1.%X15 := False;04150416// Nach dem Einschalten des Antriebes, prüfen ob der Antrieb betriebsbereit, in Operation ohne Fehler und Warnung ist,0417// dann die Betriebsart MDI / Sollwertvorgabe Start gesetzt werden0418IF #sbOff1 AND #sbReady AND #sbIOp AND NOT #sbFault THEN04190420// Betriebsart MDI / Sollwertdirektvorgabe setzen0421//#sxSendBuf.sxEPosSTW1.MdiStart := True;0422 #sxSendBuf.EPosSTW1.%X15 := True;04230424// Positioniertyp auf absolutes Positionieren stellen0425//#sxSendBuf.sxEPosSTW1.MdiTyp := True;0426 #sxSendBuf.EPosSTW1.%X8 := True;04270428// die Anwahl für MDI Modus auf Einrichten einstellen0429//#sxSendBuf.sxEPosSTW1.MdiSetup := True;0430 #sxSendBuf.EPosSTW1.%X14 := True;04310432// die Richtungswahl für das Positionieren auf positive Richtung oder negative Richtung einstellen0433IF #Positive AND NOT #Negative THEN04340435// positive Richtung0436//#sxSendBuf.sxEPosSTW1.MdiPos := True;0437 #sxSendBuf.EPosSTW1.%X9 := True;04380439// negative Richtung0440//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0441 #sxSendBuf.EPosSTW1.%X10 := False;04420443// die Richtungswahl für das Positionieren auf negative Richtung einstellen0444ELSIF NOT #Positive AND #Negative THEN04450446// positive Richtung0447//#sxSendBuf.sxEPosSTW1.MdiPos := False;0448 #sxSendBuf.EPosSTW1.%X9 := False;0450// negative Richtung0451//#sxSendBuf.sxEPosSTW1.MdiNeg := True;0452 #sxSendBuf.EPosSTW1.%X10 := True;04530454// die Richtungswahl für das Positionieren auf keine Richtung einstellen0455ELSE04560457// positive Richtung0458//#sxSendBuf.sxEPosSTW1.MdiPos := False;0459 #sxSendBuf.EPosSTW1.%X9 := False;04600461// negative Richtung0462//#sxSendBuf.sxEPosSTW1.MdiNeg := False;0463 #sxSendBuf.EPosSTW1.%X10 := False;04640465END_IF;04660467// Nach dem Einschalten des Antriebes und dem Betriebsart MDI / Sollwertvorgabe starten,0468// ein Paar Zyklen warten bevor die Flanke für die Sollwertübernahme MDI gesetzt werden kann0469IF #sbMdiStart AND (#siMdiStartCyc < #siCycWait) THEN0470 #siMdiStartCyc := #siMdiStartCyc + 1;0471ELSE0472// Flanke Sollwertübernahme MDI0473//#sxSendBuf.sxSTW1.TrvStart := #Execute;0474 #sxSendBuf.STW1.%X6 := #ExecuteMode;04750476END_IF;04770478// "Fliegendes Referentieren" aktivieren0479// "Fliegendes Referenzieren" erst nach Einschalten des Antriebes möglich0480IF #sbRefTyp THEN04810482// Referenziertyp auf "Fliegendes Referenzieren" einstellen0483//#sxSendBuf.sxEPosSTW2.RefTyp := True;0484 #sxSendBuf.EPosSTW2.%X8 := True;04850486// Nach der Anwahl des Referenziertyps "Fliegendes Referenzieren",0487// ein Zyklus später kann das Referenzieren gestartet0488IF (#siRefTypCyc = 0) THEN0489 #siRefTypCyc := #siRefTypCyc + 1;0490ELSE0491// Referenzieren starten0492//#sxSendBuf.sxSTW1.RefStart := True;0493 #sxSendBuf.STW1.%X11 := True;04940495END_IF;0496END_IF;0497END_IF;04980499// Hauptbetriebsart "Referenzieren" (Reference)0500// Betriebsart "Referenzieren - Referenzpunktfahrt positiv" oder "Referenzieren - Referenzpunktfahrt negativ"0501ELSIF #siModePos = 4AND #sbModePos THEN05020503// Antrieb einschalten0504//#sxSendBuf.sxSTW1.Off1 := #sbOff1;0505 #sxSendBuf.STW1.%X0 := #sbOff1;05060507// nicht verwendete Signale für den 1. Schritt und eventuell weitere Schritte0508(*#sxSendBuf.sxSTW1.Jog1 := False;0509 #sxSendBuf.sxSTW1.Jog2 := False;0510 #sxSendBuf.sxEPosSTW1.MdiStart := False;0511 #sxSendBuf.sxEPosSTW2.SetRefPt := False;0512 #sxSendBuf.sxEPosSTW2.JogInc := False;0513 #sxSendBuf.sxEPosSTW2.RefTyp := False;0514 #sxSendBuf.sxSTW1.RefStart := False;0515 #sxSendBuf.sxEPosSTW2.RefStDi := False;*)0516 #sxSendBuf.STW1.%X8 := False;0517 #sxSendBuf.STW1.%X9 := False;0518 #sxSendBuf.EPosSTW1.%X15 := False;0519 #sxSendBuf.EPosSTW2.%X1 := False;0520 #sxSendBuf.EPosSTW2.%X5 := False;0521 #sxSendBuf.EPosSTW2.%X8 := False;0522 #sxSendBuf.STW1.%X11 := False;0523 #sxSendBuf.EPosSTW2.%X9 := False;05240525// Nach dem Einschalten des Antriebes, prüfen ob der Antrieb betriebsbereit, in Operation ohne Fehler und Warnung ist,0526// dann die Betriebsart MDI / Sollwertvorgabe Start gesetzt werden0527IF #sbOff1 AND #sbReady AND #sbIOp AND NOT #sbFault THEN05280529// Referenzieren starten0530//#sxSendBuf.sxSTW1.RefStart := #Execute;0531 #sxSendBuf.STW1.%X11 := #ExecuteMode;05320533// die Richtungswahl für das Referenzpunktfahrt positiv einstellen0534IF #Positive AND NOT #Negative THEN0535。
s71200控制2个伺服实例
s71200控制2个伺服实例(最新版)目录1.概述2.硬件配置3.轴工艺对象的添加与配置4.命令表的添加与编程5.回原点操作6.总结正文1.概述本文将介绍如何使用西门子 S7-1200 PLC 控制两个西门子 V80 伺服电机进行运动控制。
通过本文的学习,您将了解硬件配置、轴工艺对象的添加与配置、命令表的添加与编程以及回原点操作等方面的知识。
2.硬件配置首先,我们需要对硬件进行配置。
这里我们需要一个 S7-1200 PLC 和一个 V80 伺服电机。
此外,我们还需要一个高速脉冲输出信号,用于驱动伺服电机。
3.轴工艺对象的添加与配置接下来,我们需要在 S7-1200 PLC 中添加轴工艺对象。
轴工艺对象是运动控制的基础,它用于定义伺服轴的名称、类型和参数等。
在添加轴工艺对象后,我们还需要配置扩展对象参数,以便更好地控制伺服轴的运动。
4.命令表的添加与编程在轴工艺对象配置完成后,我们需要添加命令表并进行编程。
命令表用于定义伺服轴的运动模式和运动参数,例如速度、加速度等。
在编程过程中,我们需要使用 S7-1200 PLC 的编程语言(如梯形图或结构化文本)来实现命令表的功能。
5.回原点操作在伺服轴运动过程中,有时需要回到原点。
这时,我们可以使用S7-1200 PLC 的回原点功能。
回原点操作可以通过硬件接线或编程实现。
在实现回原点操作时,我们需要注意避免伺服轴的冲击和损坏。
6.总结通过本文的学习,您已经了解了如何使用 S7-1200 PLC 控制两个V80 伺服电机进行运动控制。
在实际应用中,您可能需要根据具体需求调整硬件配置、轴工艺对象参数和命令表编程等内容。
如何使用PLC模拟量控制伺服电机
如何利用PLC模拟量控制伺服电机转速苗涛1,2曹云东11(沈阳工业大学电气工程学院沈阳110023)2(沈阳芯源微电子设备有限公司沈阳110168)摘要:利用西门子PLC输出的模拟量、伺服控制器完成了对伺服电机转速精准的控制。
提高了系统控制的可靠性和精确度。
满足了工业现场的需要。
关键词:伺服系统PLC 模拟量Abstract The accurate control of rotate speed of servo-motor is performed by taking advantage of the analog output of Siemens PLC and servo-controller. It increases the reliability and accuracy of the system control and satisfies the needs of industrial field.Key words servo system PLC analog1.引言伺服电机在自动控制系统中用作执行元件,它将接收到的控制信号转换为轴的角位移或角速度输出。
通常的控制方式有三种:1.通讯方式,利用RS232或RS485方式与上位机进行通讯,实现控制;2.模拟量控制方式,利用模拟量的大小和极性来控制电机的转速和方向;3.差分信号控制方式,利用差分信号的频率来控制电机速度。
简单、方便的实现对伺服电机转速的精确控制是工业控制领域内的一个期望目标,本文主要研究如何利用PLC输出的模拟量实现对伺服电机的速度较为精准的控制。
2.控制系统电路伺服系统包含控制装置和电机两部分。
控制装置选用西门子S7-200系列PLC CPU224XPCN,这种型号的PLC除了带有输入输出点外,还有1个模拟量输入点和1个模拟量输出点,这一型号PLC所具有的模拟量模块,能够满足控制伺服电机的需要。
触摸屏选用富士7.7寸触摸屏,型号为UG330H-SS。
西门子V90伺服的挡块控制模式
西门子V90伺服的挡块控制模式通过运行到固定停止点的功能可以使电机运行到一个固定点,在达到该点时持续保持设定的转矩而不报告故障。
plc 通过PROFINET 通信掌握V90 PN,在EPOS 模式下,设置如下。
(1) 在程序段中,设定动态参数如位置、速度、加速度倍率和减速度倍率①挡块位置,应当低于实际的压紧位置P2617[0-15]。
②挡块模式的速度,P2618[0-15]。
点击高级设置,进入“EPOS 运行程序段运行任务设置”画面①将任务设置为挡块模式。
②参数为压紧的扭矩,P2622[0-15],单位为0.01 Nm。
我们可以通过Sinaparas将上述报文参数通过PLC写入到V90中,也可以读取所需的参数。
例如:1) 此程序块用于设定V90的固定挡块压紧位置和压紧扭矩的设置,设置胜利后输出2个写入OK信号。
2)块内容如下:首先读取一下伺服的实际扭矩,扭矩参数为R31。
3)然后写入固定挡块位置和固定挡块扭矩:当V90的参数为一个参数多个数组时如P2622[0-15],想要输入P2622的2号值P2622[2],则Parameter为参数值设置为P2622,Index 参数的位值设置为2,代表给参数p2622[2]输入值。
4)现将挡块扭矩的设定值写入到P2622设定值中。
5)力矩参数P2622写入0.5秒后,接通P2622的参数读取,查看是否胜利写入。
6)读取V90中的固定挡块扭矩参数P2622:7)挡块模式的固定挡块位置写入P2617:8)力矩参数P2617写入0.5秒后,接通P2617的参数读取,查看是否胜利写入。
9)读取V90中的固定挡块位置P2617参数:10)当实际转矩值到达P2622 中设置扭矩限制值且实际位置跟随误差超出了参数p2634 中设置的值时,说明已到达固定停止点,假如V90 使用111 报文则状态字POS_ZSW2.12 置1。
11)将FB284的模式设定为6,Position设定为0。
西门子动态伺服控制(DSC)功能介绍,好在哪里?
西门子动态伺服控制(DSC)功能介绍,好在哪里?【导读】很多接触西门子运动控制器的工程师都会听到一个耳熟能详的名词---DSC,到底什么是DSC?DSC的优点是什么?如何使用DSC呢?你弄懂了这些就会更加理解西门子运动控制的精髓所在。
DSC是什么在PLC内循环计算位置环(我们常说的TO),则位置环的更新时间会取决于通信的总线周期时间。
如果缩短总线的周期时间,则势必增加CPU的负荷或者影响正常的OB1的循环时间。
DSC功能应运而生。
DSC(动态伺服控制)是通过特定的报文将位置环计算及插补移动到了驱动器中,利用快速计算的驱动器的速度控制时钟,提高了定位的质量和性能的控制方法。
这种功能特别适合高动态和复杂运动等最重要的伺服控制任务。
DSC的好处如果没有DSC功能,由于较长的位置控制周期会导致速度给定值出现阶跃变化,从而导致转矩或电流出现较大的脉动。
如下图所示:激活了DSC功能,位置环计算移动到了驱动器中,其计算周期大大缩短,则转矩或者电流的脉动变小。
使用DSC功能(动态伺服控制),可以获得如下好处:①位置控制器处于速度控制环路周期(例如125μs或者250μs),周期越短,系统的带宽则会大大的提高。
②具有更高的位置控制器增益因子Kv,因此具有高动态性能的驱动器可以更快地进行设定值的基准响应。
③动态抗干扰能力强,对于机械刚性系统,可以快速的抑制扰动。
④可以通过使用较长的运动控制周期时间来减少控制器上的负载。
如何使用DSC使用DSC功能,需要满足如下的条件:①DSC只能支持以下PROFIdrive报文:标准报文5或6以及SIEMENS报文105或106。
②控制器和驱动器均需支持此功能,比如使用S7-1500和V90PN或者使用SIMOTION和S120。
③需要激活PROFINETIRT或者PROFIBUS等时功能。
西门子伺服控制系统应用教案课件PPT
外形
脉冲编码器的分类和结构脉冲编码器是一种旋转式脉冲发生器,能把机械转角变成电脉冲,可作为位置检测和速度检测装置。脉冲编码器分为:光电式、接触式和电磁感应式。从精度和可靠性方面来看,光电式脉冲编码器优于其他两种。脉冲编码器是一种增量检测装置,它的型号是由每转发出的脉冲数来区分。数控机床上常用的有:2000P/r、2500 P/r和3000 P/r等。
3.转矩控制模式
图6-7 转矩控制模式的组成结构图
伺服驱动器的输入信号可以是开关,也可以由PLC产生
安川伺服驱动器安装与接线
伺服单元整体介绍认识各个端子;如何接线;点动实现;
伺服单元整体介绍
伺服单元型号的判别方法
B、认识各个端子、伺服驱动器主回路端子
型号:SGDN-120A
主电路电源
控制电路电源
杯形转子图bFra bibliotekNS
⊙
⊙
⊙
⊕
⊕
A
C
B
Z
Y
X
⊕
工作原理
当定子三相绕组通上交流电源后,就产生一个旋转磁场,该旋转磁场将以同步转速n0旋转。由于磁极同性相斥,异性相吸与转子的永磁磁极互相吸引,并带着转子一起旋转,因此,转子也将以同步转速n0与旋转磁场一起旋转。当转子加上负载转矩之后,转子磁极轴线将落后定子磁场轴线一个θ角,随着负载增加,θ也随之增大;负载减少时,θ角也减少;只要不超过一定限度,转子始终跟着定子的旋转磁场以恒定的同步转速n0旋转。
西门子伺服控制系统原理及应用
一.伺服的作用
伺服电动机又称为执行电动机,其功能是把输入的电压信号变换成电机转轴的角位移或角速度输出。输入的电压信号又称为控制信号或控制电压,改变控制电压的大小和电源的极性,就可以改变伺服电动机的转速和转向。其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-12-15 来源:中国仪表网摘要:伴随着工业自动化的发展,对其中的位置控制精确度也逐步的提高,如何能方便,准确的实现位置控制,是一个重大的问题,本文讲述了如何采用PLC可编程控制器来实现精确控制。
分别列举了三项方法,以及他们之间的相互比较。
引言随着自动化水平的不断提高,越来越多的工业控制场合需要精确的位置控制。
因此,如何更方便、更准确地实现位置控制是工业控制领域内的一个重要问题。
位置控制的精确性主要取决于伺服驱动器和运动控制器的精度。
高端的运动控制模块可以对伺服系统进行非常复杂的运动控制。
但在有些需要位置控制的场合,其对位置精度的要求比较高,但运动的复杂程度不是很高,这就没有必要选择那些昂贵的高端运动控制系统。
S7-200系列PLC是一种体积小、编程简单、控制方便的可编程控制器,它提供了多种位置控制方式可供用户选择,因此,如何利用该系列PLC实现对伺服电机运动位置较为精准的控制是本文的研究重点。
1、基本控制系统伺服系统分为液压伺服系统、电气-液压伺服系统以及电气伺服系统。
本文主要讨论了电气伺服系统中的交流伺服系统,其基本组成为交流伺服电机、编码器和伺服驱动器。
交流伺服系统的工作原理是伺服驱动器发送运动命令,驱动伺服电机运动,并接收来自编码器的反馈信号,然后重新计算伺服电机运动目标位置,从而达到精确控制伺服电机运动。
本伺服系统中选用Exlar公司生产的GSX50-0601型伺服直线电动缸。
该电动缸由普通伺服电机和一个行星滚珠丝杠组成,用来实现将旋转运动转变为直线运动。
此外,选用Xenus公司生产的XenusTM型伺服驱动器。
它可以利用RS.232串口通信方式和外部脉冲方式实现位置控制。
一般来说,一个伺服系统运转需要配置一个上位机,所以本系统采用西门子S7-200PLC作为上位机控制器。
通过高速脉冲输出、EM253位置控制模块、自由口通信三种方式控制伺服电机运动。
2、高速脉冲输出模式西门子CPU224XP配置两个内置脉冲发生器,它有脉冲串输出(PTO)和脉冲宽度调制输出两种脉冲发生模式可供选择。
这两个脉冲发生器的最大脉冲输出频率为100kHz。
在脉冲串输出方式中,PLC可生成一个50%占空比脉冲串,用于步进电机或伺服电机的速度和位置的控制。
2.1硬件构成图1为高速脉冲输出方式的位置控制原理图。
控制过程中,将伺服驱动器工作定义在脉冲+方向模式下,Q0.0发送脉冲信号,控制电机的转速和目标位置;Qo,发送方向信号,控制电机的运动方向。
伺服电动缸上带有左限位开关LIM 一、右限位开关LIM+以及参考点位置开关REF。
三个限位信号分别连接到CPU224XP的I0.0~I0.2三个端子上,可通过软件编程,实现限位和找寻参考点。
图1位置控制原理图2.2程序设计高速脉冲串输出(PTO)可以通过Step7Micro/WIN的位置控制向导进行组态,也可通过软件编程实现控制。
PTO输出方式没有专门的位置控制指令,只有一条脉冲串输出指令,而且在脉冲发送过程中不能停止,也不能修改参数。
为解决以上问题,可以设置脉冲计数值等于10(或更小),并能使脉冲发送指令PLS处于激活状态。
这样,就可以在任一脉冲串发送完之后修改脉冲周期。
图2为高速脉冲输出方式位置控制流程图。
控制思路为:通过PTO模式输出,可以控制脉冲的周期和个数;通过启用高速计数器HSC,对输出脉冲进行实时计数和定位控制,以控制伺服电机的运动过程。
图2位置控制流程图3、EM253位置控制模块EM253位置控制模块是西门子S7-200的特殊功能位置控制模块,它能够产生脉冲串用于步进电机与伺服电机的速度和位置的开环控制。
3.1硬件构成如图3所示为EM253位置控制原理图,定义伺服驱动器工作在脉冲+方向模式下。
P0口发送脉冲,P1口发送方向,DIS端硬件使能放大器,并同时清除放大器错误。
LIM-、LIM+、REF分别为电机左限位、右限位以及参考点。
图3EM253位置控制原理图3.2程序设计EM253位置控制模块可以通过Step7-Micro/WIN进行向导配置,配置完成后系统将自动生成子程序,编程简单、可轻松实现手动、自动、轨迹运行模式。
由于EM253属于开环控制,不能很好地反馈电机实际运动情况。
因此,利用伺服驱动器本身的差分输出信号,通过伺服驱动器软件设置,反馈给PLC,实现闭环位置控制。
但由于直线伺服电动缸与PLE可允许发送接收信号存在一定差别,因此,需要对输入到PLC的信号进行电平的转化以及降低伺服驱动器发送的反馈脉冲频率。
PLC对输入脉冲进行累加,从而得到电机的实际运转位置与运转速度,其脉冲计数程序如下。
①计数器初始化程序LDSMO.1//首次扫描时MOVB16#FC,SMB47//SMB47=16#F4,SMB47为高速计数器1的控制字节HDEF1,9//将HSC1配置为正交模式MOVD0,SMD48//设置HSCI的新初始值为0MOVD20000,SMD52//设置HSCI的新预设值为20000HSCI//激活高速计数器I②脉冲计数程序LDSMO.0MOVDHC1,VD600//将高速计数器1所记数值存储在VD600中DTRVD600,VD610//VD601〕中的整数转化为实数,存人VD610/RSOOO,VD610//VD610除以5000存入VD610,5001〕为电机旋转一周编码器发送脉冲数*R2.54,VD610//VD610乘以2.54存人VD610,2.54为电机旋转一周移动的距离4、RS-232串口通信方式4.1硬件构成西门子CPU22<tXP支持无协议通信,即用户仅需要对数据格式、传输速率、起始/停止码等进行简单设定,PLC与外部设备间就可进行直接数据发送与接收的一种通信方式。
伺服系统和PLC分别作为系统的主从站。
PLC控制器通过该通信功能可实现对伺服驱动器进行运行控制、参数读取、伺服驱动器当前运动状态的读取等操作。
当S7-200系列PLC工作在自由口通信模式下时,一般通过CPU模块的集成接口进行通信。
CPU集成接口采用了PPI硬件规范,其接口为RS-485串口,因此,当S7-200系列PLC的CPU与带有RS-232标准接口的计算机或伺服驱动器连接时,需要配套选用S7-200PLC的PC/PPI转换电缆或一个RS-232/RS-485转换器。
4.2PLC与伺服系统通信4.2.1报文构成S-200PLC在无协议通信方式工作时,不需要任何通信协议,通信参数需要根据与其进行通信的伺服驱动器的通信格式进行设定。
本伺服系统选用的Xe-nus 伺服驱动器可通过RS-232与PLC利用ASCII码进行通信,其ASCII码消息命令格式如下:<命令代码><命令具体参数><CR>其中:<命令代码>为一个单字母代码;<命令具体参数>表示电机所要执行的任务;<CR>为一个回车返回字符,表示命令结束。
如:sr0x2A21<CR>表示设置伺服控制器工作在可编程控制模式。
4.2.2程序设计程序设计时,将伺服驱动器工作定义在可编程位置模式。
该模式支持实时更改伺服电机的运动速度、位置,通过RS-232接收来自PLC的ASCII码命令,执行运动。
部分程序如下:①初始化程序LDSMO.1//首次扫描MOVB9,SMB30//设置自由端口0通信方式SMB30=9、8位数据位、9600、PPIMOVB188,SMB87//设置自由端口。
接收信息控制5MB87=188MOVB13,SMB89//设置自由端口0结束字符SMB89=13,即结束字符=<CR>MOVW0,SMW90//设置自由端口0空闲超时SMB90=0,信息接收始终处于有效MOVW200,SMW92//设置自由端口0信息超时SMB92=200msMOVB255,SMB94//设置自由端口0接收字符最大数SMB94=255ATCHINT_0,9//发送完成触发中断事件0ENI//允许中断②发送信息程序LDNVD3501.1//VD3501.1为接收延迟,自由端口0没有处于接收延迟时ASM4.5//自由端口0处于空闲状态,SM4.5=1AB=VB18,7//命令字节VB18=7,即要求设置运动目标位置SCPY"sr0xca',VB3100//"sr0xca',复制到VB3100,"sr0xca'为设置运动目标位置命令SCATB3600,VB3100//VB360()内的目标位置值连接到设置目标位置命令后SCATVB3190,VB3100//VB3190内的结束字节连接到VB3100后;XMTVB3100,0//通过自由端口0发送命令至伺服驱动器③发送完成中断程序(接收信息)LDSM0.0//SM0.0总是为1SSM87.7,1//置SM87.7=1,SM87.7为允许接收信息位RCVVB3200,0//通过自由端口0接收信息至VB32005、三种控制方式的分析比较上文分别从硬件结构与软件编程等方面,详细介绍了三种伺服电机位置控制方式。
为了更好地理解这三种方式的差异,我们从软件与控制结果的角度作如下分析比较。
①软件编程脉冲串输出方式可以轻松实现一些简单的位置与速度控制,具有硬件要求简单、可取代EM253并节省系统硬件配置等功能。
但在编写较为复杂的运动程序时(如绝对运动需要确定电机运动的原点位置),由于步骤繁琐,故不能采用该方法加以实现。
②控制精度高速脉冲输出方式和EM253位置控制方式均属于开环位置控制,它们只负责发送脉冲,但当伺服电机或伺服驱动器出现故障时,PLC或EM253都没得到相应的反馈信息,仍然在不断向外发送脉冲;而采用通信控制方式则是在每次发送命令结束时,伺服驱动器均会对发送的命令做出应答。
③位置控制结果伺服电机的速度等于PLC或EM253的输出脉冲频匆电机每转一圈发送的脉冲数,或直接通过RS-232串口发送ASCII码控制。
由于S7-200系列PLC(除CPU224XP)高速脉冲输出口的最高频率为20kHz,EM253的最高输出频率为200kHz,RS-232串口通信控制方式则是发送ASCII码设定运动速度。
因此,对于要求高速运动,或高控制精度的伺服驱动器系统,RS-232串口通信控制方式最优,而高速脉冲输出方式则不能满足要求。
采用高速脉冲输出控制和EM253位置控制方式时,伺服驱动器工作在脉冲+方向模式下,而处于通信控制方式时,伺服驱动器工作在可编程位置控制模式下。
高速脉冲输出方式不能根据实际状况实时更改伺服电机运动速度与目标位置,EM253位置控制方式只能在手动模式下实时更改速度,采用通信控制方式时,当伺服驱动器设置电机在可编程位置控制模式下运动时,可通过RS-232串口发送ASCII码命令,实时更改速度和目标位置。