6ES7241-1AA22-0XA0原装库存
引言
可编程序控制器(PLC)作为新一代的工业控制装置,因其具有通用性好,实用性强,硬件配套齐全,编程方法简单易学优点而广泛应用于工业领域。在PLC控制系统设计中,常常碰到电动机的多地控制或多台电动机的起停控制。我们通常的做法是每台电动机或每个控制点均设一个起动按钮,一个停止按钮,这样做虽然可以达到控制目的,但需要的按钮和连接导线较多,PLC的输入点数也较多。如果用单个按钮控制电动机的起动与停止,不仅节省了硬件成本,而且还大大减少了由于按钮而可能引起的故障,这种控制有多种实现方法。
2 用移位寄存器实现
用移位寄存器实现单按钮控制起停的梯形图如图1所示。
在图1中,X400为外接按钮,Y430为输出,外接控制电动机的接触器线圈,次按下按钮时,X400的两个触点短时接通移位寄存器的数据输入扣移位输入端,M100变为“1”态,并立即移位到M101(此时M100变为“0”态),使M101变为“1”态,M101的常开触点闭合,Y430有输出,电机起动,同时M101的常闭触点断开。第二次按下按钮时,X400闭合,已断开的M101常闭触点封锁第二次数据输入信号,移位寄存器将M100的“0”态移到M101,使M101变为“0”态Y430失电,无输出,电机停止,同时电路恢复为常态,为下次起动作准备。
3 用计数器实现
用计数器实现单按钮控制起停的线路如图2所示
图1
图2
当次按下按钮时,X400短时接通,M100产生脉冲,M100的常开触点动作,Y430得电并自锁,电机起动,同时M100的另一对常开触点动作,使计数器C461的数值减1。第二次按下按钮时,M100又产生一个脉冲,同样使C461的数值再减l,此时C461已计二次数,其常开触点断开,Y430失电,电机停止,同时C461的常开触点闭合,使计数器复位,为下一次计数作好准备。
4 用S,R指令实现
图3为用S,R指令实现单按钮控制起停的梯形图
图 3
由图3可知,先按下按钮时,X400接通,M100产生一个脉冲,M100的常开触点闭合并将M206置“1”,此时Y430得电,电机起动,且M206的另一对常开触点闭合,为M101得电作准备。第2次按下按钮时,X400瞬时接通,M100又产生一个脉冲,M100的常开触点闭合。由于次按下按钮时已使M206的一对常开触点闭合,所以第二次按下按钮时M101得电。M101的常闭触点闭合,M206复位,变为“0”态,Y430失电,电机停止。
5 用MC,MCR指令实现
图4是用MC,MCR指令实现这一功能的梯形图。次按下按钮时,X400接通M102线圈,M102的触点闭合,使M100得电并自锁,Y430线圈接通并自锁,电机起动,Y430的常开触点闭合,为M101接通作准备,次按钮松开后,X400使M102线圈断电,M100和M101的线圈均断开。第二次按下按钮后,M100的线圈通路已被Y430的常闭触点断开,而M101线圈则接通,其常闭触点断开,Y430失电,电机停止。
6 其他方法实现
图5所示的方法较为简单,次按下按钮,X400得电,M100产生一个脉冲,Y430得电并自锁,电机起动。第二次按下按钮时,M100又产生一个脉冲,Y430断电,电机停止。
0 引言
组合机床是针对某些特定工件,按特定工序进行批量加工的专用设备。随着PLC的广泛应用和机床电控技术的不断发展,利用PLC实现对组合机床的自动控制,无疑是今后的发展方向,而针对这种控制的PLC程序设计也显得尤为重要。这种控制属于顺序逻辑控制,有多种编程方法与语言可供选择,编程中也有一些技巧与规律可循。下面较为详细的介绍一组合机床自动控制的PLC程序设计实例。
1 实例工作过程及程序设计思路
本文给出的实例是一台立卧三面镗床,有右头、左头及上头三个工作头,有自动循环(三头同时加工)和单头调整四种不同工况。三头同时加工时,一个自动工作循环过程如图1所示。其特点是多头同时加工和多工步,体现在控制要求上是:工步之间转换条件较复杂,存在并行同步问题,记忆、连锁等问题也较多。鉴于此,应采用顺序功能流程图的程序设计方法:首先根据对工作过程的分析对各步、转换条件及路径进行全面定义,确定各步的动作,然后按照控制要求,运用指令对各步和转换进行编程。
图1 自动工作循环过程
步的定义可由顺序功能流程图描述,图2所示为本例主功能流程图。它从功能入手,以功能为主线,将生产过程分解为若干个独立的连续阶段(步) 。
分解的各步可以是一个实际的顺序步,例如步1,对应的动作是起动主泵电机,也可以是生产过程的一个阶段,例如步2为自动工作过程,其功能流程图见图3。
从这两个功能流程图可以看到,它将各步的操作、转换条件以及步的推进过程简单明了地显示出来了,并体现出了具有单序列、选择序列、并行序列几种基本结构。例如步25至步27是单序列,实现了多工序的顺序工作;步12、步13、步14及步15构成了四分支选择序列结构,可实现三头同时加工、右头调整、上头调整、左头调整四种工况的选择;而步28至步30、步31至步34、步35至步38则形成了三个并行的分支,实现的是三头同时加工过程;步21、步22与步23、步24间也是并行关系,实现了工件上位降中位与主轴定位两个工序并行工作。该两个并行的过程间有同步问题,即步21 (工件上位降中位)与步23 (主轴定位)同时开始,但不同时结束,需要用并行序列的合并来同步(等待两个动作均结束) ,使之同时转入步25。三头同时加工时也有此问题。在顺序功能流程图的描述中,注意要说明各步间的转换条件、各步对应的命令与动作及相应运行状态。
图2 主功能流程图
2 程序实现方法
接下来的第二步则需要用某种编程语言的指令对上述功能流程图进行编程,以实现其中的功能和操作。
目前已有提供直接功能流程图编程的PLC,但对于不具有该编程语言的PLC,可采用仿功能流程图编程的方法,这里所说的是采用梯形图、指令表等常见的编程语言实现编程的方法。根据功能流程图的描述,可将该复杂的结构分解为单序列、选择序列、并行序列几种基本环节,找出这些基本环节各自的规律、编程规则,化整为零分块编程。这样程序为结构化模块形式,编程的思路更清楚,程序设计更为规范。各种基本环节的程序实现可采用通用逻辑指令、置位与复位指令或移位寄存器,这几种实现方法有一个共性就是要考虑如何激活一步、保持该步、又如何停止一步,如果用步进指令来实现,这些问题就无需考虑,程序也简洁的多。下面给出运用步进指令实现的对图2、图3的编程,并就关键问题进行分析。
图4为主功能流程图的梯形图,图5为自动工作功能流程图的梯形图(只给出了一部分) 。先看步25到步27的单序列,其各步的控制规律为:若某步为活动时,则当它与下步间的转换条件一旦成立,该步即变为非活动步,而下一步成为活动步。当步为活动时,相应的动作和命令才执行,非活动步相应的动作和命令不被执行。这样步25是活动步时,会发右头快进指令(使Y442得电) ,直到快进到位(行程开关SQ4受压,转换条件X412满足) ,步25成为非活动步,右头停止快进(使Y442失电) ,步26成为活动步,工件开始从中位降下位(使Y447、Y552得电) ⋯⋯。选择序列各步的控制规律为:分支时,若一个前级步是活动的,则当它与多个选择后续步之间的哪个转换条件满足,哪个后续步就成为活动步,而前级步成为非活动步。合并时,若多个选择前级步之一是活动的,当该活动步与一个后续步之间的转换条件满足,则后续步就成为活动步,前级步成为非活动步。实例中步11为活动步时,四个分支的转换条件哪个成立则哪个分支步就会成为活动步。如果按动自动加工起动按钮,使转换条件X403满足,则会进入步12,开始自动加工过程,直到转换条件X424满足,分支合并循环到初始步,开始一个新的轮回。按照控制要求,整个加工过程中主泵电机需要一直处于运转状态,所以在步11中使用了置位Y430指令,而在步11成为非活动步后, Y430并不失电。并行序列各步的控制规律为:分支时,若一个前级步是活动的,则当转换条件满足,则多个并行的后续步同时成为活动步,而前级步成为非活动步。合并时,若多个并行的前级步均是活动的,当转换条件满足,则一个后续步成为活动步,多个并行的前级步同步成为非活动的。实例中步20为活动步时,执行装件指令,装件完毕,转换条件X425满足,步21、步23同时成为活动步,即停止装件,开始工件上位降中位和主轴定位动作。由于这两个动作不同时结束,因此插入了两个没有动作和命令的空步——步22、步24 (梯形图中相应的步进接点没有连接输出继电器) ,用于分别停止两个前级步,结束相应的动作,并等待两个动作均停止的时刻,一旦时刻来到(条件X410·X427满足) ,两并行步合并转换到步25。三头同时加工时,也有类似的同步问题,在此不再赘述。
图3 自动工作功能流程图
3 结束语
通过本PLC程序设计实例可以看出,采用顺序功能流程图的程序设计方法有以下优点:a. 功能流程图与生产过程结合紧密,设计思路明确,系统操作含义清晰,有利于工艺和自控技术、设计人员的思想沟通;b. 功能流程图可以向设计者提供规律的控制问题描述方法,就易于得到相应的编程方式,易于设计出任意复杂的控制程序,并使编程更趋于规范化、标准化。
图4 主功能流程图的梯形图
图5 自动工作功能流程图的梯形图(部分)
PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。
1.程序的模拟调试
将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。
在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。
如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。
在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。
2.程序的现场调试
完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,
一、根据工程实际需求,进行功能块规划,编写子程序
在PLC中,子程序是为一些特定的控制目的编制的相对独立的程序。执行子程序调用指令CALL等,如果条件不满足子程序调用时,程序的扫描就仅在主程序中进行,不再去扫描这段子程序,这样就减少了不必要的扫描时间。
二、用字或双字数据传送给DO点方法来控制输出
在PLC的应用中通常都会有大量的输出控制,用字或双字数据传送给DO点方法来控制输出可以提高速度,只要根据实际应用的要求,合理分配输出地址,变换控制输出控制字,可以大大减少PLC程序执行的步数,从而加快PLC的程序运行速度。
三、脉冲触发SET、RESET
PLC中,使用SET指令只执行一次即可,不必每次扫描都执行这个指令,很适合与脉冲输出(PLS/PLF)指令配合使用。有些工程人员忽视了这个问题,使用了常规的方法来驱动SET指令,无意中增加了PLC程序扫描运行时间
四、避免类型转换,方法如下
以S7-200为例,它的内存格式与我们常用的PC机正好相反,它是高字在前,低字在后的。所以我们可以将字变量放在后两个字节,在程序初始化时将前两个字节清零(程序的其它地方不得使用这两个字节)。
如我们定义符号时将字变量定义在VW2,同时保持VW0的值为零。则程序中可以用VW2以字型访问该变量,同时也可以VD0以双字型访问,避免了类型转换。
为了避免使用时混淆,好以明确的符号定义来区分字类型和双字类型。在此强烈推荐类匈牙利命名法:以前缀指示变量类型,用首字母大写的有意义的英文单词的组合作变量名。本人习惯用以下缀:
b----字节型变量(byte)
w----字型变量(word)
d----双字变量(double)
r----实型变量(real)
f----位变量(flag)
btn---自复位按钮式输入(button)
sw----切换开关或自锁按钮输入(switch)
sig---传感器、编码等电平信号输入(signal)
rly---输出继电器位(relay)
……
当然,这个根据个人习惯来,没有定则,主要是利于自己区分。
假如有一个字类型变量名为VarName,为使用前面的转换技巧,我们可以这样定义:
wVarName----VW2
dVarName----VD0
在程序初始化时将VW0清零(如果是不需要记忆的变量,直接将dVarName清零也可)或者在数据块中将VW0设置为零。则以后需要以字类型访问变量时就用wVarName,需要以双字类型访问变量时就用dVarName。完全不需要类型转换。
本方法可以极大的减少程序语句数,使程序更简洁、可读性更好,由于不需要做耗时的类型转换,程序运行效率也得到提高。且数学运算量越大,效率提高越明显。
缺点是要多占用两字节的内存,以后程序中不能使用VW0。但S7-200的RAM空间很大,一般是用不完的,以226为例,有多达10K的RAM,偶从来没有超过1K。这些RAM都是花钱买来的,不用白不用,不用也是浪费了。
同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。
1、如果在ob里编写子程序段,是扫描的,但是如果您编写为FC调用,那么在FC的调用条件没有满足时,FC中的程序暂时不执行。
2、PLC的执行步数根据程序长短会不同,扫描时间会根据执行步数的不同而不同,如果用一个mov指令完成8个数字量输出的控制,当然比用8个mov指令完成8个数字量输出的控制所需要的程序步数少。
利用两个或多个常闭触点来保证线圈不会同时通电的功能成为“互锁”。三相异步电动机的正反转控制电路即为典型的互锁电路,如图5-4所示。其中KMl和KM2分别是控制正转运行和反转运行的交流接触器。
图5-4 三相异步电动机的正反转控制电路
如图5-5所示为采用PLC控制三相异步电动机正反转的外部I/O接线图和梯形图。实现正反转控制功能的梯形图是由两个起保停的梯形图再加上两者之间的互锁触点构成。
图5-5 用PLC控制电动机正反转的I/O接线图和梯形图
应该注意的是虽然在梯形图中已经有了软继电器的互锁触点(X1与X0、Y1与Y0),但在I/O接线图的输出电路中还必须使用KM1、KM2的常闭触点进行硬件互锁。因为PLC软继电器互锁只相差一个扫描周期,而外部硬件接触器触点的断开时间往往大于一个扫描周期,来不及响应,且触点的断开时间一般较闭合时间长。例如Y0虽然断开,可能KM1的触点还未断开,在没有外部硬件互锁的情况下,KM2的触点可能接通,引起主电路短路,因此必须采用软硬件双重互锁。采用了双重互锁,同时也避免因接触器KM1或KM2的主触点熔焊引起电动机主电路短路。
怎样来提高PLC程序运行速度,可以采用以下几种编程方法,仅供参考:
1:根据工程实际需求,进行功能块规划,编写子程序
在PLC中 ,子程序是为一些特定的控制目的编制的相对独立的程序。执行子程序调用指令CALL等,如果条件不满足子程序调用时,程序的扫描就仅在主程序中进行,不再去扫描这段子程序,这样就减少了不必要的扫描时间。
2:用字或双字数据传送给DO点方法来控制输出
在PLC的应用中通常都会有大量的输出控制,用字或双字数据传送给DO点方法来控制输出可以提高速度,只要根据实际应用的要求,合理分配输出地址,变换控制输出控制字,可以大大减少PLC程序执行的步数,从而加快PLC的程序运行速度。
3:脉冲触发SET、RESET
PLC中,使用SET指令只执行一次即可,不必每次扫描都执行这个指令,很适合与脉冲输出(PLS/PLF)指令配合使用。有些工程人员忽视了这个问题,使用了常规的方法来驱动SET指令,无意中增加了PLC程序扫描运行时间
4:避免了类型转换,方法如下:
以S7-200为例,它的内存格式与我们常用的 PC 机正好相反,它是高字在前,低字在后的。所以我们可以将字变量放在后两个字节,在程序初始化时将前两个字节清零(程序的其它地方不得使用这两个字节)。
如我们定义符号时将字变量定义在 VW2,同时保持 VW0 的值为零。则程序中可以用 VW2 以字型访问该变量,同时也可以 VD0 以双字型访问,避免了类型转换。
为了避免使用时混淆,好以明确的符号定义来区分字类型和双字类型。在此强烈推荐类匈牙利命名法:以前缀指示变量类型,用首字母大写的有意义的英文单词的组合作变量名。本人习惯用以下缀:
b ---- 字节型变量(byte)
w ---- 字型变量(word)
d ---- 双字变量(double)
r ---- 实型变量(real)
f ---- 位变量(flag)
btn --- 自复位按钮式输入(button)
sw ---- 切换开关或自锁按钮输入(switch)
sig --- 传感器、编码等电平信号输入(signal)
rly --- 输出继电器位(relay)
……
当然,这个根据个人习惯来,没有定则,主要是利于自己区分。
假如有一个字类型变量名为 VarName,为使用前面的转换技巧,我们可以这样定义:
wVarName ---- VW2
dVarName ---- VD0
在程序初始化时将 VW0 清零(如果是不需要记忆的变量,直接将 dVarName 清零也可)或者在数据块中将 VW0 设置为零。则以后需要以字类型访问变量时就用 wVarName,需要以双字类型访问变量时就用 dVarName。完全不需要类型转换。
本方法可以极大的减少程序语句数,使程序更简洁、可读性更好,由于不需要做耗时的类型转换,程序运行效率也得到提高。且数学运算量越大,效率提高越明显。
缺点是要多占用两字节的内存,以后程序中不能使用 VW0。但 S7-200 的 RAM 空间很大,一般是用不完的,以 226 为例,有多达 10K 的 RAM,偶从来没有超过 1K。 这些 RAM 都是花钱买来的,不用白不用,不用也是浪费了。
同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。
关于第3点"使用SET指令只执行一次即可,不必每次扫描都执行这个指令,有些工程人员忽视了这个问题,使用了常规的方法来驱动SET指令,无意中增加了PLC程序扫描运行时间"
不是很理解,能不能说得细一点,
1:如果在ob里编写子程序段,是扫描的,但是如果您编写为FC调用,那么在FC的调用条件没有满足时,FC中的程序暂时不执行。这也是我所说节省时间的意思。
2:PLC的执行步数根据程序长短会不同,扫描时间会根据执行步数的不同而不同,如果用一个mov指令完成8个数字量输出的控制,当然比用8个mov指令完成8个数字量输出的控制所需要的程序步数少。
添加一个:
4:避免了类型转换,方法如下:
以S7-200为例,它的内存格式与我们常用的 PC 机正好相反,它是高字在前,低字在后的。所以我们可以将字变量放在后两个字节,在程序初始化时将前两个字节清零(程序的其它地方不得使用这两个字节)。
如我们定义符号时将字变量定义在 VW2,同时保持 VW0 的值为零。则程序中可以用 VW2 以字型访问该变量,同时也可以 VD0 以双字型访问,避免了类型转换。
为了避免使用时混淆,好以明确的符号定义来区分字类型和双字类型。在此强烈推荐类匈牙利命名法:以前缀指示变量类型,用首字母大写的有意义的英文单词的组合作变量名。本人习惯用以下缀:
b ---- 字节型变量(byte)
w ---- 字型变量(word)
d ---- 双字变量(double)
r ---- 实型变量(real)
f ---- 位变量(flag)
btn --- 自复位按钮式输入(button)
sw ---- 切换开关或自锁按钮输入(switch)
sig --- 传感器、编码等电平信号输入(signal)
rly --- 输出继电器位(relay)
……
当然,这个根据个人习惯来,没有定则,主要是利于自己区分。
假如有一个字类型变量名为 VarName,为使用前面的转换技巧,我们可以这样定义:
wVarName ---- VW2
dVarName ---- VD0
在程序初始化时将 VW0 清零(如果是不需要记忆的变量,直接将 dVarName 清零也可)或者在数据块中将 VW0 设置为零。则以后需要以字类型访问变量时就用 wVarName,需要以双字类型访问变量时就用 dVarName。完全不需要类型转换。
本方法可以极大的减少程序语句数,使程序更简洁、可读性更好,由于不需要做耗时的类型转换,程序运行效率也得到提高。且数学运算量越大,效率提高越明显。
缺点是要多占用两字节的内存,以后程序中不能使用 VW0。但 S7-200 的 RAM 空间很大,一般是用不完的,以 226 为例,有多达 10K 的 RAM,偶从来没有超过 1K。 这些 RAM 都是花钱买来的,不用白不用,不用也是浪费了。
同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。
以上就是提高PLC运行速度的编程方法