第5章 SFC编程 5.1步进控制与步进指令编程 5.1.1步进控制 梯形图在编辑复杂工程的时候要求比较高,这个时候我们可以将程序划分成多个工序,每个工序完成相应的动作且条件满足时跳转到下个工序,使用顺序功能图(Sequential Function Chart,SFC)实现顺控。SFC程序可以迅速地理清编程思路,更加直观地监控程序的运行和编写,如图51所示。 图51SFC流程图示例 步进控制中每个工序需要包含3个要素: 状态继电器、梯形图和转移条件,如表51所示。 表51步进控制中一个工序所包含的内容 内容 功能 指令 状态继电器 进入SFC编程,可以理解为工序 STL、Sn 梯形图 完成相对应工序中的动作 OUT、SET 转移条件 结束本工序且跳转到其他工序的条件 TRAN 如图52所示,例如我们现在运行到31号工序,这个时候与31号相连接的梯形图运行,直到X001得电后满足转移条件跳转到32号工序,此时与32号相连接的梯形图运行而31号工序停止运行(除了SET的对象为Y31),直到满足下一个转移条件之后继续转移。 图52案例演示 状态转移图具有以下特点: (1) 每个状态都是由一个状态元件控制的,以确保状态控制正常进行。 (2) 每个状态都具有驱动元件的能力,能够使该状态下要驱动的元件正常工作,当然不一定每个状态下一定要驱动元件,应视具体情况而定。 (3) 每个状态在转移条件满足时都会转移到下一个状态,而原状态自动切除。 5.1.2状态继电器 状态元件是用于步进顺控编程的重要软元件,在这里可以理解成工序或者步骤。例如S20为20号状态继电器,即第20步或者第20个工序。FX3U状态(S)的编号如表52所示。 表52FX3U状态继电器的编号和功能 一般用 停电保持用 (电池保持) 固定停电保持专用 (电池保持) 信号报警器用 S0~S499 500点 (S0~S9作为初始化用) S50~S899 400点 S1000~S4095 3096点 S900~S999 100点 可以更改为停电保持(保持)区域可以更改为非停电保持区域不能通过参数进行改变停电保持的特性可以更改为非停电保持区域 5.2步进顺控指令 在梯形图编程中,状态器需要使用SET S+编号和STL S+编号的形式,可理解为SET代表去哪一步,STL代表到某一步。 5.2.1STL、RET指令 (1) 步进接点指令STL。 STL表示工序的开始。例如STL S0表示0号工序开始,此时0号工序内的梯形图被执行,如图53所示。 图53STL指令 (2) 步进返回指令RET。 RET代表步进结束,在梯形图中编步进程序需要在最后使用RET指令,如图54所示,但在SFC工程中编步进程序则无须使用RET指令。步进编程中的常用指令如表53所示。 图54RET指令 表53步进常用指令 分类助记符 指令用途 梯形图 步进开始 STL 步进梯形图开始,加载步进接点 步进转移 SET 结束本工序,向目标工序转移 步进返回 RET 步进返回,恢复到左母线 5.2.2常用特殊辅助继电器 M8002用于在PLC上电瞬间进入S0,但是M8002仅在PLC加电瞬间使用,也就是说M8002是一次性的,所以在复杂工控中,会在M8002下方添加另外的条件使PLC上电之后仍能进入0号工序。M8034用于禁止PLC的输出,此时PLC仍能运行但是没有执行输出。M8040用于强制中断步进程序的转移,此时PLC只停留在当前工序,不跳转,如表54所示。 表54常用特殊辅助继电器 继电器 特点 应用示例 M8002 PLC运行开始该继电器瞬间吸合 利用其常开触点,进入待机工序 M8034 该继电器被控吸合后,禁止全部输出 M8040 该继电器被控吸合后,禁止步进转移 强制步进程序中断运行 5.2.3编程要点 项目要求: 按下SB2按钮后,电机正转,小车向前运动,2s后小车向后运动,3s后停止。 (1) 建立工序图。 初学者应当养成良好的工程习惯,所以在使用SFC编程的时候,需要先建立工序图,也就是将PLC项目一步一步地分解开,之后只需要填入相应的元件和程序就可以了。而对于工序图,我们需要明确每步需要做什么,每步结束的条件和跳转到下一步的条件是什么。 ① 将PLC项目流程按照步骤分成各个工序,每个工序中要执行的动作用矩形框表示。 ② 在矩形框右边,写出工序所包含的动作。 ③ 工序之间用十字叉进行连接,如果需要跳转工序,则用十字叉+箭头表示。 ④ 最后填写转移条件和目标工序。 按照上述的步骤,我们将项目控制要求进行步骤分解: ① 按下SB2按钮,电机正转,小车向前运动。 ② 2s后电机反转,小车向后运动。 ③ 3s后电机停止运行。 ④ 再次启动后,重复上述动作。 对照工序图的步骤,我们可以依次进行程序的编写: ① 工序图如图55所示。 图55中文工序图 ② 软元件的分配如图56所示。 图56填入软元件 画好了工序图,对工序图分配相应的PLC软元件便可完成SFC编程。 (2) 在编程中,方框就相当于状态器(S),方框内序号为0则代表S0。 给工序图中的矩形分配状态器,注意初始工序中需分配初始状态(S0~S9)。初始状态以后,从S10开始分配其他软元件,通常从S20开始分配,由于PLC软元件默认从S10开始,所以对于一般过程也可以从S10开始分配。如果使用IST指令,则必须从S20开始作为主流程工序的第1步,状态编号的大小与工序的顺序无关。在状态中,还包括即使停电也能记忆其动作状态的停电保持用状态,如图57所示。 ① 在矩形框右侧按照执行要求分配对应的软元件; ② 结合项目I/O分配表,在转移条件处也就是十字叉处,分配相应的软元件(X、T、D、C等)构成的条件。 ③ 在需要跳转工序的位置分配工序序号及相应的转移条件。 图57SFC示例 上述只是说明了SFC块的编写步骤,在实际书写过程中还需要编写梯形图块的内容,例如使用M8002让0号状态器S0置位,急停程序也写在里面。 5.2.4SFC在GX Developer中的表示方法 在SFC编程过程中,需要建立两个编程块,一个是梯形图块,如图58所示,另一个是SFC块。 图58梯形图块 (1) 在梯形图块中我们完成对项目的启动、停止和参数的设置。梯形图块中的参数都是全局变量,它会影响到SFC块中相同参数的状态,所以如果SFC中有输出,梯形图块中也有对应的输出,那么就会形成双线圈问题,这个问题在实际编程中必须避免。 (2) 在SFC块中,我们需要完成指定工序所对应的执行动作和转移条件的设置。 操作流程: ① 单击 工具按钮,弹出“创建新工程”对话框。 ② “PLC系列”选择FXCPU,即三菱系列。 ③ “PLC类型”选择FX3U(C),即FX3U(C)类PLC。 ④ “程序类型”选择SFC,在“工程名设定”中设置路径和工程名,如图59所示。 ⑤ 单击“确定”按钮创建新工程,进入块信息设置编辑区。 图59创建SFC ⑥ 双击块标题下方表格,在“块标题”中输入“初始化”,“块类型”选择“梯形图块”,单击“执行”按钮建立梯形图块,如图510所示。 图510建立梯形图块 ⑦ 可以直接在编辑界面的右侧编写梯形图程序,编写完毕之后,单击左侧的工程数据列表,双击“程序”之后双击MAIN即可跳转到图块编辑界面,如图511所示。 图511梯形图块编辑界面 ⑧ 此时再次双击块标题下方表格,在“块标题”中输入“主程序”,“块类型”选择“SFC块”,单击“执行”按钮建立SFC块,如图512所示。 图512建立SFC块 ⑨ 可以直接在SFC编辑界面的右侧编写SFC工序和工序执行内容,编写完毕之后,单击左侧的工程数据列表,双击“程序”之后双击MAIN即可跳转到图块编辑界面,如图513所示。 图513SFC编辑界面 ⑩ 程序编写好之后需进行变换,如果在SFC中没有单击“变换”,也可以跳转到块信息编辑框进行块变换,然后再将PLC程序写入PLC,如图514所示。 图514块变换 关于GX Developer编程操作的详细内容,可参考GX Developer的操作手册,如图515所示。 图515完整SFC程序案例 5.2.5SFC编程注意事项 (1) 如果使用步进指令编程,则“SET S+编号”与“STL S+编号”缺一不可,需成对使用。使用梯形图进行步进编程时,结尾必须用RET指令返回,如图516所示。 图516RET写法 (2) 在状态转移过程中,一个扫描周期内可能会出现两个状态同时动作的情况,因此两个状态中不允许同时动作的驱动元件之间应进行连锁控制,如图517所示。 图517SFC互锁 (3) 对同一个输出,继电器在不同状态时可以使用相同的输出,但是如果在梯形图块和SFC块中同时出现同一个输出的继电器,则会出现双线圈问题。 允许形式: 梯形图块中无Y002,如图518所示。 图518SFC双线圈问题处理 不允许形式: 梯形图块和SFC块中都有Y000,如图519所示。 图519SFC双线圈问题 (4) 由于在一个扫描周期内,可能会出现两个状态同时动作,因此在相邻两个状态中不能出现同一个定时器,否则指令相互影响,定时器可能无法正常工作,如图520所示。 图520T的双线圈问题 步进控制程序中,不同工序中允许出现同一个线圈,但是相邻工序中不得使用相同的计时器线圈,而相隔工序中可以使用相同的计时器线圈,节省计时器的用量。 (5) SFC块中梯形图表现形式。 允许形式: ① 空输出型: 只是为了跳出工序,不输出,如图521所示。 图521空输出型 ② 直接输出型: 直接输出相应的输出继电器或者时间继电器,如图522所示。 图522直接输出型 ③ 条件输出型: 输出继电器之前有条件,如图523所示。 图523条件输出型 ④ 混合型: 当直接输出型与条件输出型在一起时,必须保证直接输出型在上方,条件输出型在下方,如图524所示。 图524带条件输出 不允许形式如图525所示。 图525不允许的输出形式 5.3步进控制程序类型 5.3.1单流程 完成单一流程动作称为单流程。我们可以理解为家里有3个房间要打扫,先打扫客厅,然后打扫卧室,最后打扫厨房,按流程依次打扫。单流程的表现形式如图526所示。 图526单流程控制 5.3.2选择分支 当有多条路径,而只能选择其中一条路径执行时,这种分支方式称为选择分支。我们可以理解为家里有3个房间要打扫,早上打扫客厅,中午打扫卧室,晚上打扫厨房,分时段进行。选择分支的表现形式如图527所示。 图527选择分支 5.3.3并行分支 有多条路径,且多条路径同时执行称为并行分支。我们可以理解为家里有3个房间要打扫,同一时刻,爸爸打扫客厅,孩子打扫卧室,妈妈打扫厨房,同时进行。并行分支的表现形式如图528所示。 图528并行分支 5.3.4循环结构 向前面状态进行转移的流程称为循环,用箭头指向转移的目标状态。使用循环流程可以实现一般流程的重复。我们可以理解为家里有3个房间要打扫,先打扫客厅,然后打扫卧室,但发现客厅和卧室没扫干净,需重新打扫,最后打扫厨房。循环的表现形式如图529所示。 图529循环结构 5.3.5跳转结构 向下面状态的直接转移或向系列外的状态转移称为跳转,用箭头符号指向转移的目标状态。我们可以理解为家里有3个房间要打扫,计划先打扫客厅,然后打扫卧室,最后打扫厨房, 也可以跳过卧室直接打扫厨房。跳转的表现形式如图530所示。 图530跳转结构 5.4案例演示 比较复杂的控制过程可利用步进方式编程,将一个复杂的控制过程分解成多个简单的控制过程,每个工序完成一个小的程序,最终实现总的控制要求。步进控制的优点是每个工序相对独立,编程思路清晰。 1. 点动控制 项目要求: 按下SB2按钮电机正转,松开SB2按钮电机停止。 I/O分配表 输入 输出 元件 地址 元件 地址 2. 自锁控制 项目要求: 按下SB2按钮电机正转,按下SB1按钮电机停止。 I/O分配表 输入 输出 元件 地址 元件 地址 3. 互锁控制 项目要求: 按下SB2按钮电机正转,按下SB3按钮电机反转,正反转切换需要先停止再进行切换。电机正转和电机反转不允许同时运行,按下SB1按钮时电机停止运行。 I/O分配表 输入 输出 元件 地址 元件 地址 4. 延时接通 项目要求: 按下SB2按钮红灯延时2s点亮,按下SB1按钮红灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 5. 延时断开 项目要求: 按下SB2按钮红灯长亮,按下SB1按钮后2s后红灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 6. 双线圈控制 项目要求: 按下SB2按钮红灯长亮,按下SB3按钮红灯亮,松开SB3按钮红灯灭(SB2按钮与SB3按钮不同时按)。按下SB1按钮所有灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 7. 流水控制 项目要求: 按下SB2按钮,红灯、绿灯、黄灯和白灯以1Hz依次点亮。按下SB1按钮所有灯灭(循环执行)。 I/O分配表 输入 输出 元件 地址 元件 地址 8. 逐一控制 项目要求: 按下SB2按钮,红灯、绿灯、黄灯和白灯相隔1s逐一点亮。按下SB1按钮所有灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 9. 时间设置 项目要求: 按一次SB2按钮两灯的交替闪烁时间加1s,按下SB3按钮红灯和绿灯开始交替闪烁。按下SB1按钮清零且灯不亮,交替间隔为1s。 I/O分配表 输入 输出 元件 地址 元件 地址 10. 点动计次 项目要求: 按10次SB2按钮红灯亮,按下SB1按钮红灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 11. 流程计次 项目要求: 当按下SB2按钮时设置点亮次数加1。设置好次数后按下SB3按钮,红灯、绿灯交替点亮(间隔为1s)。当点亮次数到达设置次数时两灯灭。当按下SB1按钮时两灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 12. 次数设置 项目要求: 按一下SB2按钮,红灯闪烁次数加1,按下SB3按钮红灯闪烁,当点亮次数达到设置的次数时不再闪烁。按下SB1按钮清零且灯灭。 I/O分配表 输入 输出 元件 地址 元件 地址 13. 并行分支 项目要求: 按下SB2按钮电机启动正转,红灯、绿灯、黄灯、白灯依次闪烁(间隔为1s)。电机转动时灯依次闪烁不能停止。按下SB1按钮电机停止转动,灯停止闪烁。 I/O分配表 输入 输出 元件 地址 元件 地址 14. 选择控制 项目要求: 按下SB2按钮,一号电机启动2s后停止。按下SB3按钮,二号电机启动3s后停止。两电机不能同时启动,按一下SB1按钮两个电机停止工作。 I/O分配表 输入 输出 元件 地址 元件 地址 5.5案例演示答案 1. 点动控制 项目要求: 按下SB2按钮电机正转,松开SB2按钮电机停止。 I/O分配表 输入输出 元件地址元件地址 SB1X1电机正转Y1 2. 自锁控制 项目要求: 按下SB2按钮电机正转,按下SB1按钮电机停止。 I/O分配表 输入输出 元件地址元件地址 SB1X1电机正转Y1 SB2X2 3. 互锁控制 项目要求: 按下SB2按钮电机正转,按下SB3按钮电机反转,正反转切换需要先停止再进行切换。电机正转和电机反转不允许同时运行,按下SB1按钮时电机停止运行。 I/O分配表 输入输出 元件地址元件地址 SB1X1电机正转Y1 SB2X2电机反转Y2 SB3X3 4. 延时接通 项目要求: 按下SB2按钮红灯延时2s点亮,按下SB1按钮红灯灭。 I/O分配表 输入输出 元件地址元件地址 SB2X2红灯Y4 SB1X1 5. 延时断开 项目要求: 按下SB2按钮红灯常亮,按下SB1按钮后2s后红灯灭。 I/O分配表 输入输出 元件地址元件地址 SB2X2红灯Y4 SB1X1 6. 双线圈控制 项目要求: 按下SB2按钮红灯长亮,按下SB3按钮红灯亮,松开SB3按钮红灯灭(SB2按钮与SB3按钮不同时按)。按下SB1按钮所有灯灭。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2 SB3X3 7. 流水控制 项目要求: 按下SB2按钮,红灯、绿灯、黄灯和白灯以1Hz依次点亮。按下SB1按钮所有灯灭(循环执行)。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2绿灯Y5 黄灯Y6 白灯Y7 8. 逐一控制 项目要求: 按下SB2按钮,红灯、绿灯、黄灯和白灯相隔1s逐一点亮。按下SB1按钮所有灯灭。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2绿灯Y5 黄灯Y6 白灯Y7 9. 时间设置 项目要求: 按一次SB2按钮两灯的交替闪烁时间加1s,按下SB3按钮红灯和绿灯开始交替闪烁。按下SB1按钮清零设置且灯不亮,默认交替间隔为1s。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2绿灯Y5 10. 点动计次 项目要求: 按10次SB2按钮红灯亮,按下SB1按钮红灯灭。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2 11. 流程计次 项目要求: 当按下SB2按钮时设置点亮次数加1。当设置好次数按下SB3按钮,红灯、绿灯交替点亮(间隔为1s)。当点亮次数到达设置次数时两灯灭。当按下SB1按钮时两灯灭。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2绿灯Y5 SB3X3 12. 次数设置 项目要求: 按一下SB2按钮,红灯闪烁次数加1,按下SB3按钮红灯闪烁,当点亮次数达到设置的次数时不再闪烁。按下SB1按钮清零且灯灭。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2 SB3X3 13. 并行分支 项目要求: 按下SB2按钮电机启动正转。红灯、绿灯、黄灯、白灯依次闪烁(间隔为1s)。电机转动时灯依次闪烁不能停止。按下SB1按钮电机停止转动,灯停止闪烁。 I/O分配表 输入输出 元件地址元件地址 SB1X1红灯Y4 SB2X2绿灯Y5 黄灯Y6 白灯Y7 电机Y2 14. 选择控制 项目要求: 按下SB2按钮,一号电机启动2s后停止。按下SB3按钮,二号电机启动3s后停止。两电机不能同时启动,按一下SB1按钮两个电机停止工作。 I/O分配表 输入输出 元件地址元件地址 SB1X1一号电机Y1 SB2X2二号电机Y2 SB3X3