7
昆明西门子中国代理商通讯电缆供应商
长期以来,PLC始终活跃于工业自动化控制领域的主战场,为各种各样的自动化控制设备提供了非常的控制应用。其主要原因在于,它能够为自动化控制应用提供和比较完善的解决方案,适合于当前工业企业对自动化应用的需求。
随着PC及因特网时代的到来,工业PC或PC-based控制器由于可以融入到网络时代的信息系统中,具有网络系统的基本特性,即具有、格、系统开放、丰富的人才基础等优势,因此PC-based控制器一经出现就具有很强的生命力,发展为迅猛。有观点说,PC-BASED控制器将取代传统PLC,当然解决性及编程问题。近几年来,这些问题已基本得到解决,PC-based控制器从外观到性也都开始可以与PLC相近。在编程方面,由于IEC61131-3编程语言标准的推出和广泛采用,为PC-based控制器的高速发展铺平了道路。这样,PC-based控制器不仅具有PC的优势,也具有传统PLC的优势。它可无缝地融合到网络时代的信息系统中。
那么,PC-based一定会取代PLC吗?二者应用于包装生产线时,它们各自发挥着何种不同的作用?让我们听听来自三位的看法。
贝加莱工业自动化公司行业销售经理 董继鑫
在自动控制领域,PLC技术和PC-based技术是当前比较具有代表性的控制技术,两者的技术起源和发展有较大的差异。
PLC(Programmable Logic Controller)产生于上世纪70年代初。早的PLC是以替换继电器系统的角色出现,其主要实现的功能仅仅是逻辑简单的顺序控制功能。PLC一经出现,就以其高性、小体积和直观的编程模式而显示出强大的生命力,成为自动控制领域的“”。
PC-based是一种基于PC技术的控制系统。早的PC-based控制系统是以工控机为,通过扩展带PCI接口的板卡组成。PC-based借助于IT技术的发展,在运算、存储、组网和软件开放性方面具有优势。
从以上的阐述可知,PLC和PC-based两者在技术特点上存在明显区别。PLC具有体积小、功耗低、抗干扰能力强;具有很高的性,其平均无故障率时间间隔(MTBF)可达50万、甚至100万个小时;具有简单直观的编程模式(如梯形图);具有内部实时时钟。而PC-based具有大运算能力;具有开放标准的系统平台和PCI接口;精美且的显示技术;丰富的组网能力。但系统的性略差,如性能较好的IPC的平均无故障时间间隔约5万小时。此外,PC-based虽然具有很强的CPU,但其多任务操作系统是非实时的,所以程序的循环周期反而没有的PLC快。
这些差异决定了PLC和PC-based两者在包装机械上发挥不同的作用。PLC通常处于设备底层,为设备提供的、实时的控制,包括IO和Motion方面的控制。而PC-based通常处于设备的操作层,用于数据的采集、存储和人机界面显示等。就目前国内的包装机械的发展水平来说,与厂商相比还存在较大差距,拥有高度自动化和大型化的成套包装机械设计、生产能力的厂商不多。控制简单、自动化程度较低的单机设备占主流,所以基本都采用PLC作为控制器。
随着中国包装技术的飞速发展,未来包装设备的控制器应该能够融合PLC和PC-base两者的技术优势。事实上现代控制技术发展的确呈现出这种趋势,如贝加莱公司的B&R 2005系列PCC控制器就是这种发展趋势的代表。这种融合了PLC和PC-based的控制器,其技术优势是非常明显的,势必成为未来包装机械自动化的主流控制器。
北京和利时系统工程股份有限公司事业部总经理 徐昌荣
尽管PLC和PC-based均可用于包装设备自动化,但二者的侧有所不同。PLC适合于设备控制,而PC-based多地用于设备运行状态的监视。相对于PC-based而言,PLC具有配置灵活、体积小、适应恶劣环境、抗干扰性强、性高等优点,但在软件功能及系统开放性等方面比PC-based稍差。当然,随着计算机技术和控制技术的不断发展,PLC和PC-based都在吸收对方的优点,以适应多的应用现场。就我所了解的情况而言,PLC在包装设备中的应用远远多于PC-based在包装设备中的应用。
凭借十几年工业控制产品的开发经验和雄厚的技术积累,和利时公司研制出新一代小型一体化PLC产品HOLLiAS-LEC G3。该产品已在各类包装设备中成功应用,应用案例包括DXD自动包装机、挂面包装机等。应用G3 PLC控制的DXD全自动包装机集送料、制袋、、封切等包装工序于一体,具有电眼跟踪、PLC控制、无级变速纠偏等功能,计量,符合行业标准,具有性能稳定、操作方便、运行等优点。
随着包装设备自动化需求的不断增多,越来越多的包装设备厂商考虑在其设备中配备的自动化产品,以提高产品的技术含量,提升市场竞争力。个人认为,在通用设备中,用户倾向于采用PLC加HMI的方式对包装设备进行控制。在部分具有特殊需求的设备中,一部分用户也可能会采用PC-based作为自动化解决方案,或者用PLC加PC-based的解决方案。总之,就产品的性、稳定性、灵活性、性价比等方面考虑,PLC在包装设备自动化领域比PC-based具有广阔的应用前景。
西门子(中国)有限公司自动化与驱动集团OEM 管理部灌装与包装行业业务发展经理 张春林
PLC又叫做可编程控制器。从传统意义上讲,它主要应用在逻辑控制,顺序控制及时序控制等相对比较简单的工业控制场合。它具有体积小,编程简单实用,安装方便灵活等优点。缺点是处理速度慢、扩展不够灵活,各个厂商的编程语言不同等。
随着PC-BASED的工业计算机(简称工业PC,与普通的计算机相比,它具有防尘、防振、抗电磁、耐高低温等优点)的发展,以工业PC、I/O及监控装置、控制网络组成的PC-BASED的自动化系统逐渐成为工业自动化的另一种实现方式。PC-BASED自动化系统源于PC,可融入到网络时代的信息系统中,具有、格、系统开放、丰富的人才和应用基础等优势。
对于一般的包装设备,如袋成型//封口机、饮料灌装机等等,主要用到的是逻辑,顺序及时序等控制。西门子公司的S7-200和S7-300系列PLC广泛地应用于这一类包装机。
如某个场合不仅要有逻辑、顺序及时序等控制,还要有强大的计算、数据处理和过程控制,PLC则很难胜任。如一条可生产上百种产品的食品加工和包装生产线,需要大量的配方存贮与调用。普通的PLC受内存的影响,很难完成此任务。在类似这种场合,SIEMENS基于PC的工业自动化控制系统Wi是非常合适的产品。通过适当的二次开发,还可实现设备运行状态动态显示;电气参数、工艺参数、实时显示;实时曲线显示、历史曲线显示、大型动态标准数据库,提供年报表、月报表、日报表和随机打印报表的功能。
当前基于PLC的控制系统仍占主导地位,这和包装机械的整体水平有关。目前国内包装机械的状况是单机的自动化应用多,整条包装线联网的少,全厂或全公司联网控制的少。随着经济的发展,MES和ERP的普及,PC-BASED控制系统会越来越多地被采用。
PLC目前较多地应用于工业控制,因为它有较高的稳定性和性。兼有PLC和PC的优势,在网络化和信息时代,它符合时代的潮流。这样看来,在工业控制和信息管理要求日益提高的情况下,PLC确实将逐渐失去部分市场;但我们还应看到,PLC生产商早已经开始利用IT业的一些新的软硬件成果不断完善和扩充PLC的功能。PLC上现场总线、通讯和网络接口的出现,使得一个个PLC不再是孤立的。PLC将继续向开放式控制系统方向发展,使现代意义上的PLC具有新的内涵。实际应用中常常是PLC和IPC结合在一起,PLC在下位,IPC在上位。从技术上看,PLC在逐渐采用一些IT技术,IPC也在向PLC的某些特性靠拢。PLC和PC-BASED控制系统将呈现融合和竞争并存的状况。
其实,真正关心PLC的故障,还是在应用过程中。终发现PLC有问题,也是在应用的时候。而对PLC在应用时候的故障诊断,当然是非常重要的,否则,不是PLC的问题能够解决,而是这个客户今后还会不会买你的东西的问题了。
但是,在应用过程中,往往用户以为出问题的PLC里,有都不是PLC的问题。而是由于用户不熟悉而造成的以为是故障、而其实不是故障的现象。用户的接线错误、编程错误、开关位置的错误、仪表故障、传感器故障等,都常常会使人误以为是PLC的错误。
当发现PLC没有按照自己的期望来进行工作时,要对PLC和PLC周边的设备和环境进行诊断。
从PLC外部的情况来进行的故障诊断[/b][/i]
在PLC没有像期望的那样开始工作的时候,应该先从PLC的外部来进行判断,这样,可以比较轻易地排除那些不是故障的误会。
所有的PLC在CPU模块、I/O模块或电源模块上都有LED指示灯。通常,红灯表示问题,绿灯表示OK。如果一个LED在闪烁,通常表示功能正在执行或者这个模块在等待什么。对LED灯状态的正确诠释可以节省你很多故障诊断的时间。所以在故障诊断之前,你应该把制造商的故障诊断指南看一遍并放在手边。
如果PLC不能进入运行(RUN)模式,你可以用下面的方法来看看问题是在硬件还是软件:
a)临时将终止循环指令放在你的用户程序的行。如果现在PLC可以进入运行模式了,表示问题在你的软件中;而不是PLC的硬件问题。(有些PLC需要你在进入运行模式之前,先所有的错误状态,即使原来的问题已经正了)。
b)将PLC的内存复位(注意!,你要将PLC的内存的内容做一份拷贝,或者,你确信你愿意丢失内存中所有的程序、数据和组态)。如果PLC现在可以进入运行模式,问题就出在组态或者冲突使用的内存上。
如果在检测一个传感器时,你发现PLC不能从一个传感器得到信号,检查该传感器的输出是否正常,接线是否正确。如果传感器经检查没有问题,则换一个同型号的输入模块,如果PLC能够识别该模块的改变,就表示输入模块故障了(或者你刚才传感器连线错误了),那么,可以按照如下的方法观察PLC输入模块的LED灯是否与传感器的状态变化一致:
a)如果输入LED没有动静,用万用表检查PLC输入模块的端子看看信号是否变化。如果没有,将传感器与PLC的连接断开,单对传感器进行测试。看看外接电源是否正常,检查直流电源的性是否接反。有些PLC是漏电流型(SINK)的,所以对应的传感器电路是正端子接到PLC的输入接点上,其它的DC输入模块是电流源型(SOURCE)的,则传感器电路要通过电源的地线接到输入接点上。
b)如果LED状态是发生变化了,可能是你的程序有问题。在你的用户程序中的行加一条终止循环的指令,然后运行程序,观察输入映射表,如果该位现在改变了,问题就在你的程序,很可能是你的程序中有一条指令对输入映射表进行了改写,从而改变了它的值。
如果输入映射表依然不随着输入模块的LED的状态而改变,那么,可能是传感器电路有故障。传感器电路的电流能力可能不足以驱动输入状态,虽然它可能足以改变LED的状态。检查输入触点有没有不正常的小的电压变化。
如果一个执行器看来无法得到PLC试图写给它的信号,观察输出模块的LED,确信它们是否随着PLC改变输出状态而一起改变:
a) 如果LED确实改变,用万用表检查输出模块的端子,是否提供了足以驱动外部电路的信号,同时也检查性是否正确。如果是,则将执行器从PLC上断开,对执行器单进行测试。(有些输出模块有保险丝,检查一下是否保险丝断了?)
b) 如果LED 不变化,检查输出电路的电源,和它与输出模块的接线,(DC 输出可以是源型或漏型的),如果接线正确,将执行器从PLC的输出模块断开,看看现在LED在不带执行器时是否改变。
换一个同型号的输出模块,如果PLC可以改变的输出状态,那么刚才的模块或接线就有问题。
[i][b]PLC系统的硬件、组态和编程的故障分类和诊断方法[/b][/i]
如果按照上面的方法,发现连接到传感器或执行机构都可以工作,那么你就可以应该PLC内部状态或PLC程序的问题了。
由于PLC是由人来进行安装、组态和编程的,所以可能会发生很多人为的使用过程中的错误。PLC制造商(如德维森)通常都提供了很多工具来找出这些错误。这些错误可以分为以下几类:
[b]致命错误[/b]
这些错误将导致PLC离行模式而进入故障模式(类似于硬件故障所导致的情形)。致命错误通常发生在PLC开机自检时或程序执行时的部件失败。有的编程和组态问题(如定时器时,试图运行一个不存在的程序,等)也会导致致命错误。
当PLC进入故障模式时,它将故障LED打开,并将所有的输出关闭为OFF(或者冻结在它们的上一个状态),PLC也会在内存中保存一个故障代码,编程人员可以读取该故障代码确定故障的原因,解决问题后,故障状态,将PLC电源关掉再打开,重新进入运行模式。
现在的PLC通常都会保存对几个近的故障的详细描述,并允许编程人员编写在致命故障发生时可以运行的故障程序,我们在九章曾经描述过故障进程,本章我们主要讨论如何找到和使用故障代码。
[b]非致命故障[/b]
非致命故障是PLC可以探测到,但不至于使PLC离行模式的故障。有些可探测的硬件问题,如内存的后备电池电压低,只导致非致命故障。非致命故障也可以由组态和编程错误引起,如一个定时中断程序的执行被一个的程序的运行而延迟,或者一个算术操作产生了一个太大以致无法存入目标内存的数,等等。
非致命故障导致PLC设定相关的状态位或者将相关的错误代码写到内存中。当结果太大或太小以致无法保存时,数据字处理指令将把内存中的算术标志位设置为1。用户程序应当检查这些状态位或代码,并作出响应,因为PLC将像没有错误发生一样继续执行程序,有些非致命错误状态位在的章节已经讨论过,本章我们将讨论另外一些。
[b]编程或组态逻辑错误[/b]
这些错误是PLC不能自动检查出来的,但可以用程序中的故障检测指令或者编程单元的程序监视功能来检查。
逻辑错误的例子包括一个用户将一位设为OFF而不是ON,两段用户程序试图控制同一个输出,或者结构化编程旁路了一段需要的程序等等。
早期的PLC设计为不允许逻辑错误,如两个横档控制一个输出,或者跳转指令向程序进行跳转,等,但用户需要大的灵活性,因此,即使这些措施都取消了。有些编程单元在编程人员写出上述具有潜在错误的逻辑语句时,会提供警示信息,但编程者可以忽略它们。
编程语言都包括简单的调试工具:提前终止扫描循环的指令,这样程序可以一段一段来检查;导致致命或非致命的错误,使PLC在某些情况下立即停止;以及其它特别为调试程序中的某一个问题的指令。标准指令比如,计数器,可以临时插入程序中,记录事件发生的次数。编程软件也包括调试工具,如在用户程序执行时,监视和改变数据内存,强迫I/O映射位开或者关,以观察程序如何响应;记录某个特别位或特别字的短时间的变化,然后用历史趋势图显示这些变化;当某个特别位在使用时,生成一个程序中所有地方的交叉参考清单;还有搜索工具,可以找到程序中某个特别地址或指令在程序中的位置。



焦作钢厂使用的PLC控制系统有十几处之多,其中除尘使用的PLC常出现无输出的故障,使得的装备不能很好地发挥作用。为此,对PLC及外围设备进行了综合分析。PLC为光洋电子有限公司生产的SH48-R1型控制器,24点继电器输出,大开关容量:阻性负载2A,感性负载0.2。采用JZ7型继电器,JLXK1-111型行程开关,检查发现损坏的输出端子与继电器之间连接的印刷铜箔烧断,其余正常。分析认为,输出回路上的行程开关位于室外的金属构架上,且数量多,易形成输出回路对地短路而烧毁印刷铜箔。
针对上述问题,提出了以下几种解决方法:
(1)在满足控制系统的前提下,尽量减小所选用保险的保护值。根据开关容量和继电器线圈 容量的要求,在控制回路中可选用1A的保险管,作为PLC输出回路的保护。
(2)将火线与中线互相对调位置,使输出回路发生对地短路时,短路电流不流经控制器输出端。
(3)加强线路绝缘,同时,控制电源采用隔离变压器,使控制回路成为不接地系统,以减少接地短路故障的发生。
(4)加大控制器内部输出端子与输出继电器连接导线的面积,提高其导电能力。
后考虑性,采用了(1)、(3)两种方案相结合,同时在控制回路安装了接地报警指示灯,加强线路接地故障的检测,以便及时发现故障,予以排除。改造后,PLC控制系统工作正常,再未出现无输出的故障。
由以上完整接口代码分析,内核共留给用户14个向量接口,但40点嵌入式PLC只使用了七个向量接口,每个接口就是调用一个C函数,共7个C函数。由于是汇编文件调用外部C函数,故要作外部函数声明。
2.关于驱动程序所能使用的单片机的资源
由于内核占用了大部分资源,驱动程序所使用的资源不能覆盖内核,因此在编写驱动程序时特别注意单片机资源的使用,以下列出若干注意事项,详细内容请参阅《EASY原理及应用》。
(1)驱动程序代码地址范围定义在0XE000-0XF7FF共6KB之间,否则会覆盖内核程序!解决方法:在工程项目属性的Code Range编辑框中输入0xe000-0xf7ff"。
(2)能使用的XDATA RAM地址范围为0X3600-0X3FFF,总共2560字节。解决方法:在工程项目属性的XDATA Range编辑框中输入"0x3600-0x3fff"。
(3)能使用的DATA RAM地址范围为0X58-0X67,总共16字节,解决方法:在工程项目属性的Data base编辑框里输入"0x58";由于可使用的data ram数量十分有限,因此在定义变量时当data ram不够,应将变量定义为xdata存储器类型。为了提高程序运行实时性,使用频繁的变量应考虑安排为data 存储器型变量。
(4)能使用的BDATA RAM地址范围为0X20-0X23,总共4字节,解决方法:在工程项目属性的Bit base编辑框里输入"0x00";
(5)任何情况下,用户只能使用工作寄存器0组,不要修改非0组的寄存器的值。在中断函数中使用0组寄存器先保存个工作寄存器,并在函数结束前恢复。
3.关于头文件Easyplc.h分析
头文件仅列出如下和内核相关的变量来分析。
unsigned char xdata Ram_px[4] _at_ 0x240;//内核定义的接口变量,由驱动程序传递给内核的嵌入式PLC输入端口映射值。
unsigned char xdata Ram_py[2] _at_ 0x180;//内核定义的接口变量,由内核传递给驱动程序的嵌入式PLC输出端口映射值。
unsigned char bdata Corebd _at_ 0x027;//内核定义的接口变量,由内核传递给驱动程序的嵌入式PLC正常运行的位标志,和PLC出现运行错误的位标志所在的bdata地址.
sbit F_key_set=Corebd^7;//嵌入式PLC正常运行的位标志.
sbit F_plcerr=Corebd^5; //嵌入式PLC出现运行错误的位标志.
unsigned char data cpye_reg[8] _at_ 0x00;//定义这个地址数组,其作用仅仅是在中断函数中保存0组工作寄存器。
4.关于Easyplc.c代码分析
(1)初始化函数:共有4个初始化函数,分别为用户端口初始化函数void InitStartc(void);用户上电初始化函数void Init_Startc(void);
用户设置初始化函数 void InitSetc(void);用户运行初始化函数void InitRunc(void)。这四个函数功能都是初始化用户定义的变量和配置c8051f040单片机的特殊寄存器。
(2)2.5ms周期扫描函数void Tmsc(void)代码分析:该函数代码如下
void Tmsc() using 0
{
unsigned char xdata len[8];
len[0]=cpye_reg[0];// code 1
len[1]=cpye_reg[1];
len[2]=cpye_reg[2];
len[3]=cpye_reg[3];
len[4]=cpye_reg[4];
len[5]=cpye_reg[5];
len[6]=cpye_reg[6];
len[7]=cpye_reg[7];// code 2
UserDisplay(Xlamp);// code 3
if(bbbbb_cnt-- >0)
{
UserSampl(bbbbb_cnt,Xbbbbb); //code 4
P1MDOUT=0xff;
}
cpye_reg[0]=len[0];// code 5
cpye_reg[1]=len[1];
cpye_reg[2]=len[2];
cpye_reg[3]=len[3];
cpye_reg[4]=len[4];
cpye_reg[5]=len[5];
cpye_reg[6]=len[6];
cpye_reg[7]=len[7];//code 6
}
由于该函数是被内核的定时中断函数所调用,属于中断程序的一部份,因此定义该函数时用关键字"using 0"来确定使用0组工作寄存器。
code 1-code 2:是将0组工作寄存器保存起来。
code 3:调用此函数实现LED动态扫描刷新。
code 4:调用此函数实现输入信号采样,每路输入信号连续采样8次。
code 5-code6:将0组工组寄存器恢复。
以上代码除了code 3和code4是由用户来根据实际硬件来编写外,其余部分可作为固定模式。需要特别注意:该函数代码运行总时间不要过40us,以免影响内核的运行。另外,由于Tmsc()是运行于中断期间(内核定时中断所调用),所以Tmsc()以及它所调用的函数的局部变量数据段不能和其它函数局部变量数据段相覆盖,因此需要在项目编译连接属性的overlay列表框中输入:"*!Tmsc,"。
(3)演算周期扫描函数void Stepc(void)分析:
该函数是内核的主循环所调用的代码如下
void scanc()
{
if(bbbbb_cnt <= 0)
{
UserScanI(Ram_px); //code 1
bbbbb_cnt=8;
}
UserScanOut(Xoutput); //code 2
UserScanLamp(); //code 3
UserScanSignal(); //code 4
}
code 1:调用该函数实现对输入采样值滤波后赋给内核接口变量Ram_px。
code 2:调用该函数实现对输出值刷新。
code 3:该函数实现对输入输出LED刷新。
code 4:该函数实现对"RUN"LED和"ERR"LED刷新。
完成程序编辑,并设置好项目编译连接属性后,便可编译连接工程项目,然后可打看Easy.M51列表文件,查看程序所有的占用的数据存储器以及程序存储器和工作寄存器是否在允许使用范围之内。如有出范围,应对程序作适当调整,直到符合后,生成的Easy.hex文件。利用Downhex.exe工具软件,通过串口0下载到40点嵌入式PLC中。
五.其他说明
笔者写的40点嵌入式PLC驱动程序没有开辟其他的中断,如果用户需要自己使用中断,如使用T4中断,须用关键字"interrupt 16"来定义T4中断函数。并且使用关键字"using 0"来确定使用0工作寄存器组。在项目属性的interrupt vector编辑框里将中断矢量由0改为0XEOOO,使中断矢量重定位为0XE000。并且同样需要将0工作寄存器保存。如以下是T4中断函数代码范例: