电气设计图纸及西门子PLC编程
- 格式:doc
- 大小:174.00 KB
- 文档页数:6
西门子PLC编程操作及注意事项一、PLC基本概念可编程控制器(Programmable Controller)是计算机家族中的一员,是为工业控制而设计制造的。
早期的可编程控制器称作可编程逻辑控制器(Programmable Logic Controller),简称 PLC,它主要用来代替继电器实现逻辑控制。
随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天这种装置称作可编程控制器,简称PC。
但是为了避免与个人计算机(Personal Computer)的简称混淆,所以将可编程控制器简称PLC。
二、PLC的基本结构PLC实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。
A、中央处理器(CPU)中央处理器(CPU)是PLC的控制中枢。
它按照PLC系统成程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及报警定时器的状态,并能诊断用户程序中的语法错误。
当PLC投入运行时,首先它以扫描的方式接受现场各输入装置的状态和数据,并分别存入I/O映象区,然后从用户程序存储器中逐条读取用户程序,经过命令解释后,按指令的规定执行逻辑或数字运算的结果送入I/O映象区或数字寄存器内。
等所有的用户程序执行完毕之后,最后将I/O映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置,如此循环运行,直到停止运行。
为了进一步提高PLC的可靠性,近年来对大型PLC还采用双CPU构成冗余系统(如S1501\二期循环水、除盐水等系统),或采用三CPU(TS300等)的表决式系统。
这样即使某个CPU出现故障,整个系统仍能正常运行。
B、存储器存储系统程序的存储器称为系统存储器。
存储应用软件的存储器称为用户存储器。
(一) PLC常用的存储器类型1. RAM (Random Assess Memory)这是一种读/写存储器(随机存储器),其存取速度最快,由锂电池支持。
2. EPROM (Erasable Programmable Read Only Memory)这是一种可擦除的只读存储器。
课程设计集锦-西门子PLC编程案例一、小车往返运动用S7-200实现小车往返的自动控制,控制过程为按下启动按钮,小车从左边往右边(右边往左边运动)当运动到右边(左边)碰到右边(左边)的行程开关后小车自动做返回运动,当碰到另一边的行程开关后又做返回运动。
如此的往返运动,直到当按下停车按钮后小车停止运动。
▲电气接线图I/O分配表梯形图程序PLC接线图程序调试及结果分析▲控制平台操作面板当按下SB2即i0.0(鼠标点击i0.0f)接通后,Q0.0接通,小车右行(即指示灯Q0.0 亮)。
当小车运行碰到右限位开关SQ2即i0.4(用鼠标点击i0.4f,模拟SQ2被压下)接通,此时小车左行(指示灯Q0.0灭,指示灯Q0.1亮),当运行到左边碰到左限位SQ1即i0.3(鼠标点击i0.3f)接通,此时小车又往右运行(指示灯Q0.1灭,指示灯Q0.0 亮)。
如此往返运动下去直到按下SB1即i0.2(鼠标点i0.2f)接通,小车停止运行。
附:二、闪光电路当按下启动按钮后,要求在两秒钟内有一秒亮有一秒灭,如此反复,灯一闪一闪发光。
I/O分配表梯形图程序PLC接线图程序调试及结果分析把编写好的程序下载到西门子s7-200PLC中进行调试。
观察运行结果和实验要求是否相同。
通过在线控制面板进行调试,当按下在线控制面板上的I0.0f(即I0.0 接通)此时Q0.0有输出,Q0.0所接负载灯就亮,同时启动定时器T37开始计时,当计时一秒后因T37动作,其常闭触点断开,所以Q0.0无输出,所接负载灯灭。
灯灭的同时启动定时器T38,T38 计时一秒后,把串联在定时器T37的常闭触点断开,所以T37复位,T37常闭触点恢复常闭。
此时Q0.0 又有输出,所接负载灯又亮。
这样,输出Q0.0上所接的负载灯以接通一秒,断开一秒频率不停的闪烁,直到按下在线控制面板上的I0.1f(即I0.1接通),闪光电路不在继续工作。
若想改变灯闪烁的频率只要改变定时器的时间就能够达到改变要求。
在PLC发展的初期,沿用了设计继电器电路图的方法来设计比较简单的PLC 的梯形图,即在一些典型电路的基础上,根据被控对象对控制系统的具体要求,不断地修改和完善梯形图。
有时需要多次反复地调试和修改梯形图,增加一些中间编程元件和触点,最后才能得到一个较为满意的结果。
这种PLC梯形图的设计方法没有普遍的规律可以遵循,具有很大的试探性和随意性,最后的结果不是唯一的,设计所用的时间、设计的质量与设计者的经验有很大的关系,所以有人把这种设计方法叫做经验设计法,它可以用于较简单的梯形图(如手动程序)的设计。
梯形图的经验设计法是目前使用比较广泛的一种设计方法,该方法的核心是输出线圈,这是因为PLC的动作就是从线圈输出的(可以称为面向输出线圈的梯形图设计方法)。
其基本步骤如下:(1)分解控制功能,画输出线圈梯形图。
根据控制系统的工作过程和工艺要求,将要编制的梯形图程序分解成独立的子梯形图程序。
以输出线圈为核心画输出位梯形图,并画出该线圈的得电条件、失电条件和自锁条件。
在画图过程中,注意程序的启动、停止、连续运行、选择性分支和并联分支。
(2)建立辅助位梯梯形图。
如果不能直接使用输入条件逻辑组合作为输出线圈的得电和失电条件,则需要使用工作位、定时器或计数器以及功能指令的执行结果作为条件,建立输出线圈的得电和失电条件。
(3)画出互锁条件和保护条件。
互锁条件是可以避免同时发生互相冲突的动作,保护条件可以在系统出现异常时,使输出线圈动作,保护控制系统和生产过程。
在设计梯形图程序时,要注意先画基本梯形图程序,当基本梯形图程序的功能能够病足要求后,再增加其他功能,在使用输入条件时,注意输入条件是电平、脉冲还是边沿。
调试时要将梯形图分解成小功能块调试完毕后,再调试全部功能。
经验设计法具有设计速度快等优点,但是,在设计问题变得复杂时,难免会出现设计漏洞。
下面介绍两个程序设计实例。
例:运货小车的自动控制1.运货小车的动作过程图1运货小车在限位开关SQ0装料(见图1)10s后,装料结束。
西门子PLC编程电缆制作图西门子plc编程电缆制作图s7-200编程电缆西门子编程电缆pcppi电缆制作不知你的接线图,是不是原装电缆的接线图?我是用过一个国产的电缆,结果烧坏了PORT口。
呵呵;下面的图还可以,简单的自制办法:买一个RS232/485转换器,把线引出就行了,不过成本要几十元; 第一个图慎用;基本上烧毁Port口均是由于工程师的带电插拔这个不良习惯造成的~~~改正自己的不良习惯,那么郁闷的事情会少许多……以上呵呵;带光电隔离的电缆带电插拨都不会用问题;不过用第一张图片制作的就算能用,如果带电插拨可就危险了;关于CPU使用的常见问题A: 在使用Micro/WIN V4.0编程时须注意哪些事项?CTS7-200 CPU不支持一下几种Micro/WIN功能:(1) 不支持储存卡编程和清除(2) 不支持在线编程功能(Program Edit In Run)(3) 不支持配方和数据日志功能(4) System Block的增加内存设置无效(默认情况已经允许使用最大的内存空间)。
(5) 由于目前的CTS7-200不支持西门子的特殊模块,如:EM241、EM243、EM253和EM277,因此CTS7-200 P LC也不支持Micro/WIN里与这些模块相关的功能。
A: CPU224的两个串口怎么使用?CPU224的两个串口一个是RS485、一个是RS232,这是两个物理接口而非逻辑接口,实际上都是PORT0,只能走一种通信协议,不可以同时通过PPI协议与屏进行通信和通过自由口协议与变频器通信。
连接设备是RS232接口的用RS232口,连接设备是RS485接口的用RS485口,A: CPU226的两个串口怎么使用?CPU 226提供两个完全独立的RS485口,PORT0和PORT1,PORT0是标准RS485口,PORT1则是同时支持RS232和RS485的混合物理接口(母座),用户可通过RS232电缆直接对PLC进行编程。
李海波个人简历附加电气设计
一、控制要求
1、某生产线末端有一台三级皮带运输机,分别由M1、M
2、M3三台电机控制,有手动和
自动两种控制方式。
2、手动时,按下手动启动按钮,并按MI-M2-M3的顺序启动、M1启动后,要求按3S的
时间间隔自动启动M2、M3; 按下停止按钮,按M3-M2-M1的顺序停止,M3停止后,要求按2S 的时间间隔自动停止M2、M1。
3、自动控制时,按下自动启动按钮,按3S 时间间隔顺序启动,运行后经5s,按2S 的
时间间隔逆序停止,完成了一个工作循
环。
停5 秒后,又按以上循环经3 次工作循环后自动停止。
4、如遇紧急情况,可按下急停按钮停止所有电机的运行。
(电气画图使用EPLAN软件)
(自动控制采用西门子PLC200控制)
(符号表)
(附程序文件)
项目1_back.mwp。
校对.+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。
李海波个人简历附加电气设计
一、控制要求
1、某生产线末端有一台三级皮带运输机,分别由M1、M
2、M3三台电机控制,有手动和
自动两种控制方式。
2、手动时,按下手动启动按钮,并按MI-M2-M3的顺序启动、M1启动后,要求按3S的
时间间隔自动启动M2、M3; 按下停止按钮,按M3-M2-M1的顺序停止,M3停止后,要求按2S 的时间间隔自动停止M2、M1。
3、自动控制时,按下自动启动按钮,按3S 时间间隔顺序启动,运行后经5s,按2S 的
时间间隔逆序停止,完成了一个工作循
环。
停5 秒后,又按以上循环经3 次工作循环后自动停止。
4、如遇紧急情况,可按下急停按钮停止所有电机的运行。
(电气画图使用EPLAN软件)
(自动控制采用西门子PLC200控制)
(符号表)
(附程序文件)
项目1_back.mwp。