为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

新手学习PLC编程的入门建议

2012-09-25 43页 doc 264KB 17阅读

用户头像

is_412151

暂无简介

举报
新手学习PLC编程的入门建议 新手学习PLC编程的入门建议 wjh   鄙人原本是化工专业毕业的,后因工作需要,加之个人兴趣,才转行搞仪表、机械。十年前,我刚开始使用PLC时,也是一头雾水。仗着自己对硬件、工程知识的熟悉,和对组态软件的粗浅了解,硬着头皮接下了任务。当时已经来不及接受培训,相关资料极其缺乏,仅有的参考资料是一本英文的S7-200手册,以及西门子网站上找到的一些全西文的示例,总算在三个月内完成了系统的构建、软件的编写工作。期间走弯路、出故障是家常便饭,经常搞得我茶饭不思,而且还由于操作不慎烧毁过一台PLC。所以我非常理...
新手学习PLC编程的入门建议
新手学习PLC编程的入门建议 wjh   鄙人原本是化工专业毕业的,后因工作需要,加之个人兴趣,才转行搞仪表、机械。十年前,我刚开始使用PLC时,也是一头雾水。仗着自己对硬件、工程知识的熟悉,和对组态软件的粗浅了解,硬着头皮接下了任务。当时已经来不及接受培训,相关资料极其缺乏,仅有的参考资料是一本英文的S7-200手册,以及西门子网站上找到的一些全西文的示例,总算在三个月内完成了系统的构建、软件的编写工作。期间走弯路、出故障是家常便饭,经常搞得我茶饭不思,而且还由于操作不慎烧毁过一台PLC。所以我非常理解那些刚入门的网友两手抓瞎的感觉。 在此,我想粗略的总结一下自己的学习之路,供网友们参考。 1、编程需要坚强的毅力和足够的耐心 人各有所长。有些人把编程看作一项冗长而枯燥的工作;有些人把编程看作一项趣味的智力游戏。如果你是前者,强烈建议你远离这份工作。毕竟编程工作是对人的毅力和耐心的挑战。我所在实验室中,很多学生看到我编程序就会惊讶于我面对这一堆堆符号所表现出的专注。其实,这是兴趣使然。兴趣使我具备了足够的毅力和耐心。经过无数次失败后,当看到一个个符号按我的思路整齐的排列,PLC按我的要求有条不紊的运行时,兴趣得到了极大的满足,如同打通了一个游戏的关口。所以,我告诉这些学生:你们看到的是一堆枯燥怪异的符号,我看到的却是一群热情奔放的舞者,而我则是她们的导演。 2、编程需要敢于实践的信心 我曾经教过一个学生学AutoCAD,我对她的唯一要求就是实践。我告诉她:你随便怎么操作,大不了一张图重画;最坏的结果是系统崩溃,没关系,系统重做,再来;只要电脑没被砸了,怎么都行。两年后,我再看到她做的CAD图纸,也自叹不如。 同样道理,只有不断地在PLC上运行这些指令,观察运行的结果,才能弄清PLC指令的作用。很多初学者对PLC一脸的迷茫,往往是出于一种畏惧,担心损坏设备。而这些畏惧是没有任何道理的。仔细的阅读手册是非常重要的,但是仅靠读书是成不了一个工程师的。更何况手册上的内容并非面面俱到。我在接触到那些不熟悉的指令时,喜欢单独编一个小程序,让PLC运行。然后逐个修改条件,观察运行的结果(MicroWin为用户提供了非常好的监控手段),反过来再重新理解手册的描述,这样就可以非常直观的理解这些指令的作用和使用方法。不必担心自己写的程序会有什么问题,会影响PLC的正常工作。程序有没有问题,只有让PLC运行了才能发现。而发现问题并解决问题就是对自己能力的提高。撇开硬件操作不谈,单就软件来说,我还真没有遇到过由于软件问题而损坏PLC的事。在这里不必担心继电器电路接错线可能造成的后果。所以,大胆的实践是PLC编程的必由之路。 当然,大胆实践并不是野蛮操作,而是必须遵循必要的规范。还有一个要注意的,在程序未经可靠性证实之前,千万不要挂接负载,以免造成不必要的损失。数字量的输出有LED显示;而模拟量处理可以采用一些硬件或软件模拟手段来解决。 3、编程需要有缜密的逻辑思维 编程本身就是一种逻辑思维过程。在高级语言中,使用最多的是if then else、select这些条件判别语句,这就是逻辑中的因果关系。PLC程序就是由这些因果关系组成的:判别条件是否成立,进而决定执行相应的指令。最初的PLC是用来替代继电器逻辑电路的,所以继承了继电器电路以触点作为触发条件的描述方式。在PLC中,以虚拟触点代替了继电器的金属触点,而继电器电路所表达的逻辑关系还是被完整的保留下来。即使引入了继电器电路难以胜任的数值处理过程,PLC从根本上还是在执行一个个因果关系。所以,理顺对象的各个事件之间的逻辑关系,是编程之前必须精心做好的准备工作。我在接到一项任务后,第一件事就是整理出一份逻辑关系图,与用户反复商讨,取得用户的认可,然后才真正进入程序的编写过程。 4、不可或缺的相关知识 PLC的程序是直接作用于对象的具体工艺过程,那么对对象具体工艺过程的理解是非常重要的的。我在与用户的交流过程中,会用我所掌握的Unit Operation的知识分析用户的工艺过程,协助用户整理过程控制中的各个逻辑关系,甚至包括各种仪表、硬件的配置。这得益于我原本所学的专业。当然,不能要求所有搞PLC程序的工程师都有我这样的经历。但是有两门知识却是不可或缺的:一是过程仪表的硬件知识,包括传感器、变送器(二次仪表)和PLC本身,这是构建控制系统的基础;二是过程控制理论,包括各种控制模型的原理和应用,其中最重要的是二位调节和PID调节模型。PID调节是目前用得最广泛的过程控制手段,且变化多端。学习PID最好的方法就是读书。几乎所有讲解过程控制的书籍都有关于PID的内容,多读基本相关的书籍对理解PID是很有益处的。我发现不少网友在进入PLC领域时,缺乏这些相关知识。这并不可怕;可怕的是当事者不能静下心来弥补知识的缺陷。我们不要怪罪学校没有教授这些内容,而是要注重自己如何去学习这些知识。工作中遇到的许多问题是学校里没讲过的,这不能成为我们拒绝工作的理由,而应该以积极的态度去应对这些问题。我的体会是,为了解决工作中的问题而学习的知识,比课堂上学的东西更容易记住。 5、养成良好的编程习惯 每个人编程都会有不同的习惯和特点,不能强求一致。但是一些好的习惯还是应该为大多数人所遵循。一是理顺逻辑关系、时序关系,编制程序框图;二是合理分配主程序、子程序和中断程序;三是合理分配寄存器,编制寄存器符号表。 PLC编程更接近于单片机,或者说PLC就是模块化的单片机。因此PLC的很多操作都是直接针对寄存器的,如果在程序中出现不合理的寄存器地址重叠,一定会出现不可预想的后果。编制寄存器符号表不仅可以避免上述问题(MicroWin会有问题提示),而且可以使程序具备更好的可读性。这和VB中定义变量有异曲同工之处。 VB编程中关注的是事件,不强调主程序和子程序的观念,因为VB主程序的工作是由PC的操作系统完成的。PLC则不然。PLC程序是以主程序为主干的,CPU不断的循环执行主程序,只有触发条件成立时才会调用子程序或中断程序。即子程序和中断程序所执行的任务不是全时需要的。如果把这些任务都放在主程序中会无端增加主程序的工作量,降低程序的效率。这点和单片机的编程思路是一致的。子程序的使用可以使整个程序的逻辑更清晰。而且子程序可以分开编写、调试,最后“安装”到主程序上。这样你可以一个一个解决问题。 PLC编程,无论是LAD,抑或STL,都不如VB那么直观、有趣,更不如CAD那么形象。但比单片机的汇编语言的可视性强多了。对于初学者,LAD(梯形图)的编程相对直观,更容易上手。 最后,PLC提供了丰富的指令、模块,比单片机方便了很多。但是初学者编程时应尽量先使用简单的指令达到目的。尽管看上去有点土,却不失为一个入门的好途径,且对你理解那些较为复杂的指令会有帮助。具备了一定经验后,应该考虑掌握复杂指令的应用,以及程序的优化。 学习PLC密决 ----   1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来 再参考别人的提示,你就知道自己和别人思路的差异。 2.别小家子气,买本书几十块都舍不得,你还学个P。为了省钱看电子书,浪费的时间绝对 超过书的价值。当然如果查资料,只能看PDF。 3.学习新的开发软件时,一定要看帮助手册。买的书不够全面。刚接触一个软件,什么都不 懂,就盲目的问东问西,让人看起来很幼稚。 4.不要蜻蜓点水,得过且过,细微之处往往体现实力。 5.把时髦的技术挂在嘴边,还不如把过时的技术记在心里。 6.看得懂的书,请仔细看;看不懂的书,请硬着头皮看。 .别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍。 7.多实践,调试,去写去调,只用软件模拟,是永远成不了高手的。 8.保存好你做过的所有的源程序、原理图等----那是你最好的积累之一。 9.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会 自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就 能找到很多相 关资料,别老是等待别人给你希望,看的出你平时一定也很懒! 10 到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问题早就 有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己的帖子没人回 的。 11,论坛论坛,就是大家讨论的地方,总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你讨论呢。 什么样的人是浮躁的人 如何学习PLC ----   弄通有关PLC程序设计理论是重要的。没有这方面的理论准备或指导,仅靠在实践中摸索,简单的问题还好办。复杂的就不好办了。不仅无从下手,而且花了很多时间与精力,也难编出效率较高、质量也较高的程序,常常是事倍功半。 但是,编程的具体实践,以及在这个实践中得来的知识或技能,即经验,也是重要的。没有经验,仅有理论,既无法深刻理解理论,又无法灵活应用理论。这正如学数学,如仅了解一些定理或记住一些公式,没有作相应的练习,肯定是学不好的。更不用说,任何理论也都只是经验的总结,归根到底也都有是来自实践。 1、经验积累 经验有别人的,也有自己的,都很重要。前者要靠细心学习,后者要靠用心积累,都要在一定的时间与必要的精力。 别人的经验有上了书的或登载在杂志上的。有的是细心学习别人的,但多数是我自己的经验。所有的例子都经我测试过,都经实践证明是可行的。我想,别的书本或杂志上介绍的也会是这样的。所以学习这样杨功的经验是必要的。 还有就是你同事的经验,也是值得学习。这种经验离你很“近”,很易借鉴。 自己的经验则是最重要的。要在自己的实践中,积累自己的经验。同时,最好在学别人的经验时,也能亲自作些测试,能使自己也有类似的经历,进而把这些经验变成自己的。这也是自己经验的重要积累。 还有一些失败的经验,这往往是不会公开的,但这些经验也要学习,也要积累。 经验的积累要用自己的脑记,更要用电脑记。最好作些分类,建立一个自用的程序库,以便于随时引用。 2、经验升华 经验还有待升华。升华有三个层次: 最低的层次就是建立一个典型的程序库,供今后再用。若程序复杂,还可建一些功能块,或子程序,以便以后引用。 其次,要总结出有效算法。如单按钮起停程序库等。 最高层次的升华是把经验上升到理论的高度,为丰富PLC程序设计理论作贡献。我想,随着PLC使用的普及与提高,是会有越来越多从经验中升华出来的,而又能用以指导实践的PLC编程理论的。 3、经验应用 经验积累、经验升华都是为了应用。经验应用有三方面: 1)用作工程设计模板。设计新系统时,选用一个或几个与现设计工程类似的,已取得成功的工程,作样板进行设计。这既可减轻设计的工作量,又增加设计的成功率。这也是信息可重用的一大好处。 2)用作程序设计参考。在无成功的工程可作样板时,在新设计的逻辑中,仍有相当一部分控制逻辑,可采用或借用已有典型逻辑,这也可减少设计的工作量,增加设计的成功率。 3)用作算法设计参考。在既无样板可参照,又无典型可采用时,还可运用过去的一些成功的算法。 经验是宝贵的,但是经验特别是个人经验,总是有限的。所以,经验的应用也还要与编程理论相结合。 如何学习别人的PLC程序 ----   1 收集资料。在收集资料时不仅要收集程序还要收集程序所附带的工艺流程及I/O分配表。 2 程序分类。在收集到前人的程序后,首先加以分类。以不同品牌的程序分类——再以不同功能细分。 3 选择程序加以理解。分类完成后就是慢慢的“消化”程序了。首先选择自己熟悉的PLC程序或是自己将要用到的程序样例下手,这样理解起来比较容易。 4 对于有工艺流程及I/O分配表的程序进行理解。 1) 了解程序的工艺流程。 2) I/O分配。把I/O分配表中的说明加在程序的注释中。 3) 理解中间位。在程序设计时肯定会用到诸多的中间位做转接,然后搞清楚每一步或每一网络所对应的中间位的功能,在程序中加以注释。 4) 理解定时器。程序中定时器的功能要清楚,特别是有时间日期控制的,定时器的功能是比较重要的。其意义也要记录下来。 5) 理解计数器。 6) 理解陌生指令。在“消化”别人程序的过程中,不勉会看到一些自己没用过或不熟悉的指令,这也是自己要重点理解的对象,要准备一份电子指令手册随时查找,并在程序中记录。这才是自己要学习与进步的地方。 5、 对于没有任何说明的程序进行理解。 1) 指令应用。对此类程序主要是注意程序中的指令应用。把指令截取下来,以指令名称为为文件名另存在文件夹中。 2) 分系统另存。对于能理解并能整理成系统程序加以另存,比如说程序中的时间系统、PID系统等等的程序。 3) 所有的PLC指令都是大同小异的,当以后工作中能应用到的部分可以就地取材,举一反三。 更重要的是要了解设备的工艺,只有熟悉了产品和掌握了程序的基本编写方法,才能得心应手!! PLC基础学习方法论谈 ----   学习PLC入门方法其实主要是两点,1.选择一个PLC, 2边学边练 一、问题提出。 可编程控制器技术最主要是应用于自动化控制工程中,如何综合地运用前面学过,根据实际工程要求合理组合成控制系统, 在此介绍组成可编程控制器控制系统的一般方法。 二、可编程控制器控制系统设计的基本步骤 1 .系统设计的主要内容 ( 1 )拟定控制系统设计的技术条件。技术条件一般以设计任务书的形式来确定,它是整个设计的依据; ( 2 )选择电气传动形式和电动机、电磁阀等执行机构; ( 3 )选定 PLC 的型号; ( 4 )编制 PLC 的输入 / 输出分配表或绘制输入 / 输出端子接线图; ( 5 )根据系统设计的要求编写软件规格说明书,然后再用相应的编程语言(常用梯形图)进行程序设计; ( 6 )了解并遵循用户认知心理学,重视人机界面的设计,增强人与机器之间的友善关系; ( 7 )设计操作台、电气柜及非电器元部件; ( 8 )编写设计说明书和使用说明书; 根据具体任务,上述内容可适当调整。 2 . 系统设计的基本步骤 可编程控制器应用系统设计与调试的主要步骤,如图 1 所示。   图 1 可编程控制器应用系统设计与调试的主要步骤 ( 1 )深入了解和分析被控对象的工艺条件和控制要求 a .被控对象就是受控的机械、电气设备、生产线或生产过程。 b .控制要求主要指控制的基本方式、应完成的动作、自动工作循环的组成、必要的保护和联锁等。对较复杂的控制系统,还可将控制任务分成几个独立部分,这种可化繁为简,有利于编程和调试。 ( 2 )确定 I/O 设备 根据被控对象对 PLC 控制系统的功能要求,确定系统所需的用户输入、输出设备。常用的输入设备有按钮、选择开关、行程开关、传感器等,常用的输出设备有继电器、接触器、指示灯、电磁阀等。 ( 3 )选择合适的 PLC 类型 根据已确定的用户 I/O 设备,统计所需的输入信号和输出信号的点数,选择合适的 PLC 类型,包括机型的选择、容量的选择、 I/O 模块的选择、电源模块的选择等。 ( 4 )分配 I/O 点 分配 PLC 的输入输出点,编制出输入 / 输出分配表或者画出输入 / 输出端子的接线图。接着九可以进行 PLC 程序设计,同时可进行控制柜或操作台的设计和现场施工。 ( 5 )设计应用系统梯形图程序 根据工作功能图表或状态流程图等设计出梯形图即编程。这一步是整个应用系统设计的最核心工作,也是比较困难的一步,要设计好梯形图,首先要十分熟悉控制要求,同时还要有一定的电气设计的实践经验。 ( 6 )将程序输入 PLC 当使用简易编程器将程序输入 PLC 时,需要先将梯形图转换成指令助记符,以便输入。当使用可编程序控制器的辅助编程软件在计算机上编程时,可通过上下位机的连接电缆将程序下载到 PLC中去。 ( 7 )进行软件测试 程序输入 PLC 后,应先进行测试工作。因为在程序设计过程中,难免会有疏漏的地方。因此在将 PLC 连接到现场设备上去之前,必需进行软件测试,以排除程序中的错误,同时也为整体调试打好基础,缩短整体调试的周期。 ( 8 )应用系统整体调试 在 PLC 软硬件设计和控制柜及现场施工完成后,就可以进行整个系统的联机调试,如果控制系统是由几个部分组成,则应先作局部调试,然后再进行整体调试;如果控制程序的步序较多,则可先进行分段调试,然后再连接起来总调。调试中发现的问题,要逐一排除,直至调试成功。 ( 9 )编制技术文件 系统技术文件包括说明书、电气原理图、电器布置图、电气元件明细表、 PLC 梯形图。 三、 PLC 硬件系统设计 1 . PLC 型号的选择 在作出系统控制的决策之前,要详细了解被控对象的控制要求,从而决定是否选用 PLC 进行控制。 在控制系统逻辑关系较复杂(需要大量中间继电器、时间继电器、计数器等)、工艺流程和产品改型较频繁、需要进行数据处理和信息管理(有数据运算、模拟量的控制、PID 调节等)、系统要求有较高的可靠性和稳定性、准备实现工厂自动化联网等情况下,使用 PLC 控制是很必要的。 目前,国内外众多的生产厂家提供了多种系列功能各异的 PLC 产品,使用户眼花缭乱、无所适从。所以全面权衡利弊、合理地选择机型才能达到经济实用的目的。一般选择机型要以满足系统功能需要为宗旨,不要盲目贪大求全,以免造成投资和设备资源的浪费。机型的选择可从以下几个方面来考虑。 ( 1 )对输入 / 输出点的选择 盲目选择点数多的机型会造成一定浪费。 要先弄清除控制系统的 I/O 总点数,再按实际所需总点数的 15 ~ 20 %留出备用量(为系统的改造等留有余地)后确定所需 PLC 的点数。 另外要注意,一些高密度输入点的模块对同时接通的输入点数有限制,一般同时接通的输入点不得超过总输入点的 60 %; PLC 每个输出点的驱动能力( A/ 点)也是有限的,有的 PLC 其每点输出电流的大小还随所加负载电压的不同而异;一般 PLC 的允许输出电流随环境温度的升高而有所降低等。在选型时要考虑这些问题。 PLC的输出点可分为共点式、分组式和隔离式几种接法。隔离式的各组输出点之间可以采用不同的电压种类和电压等级,但这种 PLC 平均每点的价格较高。如果输出信号之间不需要隔离,则应选择前两种输出方式的 PLC 。 ( 2 )对存储容量的选择 对用户存储容量只能作粗略的估算。在仅对开关量进行控制的系统中,可以用输入总点数乘 10 字 / 点+输出总点数乘 5 字 / 点来估算;计数器 / 定时器按( 3 ~ 5 )字 / 个估算;有运算处理时按( 5 ~ 10 )字 / 量估算;在有模拟量输入 / 输出的系统中,可以按每输入 / (或输出)一路模拟量约需( 80 ~ 100 )字左右的存储容量来估算;有通信处理时按每个接口 200 字以上的数量粗略估算。最后,一般按估算容量的 50 ~ 100 %留有裕量。对缺乏经验的设计者,选择容量时留有裕量要大些。 ( 3 )对 I/O 响应时间的选择 PLC的 I/O 响应时间包括输入电路延迟、输出电路延迟和扫描工作方式引起的时间延迟(一般在 2 ~ 3 个扫描周期)等。对开关量控制的系统, PLC 和 I/O 响应时间一般都能满足实际工程的要求,可不必考虑 I/O 响应问题。但对模拟量控制的系统、特别是闭环系统就要考虑这个问题。 ( 4 )根据输出负载的特点选型 不同的负载对 PLC 的输出方式有相应的要求。例如,频繁通断的感性负载,应选择晶体管或晶闸管输出型的,而不应选用继电器输出型的。但继电器输出型的 PLC 有许多优点,如导通压降小,有隔离作用,价格相对较便宜,承受瞬时过电压和过电流的能力较强,其负载电压灵活(可交流、可直流)且电压等级范围大等。所以动作不频繁的交、直流负载可以选择继电器输出型的 PLC。 ( 5 )对在线和离线编程的选择 离线编程示指主机和编程器共用一个 CPU ,通过编程器的方式选择开关来选择 PLC 的编程、监控和运行工作状态。编程状态时, CPU 只为编程器服务,而不对现场进行控制。专用编程器编程属于这种情况。在线编程是指主机和编程器各有一个 CPU ,主机的 CPU 完成对现场的控制,在每一个扫描周期末尾与编程器通信,编程器把修改的程序发给主机,在下一个扫描周期主机将按新的程序对现场进行控制。计算机辅助编程既能实现离线编程,也能实现在线编程。在线编程需购置计算机,并配置编程软件。采用哪种编程方法应根据需要决定。 ( 6 )据是否联网通信选型 若 PLC 控制的系统需要联入工厂自动化网络,则 PLC 需要有通信联网功能,即要求 PLC 应具有连接其他 PLC 、上位计算机及 CRT 等的接口。大、中型机都有通信功能,目前大部分小型机也具有通信功能。 ( 7 )对 PLC 结构形式的选择 在相同功能和相同 I/O 点数据的情况下,整体式比模块式价格低。但模块式具有功能扩展灵活,维修方便(换模块),容易判断故障等优点,要按实际需要选择 PLC 的结构形式。 2 .分配输入 / 输出点 一般输入点和输入信号、输出点和输出控制是一一对应的。 分配好后,按系统配置的通道与接点号,分配给每一个输入信号和输出信号,即进行编号。 在个别情况下,也有两个信号用一个输入点的,那样就应在接入输入点前,按逻辑关系接好线(如两个触点先串联或并联),然后再接到输入点。 ( 1 )确定 I/O 通道范围 不同型号的 PLC ,其输入 / 输出通道的范围是不一样的,应根据所选 PLC 型号,查阅相应的编程手册,决不可“张冠李戴”。必须参阅有关操作手册。 ( 2 )部辅助继电器 内部辅助继电器不对外输出,不能直接连接外部器件,而是在控制其他继电器、定时器 / 计数器时作数据存储或数据处理用。 从功能上讲,内部辅助继电器相当于传统电控柜中的中间继电器。 未分配模块的输入 / 输出继电器区以及未使用 1 : 1 链接时的链接继电器区等均可作为内部辅助继电器使用。根据程序设计的需要,应合理安排 PLC 的内部辅助继电器 PLC基础知识简介 ----   目前,世界上有200多厂家生产300多品种PLC产品,应用在汽车(23%)、粮食加工(16.4%)、化学/制药(14.6%)、金属/矿山(11.5%)、纸浆/造纸(11.3%)等行业。为了使各位初学者更方便地了解PLC,本文对PLC的发展、基本结构、配置、应用等基本知识作一简介,以期对各位网友有所帮助。 一、PLC的发展历程 在工业生产过程中,大量的开关量顺序控制,它按照逻辑条件进行顺序动作,并按照逻辑关系进行连锁保护动作的控制,及大量离散量的数据采集。传统上,这些功能是通过气动或电气控制系统来实现的。1968年美国GM(通用汽车)公司提出取代继电气控制装置的要求,第二年,美国数字公司研制出了基于集成电路和电子技术的控制装置,首次采用程序化的手段应用于电气控制,这就是第一代可编程序控制器,称Programmable Controller(PC)。 个人计算机(简称PC)发展起来后,为了方便,也为了反映可编程控制器的功能特点,可编程序控制器定名为Programmable Logic Controller(PLC),现在,仍常常将PLC简称PC。 PLC的定义有许多种。国际电工委员会(IEC)对PLC的定义是:可编程控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存贮器,用来在其内部存贮执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字的、模拟的输入和输出,控制各种类型的机械或生产过程。可编程序控制器及其有关设备,都应按易于与工业控制系统形成一个整体,易于扩充其功能的原则设计。 上世纪80年代至90年代中期,是PLC发展最快的时期,年增长率一直保持为30~40%。在这时期,PLC在处理模拟量能力、数字运算能力、人机接口能力和网络能力得到大幅度提高,PLC逐渐进入过程控制领域,在某些应用上取代了在过程控制领域处于统治地位的DCS系统。 PLC具有通用性强、使用方便、适应面广、可靠性高、抗干扰能力强、编程简单等特点。PLC在工业自动化控制特别是顺序控制中的地位,在可预见的将来,是无法取代的。 二、PLC的构成  从结构上分,PLC分为固定式和组合式(模块式)两种。固定式PLC包括CPU板、I/O板、显示面板、内存块、电源等,这些元素组合成一个不可拆卸的整体。模块式PLC包括CPU模块、I/O模块、内存、电源模块、底板或机架,这些模块可以按照一定规则组合配置。 三、CPU的构成  CPU是PLC的核心,起神经中枢的作用,每套PLC至少有一个CPU,它按PLC的系统程序赋予的功能接收并存贮用户程序和数据,用扫描的方式采集由现场输入装置送来的状态或数据,并存入规定的寄存器中,同时,诊断电源和PLC内部电路的工作状态和编程过程中的语法错误等。进入运行后,从用户程序存贮器中逐条读取指令,经分析后再按指令规定的任务产生相应的控制信号,去指挥有关的控制电路。  CPU主要由运算器、控制器、寄存器及实现它们之间联系的数据、控制及状态总线构成,CPU单元还包括外围芯片、总线接口及有关电路。内存主要用于存储程序及数据,是PLC不可缺少的组成单元。  在使用者看来,不必要详细分析CPU的内部电路,但对各部分的工作机制还是应有足够的理解。CPU的控制器控制CPU工作,由它读取指令、解释指令及执行指令。但工作节奏由震荡信号控制。运算器用于进行数字或逻辑运算,在控制器指挥下工作。寄存器参与运算,并存储运算的中间结果,它也是在控制器指挥下工作。 CPU速度和内存容量是PLC的重要参数,它们决定着PLC的工作速度,IO数量及软件容量等,因此限制着控制规模。 四、I/O模块  PLC与电气回路的接口,是通过输入输出部分(I/O)完成的。I/O模块集成了PLC的I/O电路,其输入暂存器反映输入信号状态,输出点反映输出锁存器状态。输入模块将电信号变换成数字信号进入PLC系统,输出模块相反。I/O分为开关量输入(DI),开关量输出(DO),模拟量输入(AI),模拟量输出(AO)等模块。  开关量是指只有开和关(或1和0)两种状态的信号,模拟量是指连续变化的量。常用的I/O分类如下:  开关量:按电压水平分,有220VAC、110VAC、24VDC,按隔离方式分,有继电器隔离和晶体管隔离。  模拟量:按信号类型分,有电流型(4-20mA,0-20mA)、电压型(0-10V,0-5V,-10-10V)等,按精度分,有12bit,14bit,16bit等。  除了上述通用IO外,还有特殊IO模块,如热电阻、热电偶、脉冲等模块。  按I/O点数确定模块规格及数量,I/O模块可多可少,但其最大数受CPU所能管理的基本配置的能力,即受最大的底板或机架槽数限制。 五、电源模块  PLC电源用于为PLC各模块的集成电路提供工作电源。同时,有的还为输入电路提供24V的工作电源。电源输入类型有:交流电源(220VAC或110VAC),直流电源(常用的为24VAC)。 六、底板或机架  大多数模块式PLC使用底板或机架,其作用是:电气上,实现各模块间的联系,使CPU能访问底板上的所有模块,机械上,实现各模块间的连接,使各模块构成一个整体。 七、PLC系统的其它设备  1、编程设备:编程器是PLC开发应用、监测运行、检查维护不可缺少的器件,用于编程、对系统作一些设定、监控PLC及PLC所控制的系统的工作状况,但它不直接参与现场控制运行。小编程器PLC一般有手持型编程器,目前一般由计算机(运行编程软件)充当编程器。  2、人机界面:最简单的人机界面是指示灯和按钮,目前液晶屏(或触摸屏)式的一体式操作员终端应用越来越广泛,由计算机(运行组态软件)充当人机界面非常普及。  3、输入输出设备:用于永久性地存储用户数据,如EPROM、EEPROM写入器、条码阅读器,输入模拟量的电位器,打印机等。  八、PLC的通信联网  依靠先进的工业网络技术可以迅速有效地收集、传送生产和管理数据。因此,网络在自动化系统集成工程中的重要性越来越显著,甚至有人提出"网络就是控制器"的观点说法。  PLC具有通信联网的功能,它使PLC与PLC 之间、PLC与上位计算机以及其他智能设备之间能够交换信息,形成一个统一的整体,实现分散集中控制。多数PLC具有RS-232接口,还有一些内置有支持各自通信的接口。  PLC的通信,还未实现互操作性,IEC规定了多种现场总线标准,PLC各厂家均有采用。   对于一个自动化工程(特别是中大规模控制系统)来讲,选择网络非常重要的。首先,网络必须是开放的,以方便不同设备的集成及未来系统规模的扩展;其次,针对不同网络层次的传输性能要求,选择网络的形式,这必须在较深入地了解该网络标准的协议、机制的前提下进行;再次,综合考虑系统成本、设备兼容性、现场环境适用性等具体问题,确定不同层次所使用的网络标准。 西门子 S7-300 PLC 从入门到精通的100个经典问题 ---- 新手必读      1:使用CPU 315F和ET 200S时应如何避免出现“通讯故障”消息? 使用CPU S7 315F, ET 200S以及故障安全DI/DO模块,那么您将调用OB35 的故障安全程序。而且,您已经接受所有监控时间的默认设置值,并且愿意接收“通讯故障”消息。 OB 35 默认设置为100毫秒。您已经将F I/O模块的F监控时间设定为100毫秒,因此至少每100毫秒要寻址一次I/O模块。但是由于每100毫秒才调用一次OB 35,因此会发生通讯故障。要确保OB35的扫描间隔和F监控时间有所差别,请确保F监控时间大于OB35的扫描间隔时间。 S7分布式安全系统,一直到V5.2 SP1 和 6ES7138-4FA00-0AB0,6 ES7138-4FB00-0AB0,6ES7138-4CF00-0AB0 都会出现这个问题。在新的模块中,F 监控时间设定为150毫秒. 2:当DP从站不可用时,PROFIBUS上S7-300 CPU的监控时间是多少? 使用CPU的PROFIBUS接口上的DP从站操作PROFIBUS网络时,希望在启动期间检查期望的组态与实际的组态是否匹配。在 CPU属性对话框中的Startup选项卡上给出了两个不同的时间。 3:如何判断电源或缓冲区出错,如:电池故障? 如果电源(仅S7-400)或缓冲区中的一个错误触发一个事件,则CPU操作系统访问OB81。错误纠正后,重新访问OB81。电池故障情况下,如果电池检测中的BATT.INDIC开关是激活的,则 S7-400仅访问OB81。如果没有组态OB81,则CPU不会进入操作状态STOP。如果OB81不可用,则当电源出错时,CPU仍保持运行。 4:为S7CPU上的I/O模块(集中式或者分布式的)分配地址时应当注意哪些问题? 请注意,创建的数据区域(如一个双字)不能组态在过程映象的边界上,因为在该数据块中,只有边界下面的区域能够被读入过程映像,因此不可能从过程映像访问数据。 因此,这些组态规则不支持这种情况:例如,在一个 256 字节输入的过程映像的 254 号地址上组态一个输入双字。 如果一定需要如此选址,则必须相应地调整过程映像的大小(在CPU的Properties中)。 5:在S7 CPU中如何进行全局数据的基本通讯?在通讯时需要注意什么? 全局数据通讯用于交换小容量数据,全局数据(GD)可以是: 输入和输出 标记 数据块中的数据 定时器和计数器功能 数据交换是指在连入单向或双向GD环的CPU之间以数据包的形式交换数据。GD环由GD环编号来标识。 单向连接:某一CPU可以向多个CPU发送GD数据包。 双向连接:两个CPU之间的连接:每个CPU都可以发送和接收一个GD数据包。 必须确保接收端CPU未确认全局数据的接收。如果想要通过相应通讯块(SFB、FB或FC)来交换数据,则必须进行通讯块之间的连接。通过定义一个连接,可以极大简化通讯块的设计。该定义对所有调用的通讯块都有效且不需要每次都重新定义。 6:可以将S7-400存储卡用于CPU 318-2DP吗? 在通常的操作中,只能使用订货号为6ES7951-1K... (Flash EPROM)和6ES7951-1A... (RAM)的“短”> 存储卡。 7:尽管LED灯亮,为什么CPU 31xC不能从缺省地址124和125读取完整输入? 对于下列型号的CPU ,请检查 24V 电压是否接入引脚 1。LED由输入电流控制。引脚 1 上的 24V 电压需要做进一步处理。 313C(6ES7 313-5BE0.-0AB0),313C-2DP (6ES7 313-6CE0.-0AB0),313C-2PTP (6ES7 313-6BE0.-0AB0), 314C-2DP (6ES7 314-6CF0.-0AB0),314C-2PTP (6ES7 314-6BF0.-0AB0) 8:配置CPU 31x-2 PN/DP的PN接口时,当PROFINET接口偶尔发生通信错误时,该如何处理? 请确定以太网(PROFINET)中的所有组件(转换)都支持 100 Mbit/s全双工基本操作。避 免中心分配器割裂网络,因为这些设备只能工作于半双工模式。 9:在硬件配置编辑器中,“时钟”修正因子有什么含义呢? 在硬件配置中,通过CPU > Properties > Diagnostics/Clock,你可以进入“时钟”> 域内指定一个修正因子。这个修正因子只影响CPU的硬件时钟。时间中断源自于系统时钟,并且和硬件时钟的设定毫无关系。 10:如何通过PROFIBUS DP用功能块实现在主、从站之间实现双向数据传送? 在主站plc可以通过调用SFC14 “DPRD_DAT“和SFC15 “DPWR_DAT“来完成和从站的数据交换,而对于从站来说可以调用FC1 “DP_SEND“ 和FC2 ”DP_RECV“完成数据的交换。 11:可以从S7 CPU中读出哪些标识数据? 通过SFC 51“RDSYSST”可读出下列标识数据: 可以读出订货号和CPU版本号。为此,使用SFC 51和SSL ID 0111并使用下列索引: 1 = 模块标识 6 = 基本硬件标识 7 = 基本固件标识 12:在含有CPU 317-2PN/DP的S7-300上,如何编程可加载通讯功能块FB14("GET")和FB15("PUT")用于数据交换? 为了通过一个S7连接在使用CPU 317-2PN/DP的两个S7-300工作站之间进行数据交换,其中该S7连接是使用NetPro组态的, 在S7通信中,必须调用通讯功能块。模块FB14("GET") 用于从远程CPU取出数据,模块FB15("PUT")用于将数据写入远程CPU。 功能块包含在STEP 7 V5.3的标准库中。 < CPU 317-2PN/DP的通讯模块FB14("GET")和FB15("PUT")的属性 : FB14和FB15是异步通讯功能。 这些模块的运行可能跨越多个OB1循环。 通过输入参数REQ激活FB14或FB15。 DONE、NDR或ERROR表明作业结束。PUT和GET可以同时通过连接进行通信。 注意:不能将库SIMATIC_NET_CP中的通讯块用于CPU317-2PN/DP。 13:对于紧凑CPU 313C-2 PtP和CPU 314-2 PtP作业同步处理需要注意什么? 在用户程序中,不可以同时编程SEND作业和FETCH作业。 即: 只要SEND作业(SFB 63)没有完全终止(DONE或ERROR),就不能调用FETCH作业(SFB 64)(甚至在REQ=0的时候)。只要FETCH作业(SFB 64)没有完全终止(DONE或ERROR),就不能调用SEND作业(SFB 63)(甚至在REQ=0的时候)。在处理一个主动作业(SEND作业、SFB 63或FETCH作业、SFB 64)时,同时可以处理一个被动作业(SERVE作业、SFB 65)。 14:可以将MICR.master420到440作为组态轴(位置外部检测)和CPU 317T一起运行吗? 可以,但在动力和精度方面,对组态轴的要求差别非常大。在高要求情况下,伺服驱动SIMODRIVE 611U、MASTERDRIVES MC或SINAMICS S必须和CPU 317T一起运行。在低要求情况下,MICROMASTER系列也能满足动力和精度要求。 15:如何在已配置为DP从站的两个CPU模块间组态直接数据交换(节点间通信)? 两个CPU站配置为DP从站,而且由同一个DP主站操作,它们之间的通信通过配置交换模式为DX可以完成直接数据交换。 16:如何使用SFC65,SFC66,SFC67 和 SFC68 进行通信? 对于单向基本通信,使用系统功能 SFC67 (X_GET)从一个被动站读取数据,使用系统功能SFC68(X_PUT)将数据写入一个被动站(服务器)。这些块只有在主动站中才调用。对于一个双向基本通信,调用站中的系统功能SFC65 (X_SEND),在该站中想将数据发送到另一个主动站。在同样为主动的主动接收站中,数据将通过系统功能SFC66 (X_RCV)记录。 两种类型的基本通信中,每次块调用可以处理最多 76 字节的用户数据。对于S7-300 CPU,数据传送的数据一致性是 8 个字节,对于S7-400 CPU则是全长。 如果连接到S7-200,必须考虑到S7-200只能用作一个被动站。 17:什么是自由分配 I/O 地址? 地址的自由分配意味着您可对每种模块(SM/FM/CP)自由的分配一个地址。地址分配在 STEP 7 里进行。先定义起始地址,该模块的其它地址以它为基准。 自由分配地址的优点:因为模块之间没有地址间隙,就可以优化地使用可用地址空间。在创建标准软件时,分配地址过程中可以不考虑所涉及的 S7-300 的组态。 18:诊断缓冲器能够干什么? 更快地识别故障源,因而提高系统的可用性。评估STOP之前的最后事件,并寻找引起STOP的原因。 诊断缓冲器是一个带有单个诊断条目的循环缓冲器,这些诊断条目显示在事件发生序列中;第一个条目显示的是最近发生的事件。如果缓冲器已满, 最早发生的事件就会被新的条目所覆盖。根据不同的CPU,诊断缓冲器的大小或者固定,或者可以通过HW Config中通过参数进行设置。 19:诊断缓冲器中的条目包括哪些? 1) 故障事件 2) 操作模式转变以及其它对用户重要的操作事件 3) 用户定义的诊断事件(用SFC52 WR_USMSG) 在操作模式STOP下,在诊断缓冲器中尽量少的存储事件,以便用户能够很容易在缓冲器中找到引起STOP的原因。因此,只有当事件要求用户产生一个响应(如系统内存复位,电池需要充电)或必须注册重要信息(如固件更新,站故障)时,才将条目存储在诊断缓冲器中。 20:如何确定MMC的大小以便完整地存储STEP 7项目? 为了给项目选择合适的MMC,需要了解整个项目的大小以及要加载块的大小。可以按照如下所述的方法来确定项目的大小: 1) 首先归档STEP 7项目。然后在Windows资源浏览器中打开已归档项目,并确定其大小(选中该项目并右击)。这会告诉您归档文件的大小。 2) 将块加载入CPU。现在仍然需要选择"PLC > Module Information > Memory"。在此,在" Load memory RAM + EPROM"中,可以看到分配的加载内存的大小。 3) 必须将该值和已经确定的归档项目的大小相加。这样就可以得出在一个MMC上保存整个项目所需的总内存的大小。 21:CPU全面复位后哪些设置会保留下来? 复位CPU时,内存没有被完全删除。整个主内存被完全删除了,但加载内存中数据,以及保存在Flash-EPROM存储卡(MC)或微存储卡(MMC)上的数据,则会全部保留下来。除了加载内存以外,计时器(CPU 312 IFM除外)和诊断缓冲也被保留。具有MPI接口或一个组合MPI/DP接口的CPU只在全部复位之前保留接口所采用的当前地址和波特率。另一方面,另一个PROFIBUS地址也被完全删除,不能再访问。 重要事项:重新设置PG/PC之后,与CPU之间的通讯只能通过MPI或MPI/DP接口来建立。 22:为什么不能通过MPI在线访问CPU? 如果在CPU上已经更改了MPI参数,请检查硬件配置。可以将这些值与在"Set PG/PC interface"下的参数进行比较,看是否有不一致。 或者可以这样做:打开一个新的项目,创建一个新的硬件组态。在CPU的MPI接口的属性中为地址和传送速度设置各自的值。将"空"项目写入存储卡中。把该存储卡插入到CPU 然后重新打开CPU的电压,将位于存储卡上的设置传送到CPU。现在已经传送了MPI接口的当前设置,并且像这样的话,只要接口没有故障就可以建立连接。 这个方法适用于所有具有存储卡接口的S7-CPU。 23:错误OB的用途是什么? 如果发生一个所描述的错误(见文件1),则将调用并处理相应OB。如果没有加载该OB,则CPU进入STOP(例外:OB70、72、7 3和81) S7-CPU可以识别两类错误: 1) 同步错误: 这些错误在处理特定操作的过程中被触发,并且可以归因于用户程序的特定部分。 2) 异步错误: 这些错误不能直接归因于运行中的程序。这些错误包括优先级类的错误,自动化系统中的错误(故障模块)或者冗余的错误。 24:在DP从站或CPU315-2DP型主站里应该编程哪些“故障 OBs”? 在组态一个作为从站的CPU315-2DP站时,必须在STEP7程序中编程下列OB以便评估分布式I/O类型的错误信息: OB 82 诊断中断 OB 、OB 86 子机架故障 OB 、OB 122 I/O 访问出错 1) 诊断OB82:如果一个支持诊断,并且已经对其释放了诊断中断的模块识别出一个错误,它既对进入事件也对外出的事件向 CPU 发出一个诊断中断的请求。操作系统然后调用 OB82。在 OB82 自己的局部变量里包含有有缺陷模块的逻辑基地址和 4 个字节的诊断数据。如果你还没有编程 OB82, 则 CPU 进入“停止”模式。你可以阻断或延迟诊断中断 OB ,并通过 SFC 39 - 42 重新释放它。 2) 子机架故障OB86:如果识别出一个 DP 主站系统或一个分布式 I/O 站有故障(既对进入事件也对外出的事件),该 CPU 的操作系统就调用 OB 86 。如果没有编程 OB 86 但出现了这样一个错误, CPU 就进入“停止”模式。你可以阻断或延迟 OB86 并通过 SFC 39 - 42 重新释放它。 3) I/O 访问出错OB122:当访问一个模块的数据时出错,该CPU的操作系统就调用OB 122。比方说,CPU在存取一个单个模块的数据时识别出一个读错误,那么操作系统就调用OB 122。该OB 122以与中断块有相同的优先级类别运行。如果没有编程OB 122,那么CPU由“运行”模式改为“停止”模式。 25:为什么在某些情况下,保留区会被重写? 在STEP 7的硬件组态中,可以把几个操作数区定义为“保留区”。这样可以在掉电以后,即使没有备份电池的话,仍能保持这些区域中的内容。如果定义一个块为 “保留块”,而它在 CPU 中不存在或只是临时安装过,那么这些区域的部分内容会被重写。在电源接通/断开之后,其他内容会在相关区里找到。 26:为何不能把闪存卡的内容加载入S7 300 CPU? 你的项目在闪存卡上。现在要用它加载 S7 300 。但加载结束后发现 CPU 的 RAM 中仍是空的。 出现此问题的原因是你的程序里有无法处理的,"错误的"组织块(比如说, OB86 没有 DP 接口)。 在重新设置和重新启动 CPU 后, RAM 仍是空的。 诊断缓冲区对这个"无法加载"的块会提示一些信息。 27:当把 CPU315-2DP 作为从站,把 CPU315-2DP 作为主站时的诊断地址 在组态一个 CPU315-2DP 站时,你使用 S7 工具 “H/W CONFIG” 来分配诊断地址。如果发生一个故障,这些诊断地址被加入诊断 OB 的变量 “OB82_MDL_ADDR” 里。 你可在 OB82 里分析此变量,确定有故障的站并作出相应的反应。 下面是如何分配诊断地址的例子: 第 1 步: 通过 CPU315-2DP 组态从站并赋予一个诊断地址,比如 422。 第 2 步: 通过 CPU315-2DP 组态主站 第 3 步: 把组态好的从站链接到主站并赋予一个诊断地址,比如 1022。 28:需要为S7-300 CPU的DP从站接口作何种设置,才可以使用它来进行路由选择? 如果使用CPU作为I-Slave,并且该CPU也起S7 路由器的作用,那么请注意如下事项: 用于路由选择的从站的DP接口必须设置为活动状态。这可以在HW Config中完成:在DP接口的属性对话框中,选项" Commissioning/Test operation"或"Programming, status/modify..."必须激活。关于这些设置的注意事项可以在下表中获得。 对于S7 路由连接,有 4 种可用的连接资源-与其它任何连接资源无关。没有使用PG/OP的连接资源或S7基本通信。 如果必须通过DP接口来建立一个与位于其机架上的通信伙伴连接时(如在 CP 343-1 中),也要使用一个路由连接。而对于通过MPI接口与一个位于其机架上的通信伙伴的连接,则不使用路由连接资源,因为在这种情况下,能够直接到达伙伴。注意事项:这不适用于CPU 318。 29:为什么当使用S7-300 CPU的内部运行时间表时,没有任何返回值? 当对CPU 312IFM到316-2DP参数化系统功能块 SFC2, SFC3 和 SFC4 时,为一个运行时间表规定了一个大于 "B#16#0"的标识符,那么将出错并且所需的功能也无法用。 此种情况下,将在块的" RETVAL"输出处输出标识符 "8080h" 。 说明:对于这些 CPU,只有一个计时器可用。因此你应该只用标识符 "B#16#0"。 在一个周期块(OB1, OB35)里一定不能调用系统功能 SFC2 "SET_RTM",而是应该在重启动OB(OB100)调用它。你也可以通过外部触发器来启动该块。不然的话,该块将老是复位运行计时表,永远完成不了计数。 30:变量是如何储存在临时局部数据中的? L 堆栈永远以地址“0”开始。 在 L 堆栈中,会为每个数据块保留相同个数的字节,作为存放每个块所拥有的静态或局部数据。 当某个块终止时,那么它的空间随之也被重新释放出来。 指针总是指向当前打开块的第一个字节。 31:在CPU经过完全复位后是否运行时间计数器也被复位? 使用S7-300时,带硬件时钟(内置的 “实时时钟”)和带软件时钟的 CPU 之间有区别。对于那些无后备电池的软件时钟的 CPU,运行时间计数器在 CPU 被完全复位后其最后值被删除。而对于那些有后备电池的硬件时钟的 CPU,运行时间计数器的最后值在 CPU 被完全复位后被保留下来。同样, CPU 318 和所有的 S7-400 CPU 的运行时间计数器在 CPU 被完全复位后其最后值被保留。 32:如何把不在同一个项目里的一个S7 CPU组态为我的S7 DP主站模块的DP从站? 缺省情况下, 在STEP 7里只可以把一个S7 CPU组态为从站,如果说该站是在同一个项目中的话。该站然后在“PROFIBUS-DP > 已经组态的站”下的硬件目录里作为“CPU 31x-2 DP”出现。用这种途径,可以设置起 DP 主站与 DP 从站间的链接。 还存在一个选项,可把一个与主站不在同一个项目里的S7 CPU组态为从站。
/
本文档为【新手学习PLC编程的入门建议】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索