1.pythonä»ä¹ä¸è¥¿ï¼
2.python是机构机构什么?
3.什么是PAC,PLC,DCS
4.springMVC的配置问题 求大神来帮帮忙,谢谢啦!专用专用
5.åpythonç¨ä»ä¹è½¯ä»¶å¥½(åpythonç¨ä»ä¹ide)
pythonä»ä¹ä¸è¥¿ï¼
Pythonæ¯ä»ä¹ï¼
Pythonç±è·å °æ°å¦å计ç®æºç§å¦ç 究å¦ä¼çGuidovanRossumäº
年代å设计ï¼ä½ä¸ºä¸é¨å«åABCè¯è¨çæ¿ä»£åãPythonæä¾äºé«æçé«çº§æ°æ®ç»æï¼è¿è½ç®åææå°é¢å对象ç¼ç¨ãPythonè¯æ³åå¨æç±»åï¼ä»¥å解éåè¯è¨çæ¬è´¨ï¼ä½¿å®æ为å¤æ°å¹³å°ä¸åèæ¬åå¿«éå¼ååºç¨çç¼ç¨è¯è¨ï¼éççæ¬çä¸ææ´æ°åè¯è¨æ°åè½çæ·»å ï¼éæ¸è¢«ç¨äºç¬ç«çã大å项ç®çå¼åã
Python解éå¨æäºæ©å±ï¼å¯ä»¥ä½¿ç¨CæC++(æè å ¶ä»å¯ä»¥éè¿Cè°ç¨çè¯è¨)æ©å±æ°çåè½åæ°æ®ç±»åãPython
ä¹å¯ç¨äºå¯å®å¶å软件ä¸çæ©å±ç¨åºè¯è¨ãPython丰å¯çæ ååºï¼æä¾äºéç¨äºå个主è¦ç³»ç»å¹³å°çæºç ææºå¨ç ã
pythonæ¯ä»ä¹ï¼
Pythonæ¯ä¸ç§é¢å对象ç解éå计ç®æºç¨åºè®¾è®¡è¯è¨ï¼å ·æ丰å¯å强大çåºãå®å¸¸è¢«æµç§°ä¸ºè¶æ°´è¯è¨ï¼è½å¤æç¨å ¶ä»è¯è¨å¶ä½çåç§æ¨¡åï¼å°¤å ¶æ¯C/C++ï¼å¾è½»æ¾å°èç»å¨ä¸èµ·ã
Pythonæ¯ä¸ç§é¢å对象ç解éå计ç®æºç¨åºè®¾è®¡è¯è¨ï¼ç±è·å °äººGuidovanRossumäºå¹´åæï¼ç¬¬ä¸ä¸ªå ¬å¼åè¡çåè¡äºå¹´ã
Pythonä½ä¸ºå½ä¸æçé¨çç¼ç¨è¯è¨ï¼å¨å¹´ä¸çèæ¬è¯è¨æè¡æ¦ä¸ä½åæ¦é¦ï¼å·²ç»æ为äºå¤ä¸ªé¢åçé¦éè¯è¨ã
åå±åç¨
èªä»ä¸çºªå¹´ä»£åPythonè¯è¨è¯çè³ä»ï¼å®å·²è¢«éæ¸å¹¿æ³åºç¨äºç³»ç»ç®¡çä»»å¡çå¤çåWebç¼ç¨ãPythonçåå§äººä¸ºGuidovanRossumãå¹´å£è¯èæé´ï¼å¨é¿å§æ¯ç¹ä¸¹ï¼Guido为äºæåå£è¯èçæ 趣ï¼å³å¿å¼åä¸ä¸ªæ°çèæ¬è§£éç¨åºï¼ä½ä¸ºABCè¯è¨çä¸ç§ç»§æ¿ãä¹æ以éä¸Pythonï¼å¤§èèçææï¼ä½ä¸ºè¯¥ç¼ç¨è¯è¨çååï¼æ¯åèªè±å½ä¸çºªå¹´ä»£é¦æççµè§åå§ãèæ.派森干çé£è¡é©¬æå¢ãï¼MontyPython'sFlyingCircusï¼ãABCæ¯ç±Guidoåå 设计çä¸ç§æå¦è¯è¨ãå°±Guidoæ¬äººçæ¥ï¼ABCè¿ç§è¯è¨é常ä¼ç¾å强大ï¼æ¯ä¸é¨ä¸ºéä¸ä¸ç¨åºå设计çãä½æ¯ABCè¯è¨å¹¶æ²¡ææåï¼ç©¶å ¶åå ï¼Guido认为æ¯å ¶éå¼æ¾é æçãGuidoå³å¿å¨Pythonä¸é¿å è¿ä¸é误ãåæ¶ï¼ä»è¿æ³å®ç°å¨ABCä¸éªç°è¿ä½æªæ¾å®ç°çä¸è¥¿ãå°±è¿æ ·ï¼Pythonå¨Guidoæä¸è¯çäºãå¯ä»¥è¯´ï¼Pythonæ¯ä»ABCåå±èµ·æ¥ï¼ä¸»è¦åå°äºModula-3ï¼å¦ä¸ç§ç¸å½ä¼ç¾ä¸å¼ºå¤§çè¯è¨ï¼ä¸ºå°åå¢ä½æ设计çï¼çå½±åã并ä¸ç»åäºUnixshellåCçä¹ æ¯ãPythonå·²ç»æ为æå欢è¿çç¨åºè®¾è®¡è¯è¨ä¹ä¸ãèªä»å¹´ä»¥åï¼pythonç使ç¨çå线æ§å¢é¿ãå¹´1æï¼å®è¢«TIOBEç¼ç¨è¯è¨æè¡æ¦è¯ä¸ºå¹´åº¦è¯è¨.ç±äºPythonè¯è¨çç®æ´æ§ãæ读æ§ä»¥åå¯æ©å±æ§ï¼å¨å½å¤ç¨Pythonåç§å¦è®¡ç®çç 究æºææ¥çå¢å¤ï¼ä¸äºç¥å大å¦å·²ç»éç¨Pythonæ¥ææç¨åºè®¾è®¡è¯¾ç¨ãä¾å¦å¡èåºæ¢ é大å¦çç¼ç¨åºç¡ã麻ççå·¥å¦é¢ç计ç®æºç§å¦åç¼ç¨å¯¼è®ºå°±ä½¿ç¨Pythonè¯è¨è®²æãä¼å¤å¼æºçç§å¦è®¡ç®è½¯ä»¶å é½æä¾äºPythonçè°ç¨æ¥å£ï¼ä¾å¦èåç计ç®æºè§è§åºOpenCVãä¸ç»´å¯è§ååºVTKãå»å¦å¾åå¤çåºITKãèPythonä¸ç¨çç§å¦è®¡ç®æ©å±åºå°±æ´å¤äºï¼ä¾å¦å¦ä¸3个ååç»å ¸çç§å¦è®¡ç®æ©å±åºï¼NumPyãSciPyåmatplotlibï¼å®ä»¬åå«ä¸ºPythonæä¾äºå¿«éæ°ç»å¤çãæ°å¼è¿ç®ä»¥åç»å¾åè½ãå æ¤Pythonè¯è¨åå ¶ä¼å¤çæ©å±åºæææçå¼åç¯å¢ååéåå·¥ç¨ææ¯ãç§ç 人åå¤çå®éªæ°æ®ãå¶ä½å¾è¡¨ï¼çè³å¼åç§å¦è®¡ç®åºç¨ç¨åºãå¹´3æï¼è¯¥è¯è¨ä½è å¨é®ä»¶å表ä¸å®£å¸Python2.7å°äºå¹´1æ1æ¥ç»æ¢æ¯æãç¨æ·å¦ææ³è¦å¨è¿ä¸ªæ¥æä¹å继ç»å¾å°ä¸Python2.7æå ³çæ¯æï¼åéè¦ä»è´¹ç»åä¸ä¾åºåã
Pythonä¼ç¹
1.ç®å
æ们å¯ä»¥è¯´Pythonæ¯ç®çº¦çè¯è¨ï¼é常æäºè¯»åï¼éå°é®é¢æ¶ï¼ç¨åºåå¯ä»¥ææ´å¤ç注æåæ¾å¨é®é¢æ¬èº«ä¸ï¼èä¸ç¨è±è´¹å¤ªå¤ç²¾åå¨ç¨åºè¯è¨ãè¯æ³ä¸ã
2.å è´¹
Pythonæ¯å è´¹å¼æºçãè¿æå³çç¨åºåä¸ç¨è±é±ï¼å°±å¯ä»¥å ±äº«ãå¤å¶å交æ¢å®ï¼è¿ä¹å¸®å©Pythonå½¢æäºå¼ºå£®ç社åºï¼ä½¿ç¨å®æ´å å®åï¼ææ¯åå±æ´å¿«ãä¸ä¸äººå£«å¯ä»¥å¨ç¤¾åºååå¦è å享ä»ä»¬çç¥è¯åç»éªã
3.å ¼å®¹æ§
Pythonå ¼å®¹ä¼å¤å¹³å°ï¼æ以å¼åè ä¸ä¼éå°ä½¿ç¨å ¶ä»è¯è¨æ¶å¸¸ä¼éå°çå°æ°ã
4.é¢å对象
Pythonæ¢æ¯æé¢åè¿ç¨ï¼ä¹æ¯æé¢å对象ç¼ç¨ãå¨é¢åè¿ç¨ç¼ç¨ä¸ï¼ç¨åºåå¤ç¨ä»£ç ï¼å¨é¢å对象ç¼ç¨ä¸ï¼ä½¿ç¨åºäºæ°æ®åå½æ°ç对象ã尽管é¢å对象çç¨åºè¯è¨é常ååå¤æï¼Pythonå´è®¾æ³ä¿æç®æ´ã
5.åº
Python社åºåé äºä¸å¤§å åç§åæ ·çPythonåºãå¨ä»ä»¬ç帮å©ä¸,源码源码ä½ å¯ä»¥ç®¡çææ¡£,æ§è¡åå æµè¯ãæ°æ®åºãwebæµè§å¨ãçµåé®ä»¶ãå¯ç å¦ãå¾å½¢ç¨æ·çé¢åæ´å¤çä¸è¥¿ãææä¸è¥¿å æ¬å¨æ ååº,ç¶è,é¤äºå®,è¿æå¾å¤å ¶ä»çåºã
Pythonè¯è¨çç¨é
å¤å¹´æ¥ï¼Pythonå¨åç§æµè¡ç¼ç¨è¯è¨ä¸ä¸ç´æåé åãå®å ä¹å¯ä»¥éç¨ä»»ä½å¼åï¼å®æ¨å¨æé«ç¨åºåçå¼åæçèä¸å¨äºä»ä»¬ç¼ç代ç ãPythonéç¨äºç½ç«ãæ¡é¢åºç¨å¼åï¼èªå¨åèæ¬ï¼å¤æ计ç®ç³»ç»ï¼ç§å¦è®¡ç®ï¼çå½æ¯æ管çç³»ç»ï¼ç©èç½ï¼æ¸¸æï¼æºå¨äººï¼èªç¶è¯è¨å¤ççå¾å¤æ¹é¢ãèä¸ï¼æ¢ä½¿å¯¹äºé£äºä»æ²¡æå¼åç»éªç人æ¥è®²ï¼Pythonç代ç ä¹æ¯ç®æ´ææçãç±äºPythonç¨åºä»£ç ç®åï¼æ以åä¸å ¶ä»ç¨åºè¯è¨ç¸æ¯ï¼åæçç¨åºç»´æ¤æ´å®¹æï¼æ´èå¿ãä»åä¸è§åº¦æ¥çï¼éè¦çææ¬éä½ï¼ç¨åºåçæçæé«ã
pythonæ¯ä¸ªä»ä¹ä¸è¥¿
Pythonæ¯ä¸ç§è·¨å¹³å°ç计ç®æºç¨åºè®¾è®¡è¯è¨ãæ¯ä¸ä¸ªé«å±æ¬¡çç»åäºè§£éæ§ãç¼è¯æ§ãäºå¨æ§åé¢å对象çèæ¬è¯è¨ãæå被设计ç¨äºç¼åèªå¨åèæ¬ï¼shellï¼ï¼éççæ¬çä¸ææ´æ°åè¯è¨æ°åè½çæ·»å ï¼è¶å¤è¢«ç¨äºç¬ç«çã大å项ç®çå¼åã
Pythonçåå§äººä¸ºè·å °äººåå¤Â·èç½èå§ï¼GuidovanRossumï¼ãå¹´å£è¯èæé´ï¼å¨é¿å§æ¯ç¹ä¸¹ï¼Guido为äºæåå£è¯èçæ 趣ï¼å³å¿å¼åä¸ä¸ªæ°çèæ¬è§£éç¨åºï¼ä½ä¸ºABCè¯è¨çä¸ç§ç»§æ¿ã
ä¹æ以éä¸Pythonï¼å¤§èèçææï¼ä½ä¸ºè¯¥ç¼ç¨è¯è¨çååï¼æ¯åèªè±å½ä¸çºªå¹´ä»£é¦æççµè§åå§ãèæï¼æ´¾æ£®çé£è¡é©¬æå¢ãï¼MontyPythonï¼sFlyingCircusï¼ã
æ©å±èµæï¼
pythonä¸æå°±æ¯èèçææãå¨è®¡ç®æºä¸ï¼å®æ¯ä¸ç§ç¼ç¨è¯è¨ãPythonï¼è±è¯åé³ï¼ï¼?pa?θ?nï¼ï¼ï¼æ¯ä¸ç§é¢å对象ã解éå计ç®æºç¨åºè®¾è®¡è¯è¨ï¼ç±GuidovanRossumäºå¹´åºåæï¼ç¬¬ä¸ä¸ªå ¬å¼åè¡çåè¡äºå¹´ãPythonè¯æ³ç®æ´èæ¸ æ°ï¼å ·æ丰å¯å强大çç±»åºã
å®å¸¸è¢«æµç§°ä¸ºè¶æ°´è¯è¨ï¼å®è½å¤æç¨å ¶ä»è¯è¨å¶ä½çåç§æ¨¡åï¼å°¤å ¶æ¯Cï¼Cï¼ï¼ï¼å¾è½»æ¾å°èç»å¨ä¸èµ·ã常è§çä¸ç§åºç¨æ å½¢æ¯ï¼ä½¿ç¨Pythonå¿«éçæç¨åºçååï¼ææ¶çè³æ¯ç¨åºçæç»çé¢ï¼ï¼ç¶åå¯¹å ¶ä¸æç¹å«è¦æ±çé¨åï¼ç¨æ´åéçè¯è¨æ¹åã
æ¯å¦3D游æä¸çå¾å½¢æ¸²æ模åï¼æ§è½è¦æ±ç¹å«é«ï¼å°±å¯ä»¥ç¨C++éåã1åå±åç¨ç¼è¾èªä»ä¸çºªå¹´ä»£åPythonè¯è¨è¯çè³ä»ï¼å®éæ¸è¢«å¹¿æ³åºç¨äºå¤çç³»ç»ç®¡çä»»å¡åWebç¼ç¨ãPythonå·²ç»æ为æå欢è¿çç¨åºè®¾è®¡è¯è¨ä¹ä¸ã
åèèµæï¼
ç¾åº¦ç¾ç§-Python
python是什么?
python 中文就是蟒蛇的意思。
在计算机中,公式它是机构机构一种编程语言。
Python(英语发音:/ˈpaɪθən/),专用专用javaweb商店jsp源码 是一种面向对象、解释型计算机程序设计语言,源码源码由Guido van Rossum于年底发明,公式第一个公开发行版发行于年。机构机构Python语法简洁而清晰,专用专用具有丰富和强大的源码源码类库。它常被昵称为胶水语言,公式它能够把用其他语言制作的机构机构各种模块(尤其是C/C++)很轻松地联结在一起。常见的专用专用一种应用情形是,使用Python快速生成程序的源码源码原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。
1发展历程编辑
自从世纪年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python[1] 已经成为最受欢迎的程序设计语言之一。年1月,它被TIOBE编程语言排行榜评为年度语言。自从年以后,python的使用率是呈线性增长[2] 。
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学
已经采用Python教授程序设计课程。例如卡耐基梅隆大学的编程基础和麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学
计算软件包都提供了Python的调用接口,
例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的
科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语
言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
● 最后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。
2产生
Python的创始人为Guido van Rossum。年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC
这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,组建源码Guido 认为是非开放造成的。Guido
决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
3风格
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim
Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one-- and
preferably only one --obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言
是用一对花括号{ }来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列
方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
4设计定位
Python
的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。
Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝
花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大
规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到
Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师
倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。minetest源码
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和
工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很
多人还把Python作为一种“胶水语言”(glue
language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google
Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex
Martelli)说:“这很难讲,不过, 年,Python 已在 Google 内部使用,Google 召募许多 Python
高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we
must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”
什么是PAC,PLC,DCS
PAC
PAC的概念是由ARC咨询集团的高级研究员Craig Resnick提出的,在谈到创造这个新名词的意义时,他认为,“PLC在市场相当活跃,而且发展良好,具很强的生命力。然而,PLC也正在许多方面不断改变,不断增加其魅力。自动化供应商正不断致力于PLC的开发,以迎合市场与用户需求。功能的增强促使新一代系统浮出水面。PAC基于开放的工业标准、具多领域功能、通用的开放平台以及高性能。ARC创造了这个词,以帮助用户定义应用需要,帮助制造商在谈到其产品时能更清晰。”
PAC的概念定义为:控制引擎的集中,涵盖PLC用户的多种需要,以及制造业厂商对信息的需求。PAC包括PLC的主要功能和扩大的控制能力,以及PC-based控制中基于对象的、开放数据格式和网络连接等功能。
PAC基本要求:
◆多域功能(逻辑、运动、驱动和过程)——这个概念支持多种I/O类型。逻辑、运动和其他功能的集成是不断增长的复杂控制方法的要求
◆单一的多学科开发平台——单一的开发环境必须能支持各种I/O和控制方案
◆用于设计贯穿多个机器或处理单元的应用程序的软件工具——这个软件工具必须能适应分布式操作
◆一组de facto网络和语言标准——这个技术必须利用高投入技术
◆开放式、模块化体系结构——设计和技术标准与规范必须是在实现中开放的、模块化的和可结合的
PLC
1、PLC即可编程控制器(Programmable logic Controller,是指以计算机技术为基础的新型工业控制装置。在年国际电工委员会(International Electrical Committee)颁布的PLC标准草案中对PLC做了如下定义:
“PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。”
PLC的特点
2.1可靠性高,抗干扰能力强
高可靠性是电气控制设备的关键性能。PLC由于采用现代大规模集成电路技术,采用严格的生产工艺制造,内部电路采取了先进的抗干扰技术,具有很高的可靠性。例如三菱公司生产的F系列PLC平均无故障时间高达万小时。一些使用冗余CPU的PLC的平均无故障工作时间则更长。从PLC的机外电路来说,使用PLC构成控制系统,和同等规模的继电接触器系统相比,电气接线及开关接点已减少到数百甚至数千分之一,故障也就大大降低。此外,PLC带有硬件故障自我检测功能,出现故障时可及时发出警报信息。在应用软件中,应用者还可以编入外围器件的故障自诊断程序,使系统中除PLC以外的scrath源码电路及设备也获得故障自诊断保护。这样,整个系统具有极高的可靠性也就不奇怪了。
2.2配套齐全,功能完善,适用性强
PLC发展到今天,已经形成了大、中、小各种规模的系列化产品。可以用于各种规模的工业控制场合。除了逻辑处理功能以外,现代PLC大多具有完善的数据运算能力,可用于各种数字控制领域。近年来PLC的功能单元大量涌现,使PLC渗透到了位置控制、温度控制、CNC等各种工业控制中。加上PLC通信能力的增强及人机界面技术的发展,使用PLC组成各种控制系统变得非常容易。
2.3易学易用,深受工程技术人员欢迎
PLC作为通用工业控制计算机,是面向工矿企业的工控设备。它接口容易,编程语言易于为工程技术人员接受。梯形图语言的图形符号与表达方式和继电器电路图相当接近,只用PLC的少量开关量逻辑控制指令就可以方便地实现继电器电路的功能。为不熟悉电子电路、不懂计算机原理和汇编语言的人使用计算机从事工业控制打开了方便之门。
2.4系统的设计、建造工作量小,维护方便,容易改造
PLC用存储逻辑代替接线逻辑,大大减少了控制设备外部的接线,使控制系统设计及建造的周期大为缩短,同时维护也变得容易起来。更重要的是使同一设备经过改变程序改变生产过程成为可能。这很适合多品种、小批量的生产场合。
2.5体积小,重量轻,能耗低
以超小型PLC为例,新近出产的品种底部尺寸小于mm,重量小于g,功耗仅数瓦。由于体积小很容易装入机械内部,是实现机电一体化的理想控制设备。
3. PLC的应用领域
目前,PLC在国内外已广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业,使用情况大致可归纳为如下几类。
3.1开关量的逻辑控制
这是PLC最基本、最广泛的应用领域,它取代传统的继电器电路,实现逻辑控制、顺序控制,既可用于单台设备的控制,也可用于多机群控及自动化流水线。如注塑机、印刷机、订书机械、组合机床、磨床、包装生产线、电镀流水线等。
3.2模拟量控制
在工业生产过程当中,有许多连续变化的量,如温度、压力、流量、液位和速度等都是模拟量。为了使可编程控制器处理模拟量,必须实现模拟量(Analog)和数字量(Digital)之间的A/D转换及D/A转换。PLC厂家都生产配套的A/D和D/A转换模块,使可编程控制器用于模拟量控制。
3.3运动控制
PLC可以用于圆周运动或直线运动的控制。从控制机构配置来说,早期直接用于开关量I/O模块连接位置传感器和执行机构,paho源码现在一般使用专用的运动控制模块。如可驱动步进电机或伺服电机的单轴或多轴位置控制模块。世界上各主要PLC厂家的产品几乎都有运动控制功能,广泛用于各种机械、机床、机器人、电梯等场合。
3.4过程控制
过程控制是指对温度、压力、流量等模拟量的闭环控制。作为工业控制计算机,PLC能编制各种各样的控制算法程序,完成闭环控制。PID调节是一般闭环控制系统中用得较多的调节方法。大中型PLC都有PID模块,目前许多小型PLC也具有此功能模块。PID处理一般是运行专用的PID子程序。过程控制在冶金、化工、热处理、锅炉控制等场合有非常广泛的应用。
3.5数据处理
现代PLC具有数学运算(含矩阵运算、函数运算、逻辑运算)、数据传送、数据转换、排序、查表、位操作等功能,可以完成数据的采集、分析及处理。这些数据可以与存储在存储器中的参考值比较,完成一定的控制操作,也可以利用通信功能传送到别的智能装置,或将它们打印制表。数据处理一般用于大型控制系统,如无人控制的柔性制造系统;也可用于过程控制系统,如造纸、冶金、食品工业中的一些大型控制系统。
3.6通信及联网
PLC通信含PLC间的通信及PLC与其它智能设备间的通信。随着计算机控制的发展,工厂自动化网络发展得很快,各PLC厂商都十分重视PLC的通信功能,纷纷推出各自的网络系统。新近生产的PLC都具有通信接口,通信非常方便。
4. PLC的国内外状况
世界上公认的第一台PLC是年美国数字设备公司(DEC)研制的。限于当时的元器件条件及计算机发展水平,早期的PLC主要由分立元件和中小规模集成电路组成,可以完成简单的逻辑控制及定时、计数功能。世纪年代初出现了微处理器。人们很快将其引入可编程控制器,使PLC增加了运算、数据传送及处理等功能,完成了真正具有计算机特征的工业控制装置。为了方便熟悉继电器、接触器系统的工程技术人员使用,可编程控制器采用和继电器电路图类似的梯形图作为主要编程语言,并将参加运算及处理的计算机存储元件都以继电器命名。此时的PLC为微机技术和继电器常规控制概念相结合的产物。
世纪年代中末期,可编程控制器进入实用化发展阶段,计算机技术已全面引入可编程控制器中,使其功能发生了飞跃。更高的运算速度、超小型体积、更可靠的工业抗干扰设计、模拟量运算、PID功能及极高的性价比奠定了它在现代工业中的地位。世纪年代初,可编程控制器在先进工业国家中已获得广泛应用。这个时期可编程控制器发展的特点是大规模、高速度、高性能、产品系列化。这个阶段的另一个特点是世界上生产可编程控制器的国家日益增多,产量日益上升。这标志着可编程控制器已步入成熟阶段。
世纪末期,可编程控制器的发展特点是更加适应于现代工业的需要。从控制规模上来说,这个时期发展了大型机和超小型机;从控制能力上来说,诞生了各种各样的特殊功能单元,用于压力、温度、转速、位移等各式各样的控制场合;从产品的配套能力来说,生产了各种人机界面单元、通信单元,使应用可编程控制器的工业控制设备的配套更加容易。目前,可编程控制器在机械制造、石油化工、冶金钢铁、汽车、轻工业等领域的应用都得到了长足的发展。
我国可编程控制器的引进、应用、研制、生产是伴随着改革开放开始的。最初是在引进设备中大量使用了可编程控制器。接下来在各种企业的生产设备及产品中不断扩大了PLC的应用。目前,我国自己已可以生产中小型可编程控制器。上海东屋电气有限公司生产的CF系列、杭州机床电器厂生产的DKK及D系列、大连组合机床研究所生产的S系列、苏州电子计算机厂生产的YZ系列等多种产品已具备了一定的规模并在工业产品中获得了应用。此外,无锡华光公司、上海乡岛公司等中外合资企业也是我国比较著名的PLC生产厂家。可以预期,随着我国现代化进程的深入,PLC在我国将有更广阔的应用天地。
5. PLC未来展望
世纪,PLC会有更大的发展。从技术上看,计算机技术的新成果会更多地应用于可编程控制器的设计和制造上,会有运算速度更快、存储容量更大、智能更强的品种出现;从产品规模上看,会进一步向超小型及超大型方向发展;从产品的配套性上看,产品的品种会更丰富、规格更齐全,完美的人机界面、完备的通信设备会更好地适应各种工业控制场合的需求;从市场上看,各国各自生产多品种产品的情况会随着国际竞争的加剧而打破,会出现少数几个品牌垄断国际市场的局面,会出现国际通用的编程语言;从网络的发展情况来看,可编程控制器和其它工业控制计算机组网构成大型的控制系统是可编程控制器技术的发展方向。目前的计算机集散控制系统DCS(Distributed
Control
System)中已有大量的可编程控制器应用。伴随着计算机网络的发展,可编程控制器作为自动化控制网络和国际通用网络的重要组成部分,将在工业及工业以外的众多领域发挥越来越大的作用。
DCS
DCS是分布式控制系统的英文缩写(Distributed Control System),在国内自控行业又称之为集散控制系统。
即所谓的分布式控制系统,或在有些资料中称之为集散系统,是相对于集中式控制系统而言的一种新型计算机控制系统,它是在集中式控制系统的基础上发展、演变而来的。在系统功能方面,DCS和集中式控制系统的区别不大,但在系统功能的实现方法上却完全不同。
首先,DCS的骨架—系统网络,它是DCS的基础和核心。由于网络对于DCS整个系统的实时性、可靠性和扩充性,起着决定性的作用,因此各厂家都在这方面进行了精心的设计。对于DCS的系统网络来说,它必须满足实时性的要求,即在确定的时间限度内完成信息的传送。这里所说的“确定”的时间限度,是指在无论何种情况下,信息传送都能在这个时间限度内完成,而这个时间限度则是根据被控制过程的实时性要求确定的。因此,衡量系统网络性能的指标并不是网络的速率,即通常所说的每秒比特数(bps),而是系统网络的实时性,即能在多长的时间内确保所需信息的传输完成。系统网络还必须非常可靠,无论在任何情况下,网络通信都不能中断,因此多数厂家的DCS均采用双总线、环形或双重星形的网络拓扑结构。为了满足系统扩充性的要求,系统网络上可接入的最大节点数量应比实际使用的节点数量大若干倍。这样,一方面可以随时增加新的节点,另一方面也可以使系统网络运行于较轻的通信负荷状态,以确保系统的实时性和可靠性。在系统实际运行过程中,各个节点的上网和下网是随时可能发生的,特别是操作员站,这样,网络重构会经常进行,而这种操作绝对不能影响系统的正常运行,因此,系统网络应该具有很强在线网络重构功能。
其次,这是一种完全对现场I/O处理并实现直接数字控制(DOS)功能的网络节点。一般一套DCS中要设置现场I/O控制站,用以分担整个系统的I/O和控制功能。这样既可以避免由于一个站点失效造成整个系统的失效,提高系统可靠性,也可以使各站点分担数据采集和控制功能,有利于提高整个系统的性能。DCS的操作员站是处理一切与运行操作有关的人机界面(HMI-Human Machine Interface或operator interface)功能的网络节点。
系统网络是DCS的工程师站,它是对DCS进行离线的配置、组态工作和在线的系统监督、控制、维护的网络节点,其主要功能是提供对DCS进行组态,配置工作的工具软件(即组态软件),并在DCS在线运行时实时地监视DCS网络上各个节点的运行情况,使系统工程师可以通过工程师站及时调整系统配置及一些系统参数的设定,使DCS随时处在最佳的工作状态之下。与集中式控制系统不同,所有的DCS都要求有系统组态功能,可以说,没有系统组态功能的系统就不能称其为DCS。
DCS自年问世以来,已经经历了二十多年的发展历程。在这二十多年中,DCS虽然在系统的体系结构上没有发生重大改变,但是经过不断的发展和完善,其功能和性能都得到了巨大的提高。总的来说,DCS正在向着更加开放,更加标准化,更加产品化的方向发展。
作为生产过程自动化领域的计算机控制系统,传统的DCS仅仅是一个狭义的概念。如果以为DCS只是生产过程的自动化系统,那就会引出错误的结论,因为现在的计算机控制系统的含义已被大大扩展了,它不仅包括过去DCS中所包含的各种内容,还向下深入到了现场的每台测量设备、执行机构,向上发展到了生产管理,企业经营的方方面面。传统意义上的DCS现在仅仅是指生产过程控制这一部分的自动化,而工业自动化系统的概念,则应定位到企业全面解决方案,即total solution 的层次。只有从这个角度上提出问题并解决问题,才能使计算机自动化真正起到其应有的作用。
进入九十年代以后,计算机技术突飞猛进,更多新的技术被应用到了DCS之中。PLC是一种针对顺序逻辑控制发展起来的电子设备,它主要用于代替不灵活而且笨重的继电器逻辑。现场总线技术在进入九十年代中期以后发展十分迅猛,以至于有些人已做出预测:基于现场总线的FCS将取代DCS成为控制系统的主角。
springMVC的配置问题 求大神来帮帮忙,谢谢啦!
Spring配置
人们经常会在一台以上的主机上配置一种Web应用程序。例如,在生产中,一个网站可能只有一个实例。除了此实例外,开发人员可以在用于开发的机器上配置其他的(开发)实例。也可以在公司(机构)内部的本地开发服务器上维护其他应用程序装置,这将让您受益匪浅。该实例的目的是使Web设计者可以获得有质量保证的材料,并为需要为应用程序提供文件资料的人提供准入。
大家都知道,即使是最简单的场景,也需要安装、配置和维护三个实例。而对于位于不同地理位置的团队来说,要从事这样的项目便更加困难。对于任何不是特别简单的Web应用程序项目,都需要多名开发人员来安装项目装置和本地设置以及运行单元测试的装置等。
很多组织都将自己开发的产品作为Web应用程序。我们可以在很多产品中发现这种情况,例如电子商务系统、内容管理系统(CMS),以及博客发布平台等。这类产品可在多个服务器中进行部署。对于成功的多用途Web应用程序来说,他们的开发人员必须要保证他们的应用程序便于安装,并且能够与其他Web应用程序完美集成。经过上述讨论之后,我们应该明了,作为本文主题的应用程序配置是通用Web应用程序项目开发人员所需要解决的重要问题之一。
诸如CVS或Subversion之类的版本控制系统是开发组织使用的一种标准工具。这种工具代表了一些组织的中心源代码版本库,它们被用于保持源代码的有序。用户可以跟踪应用程序源代码的变化,显示不同版本的区别,并可以确定项目分支。而且,它们使得在应用程序部署中进行部分更新成为可能。
很明显,版本控制系统软件是跟踪源代码所必需的,它对于解决应用程序配置问题有非常大的帮助。在本文中,我们将不会把重点放在版本控制系统上,因为这方面已经有很多相关的材料了。在此,我们将关注版本控制问题中的一个小话题:如何使Web应用程序的配置更加便捷(尤其是使用Spring
MVC框架编写的Web应用程序)。
问题是:我们在此讨论的是一种什么样的配置?任何Web应用程序都需要一些资源,这些资源通常都是其所运行的服务器所特有的,例如数据库URL、发送电子邮件的SMTP服务器,以及包含专用软件文件的文件夹等。这样的设置应该集中,从而使应用程序配置更加简单。
但是,这只是这个问题最简单的一种版本。有时候,在应用程序开发中需要更加复杂的配置。这意味着,必须将各次部署中的不同Bean连接起来,而这会使问题更加复杂。
这些应用程序配置问题的解决方案有诸多优势,包括:简化应用程序的安装和配置过程,使源代码版本控制更加简便,减少源代码版本库中的冲突现象。下面,我们将通过示例详细讨论这个话题。
问题。
我们首先来演示一下上文所提到的最简单的版本。在这一场景中,我们希望在应用程序部署中改变的是简单的配置参数,例如链接、密码等。如果您曾经使用Spring
MVC框架开发过Web应用程序,那么您应该知道这里将用到的两个配置文件:
/WEB-INF/applicationContext.xml,它让您可以配置Bean,或者显示应用程序上下文。通过这个文件,您可以定义自己的业务逻辑Bean、资源以及其他可以与Web端口相关联的所有Bean。
/WEB-INF/[servlet-name]-servlet.xml,它被用于配置Web层、视图解析器、控制器、校验器以及其他所有MVC框架中必需的Bean。[servlet-name]指的是在web.xml部署描述符中定义的Spring
dispatcher servlet的名称。
那么问题在哪儿呢?问题就出在applicationContext.xml中将包括一些特定于主机的Bean。本文将定义。其中,最明显的一个示例就是包含了JDBC连接信息的bean,但是任何一种稍微复杂些的应用程序都有十几个类似的Bean。看一下下面的示例:
<bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property >
<value>org.postgresql.Driver</value>
</property>
<property >
</property>
<property >
<value>postgres</value>
</property>
<property >
<value></value>
</property>
</bean>
这个解决方案的问题在于对applicationContext.xml文件的维护。对于初学者来说,设想一下,项目放在源代码版本控制系统中,例如CVS。下面,假设您希望在网站中添加新的功能,那么就需要在应用程序上下文定义中添加额外的Bean定义。问题是如何在生产服务器上体现这些改变。
通常情况下,应用程序的本地实例不会与活动站点使用同样的数据库,因此applicationContext.xml文件将包括让您能够访问本地数据库的设置。当您想提交在源代码版本库中的改变时,就需要注意这些特定于主机属性的同步性。版本库中的文件最终可能使用本地设置中的配置。如果想在生产服务器上更新配置,就必须手动同步这些属性的值。这是非常枯燥的任务,而且还非常容易出错。
对于应用程序的每个实例来说,这个问题更加重要。假如有三位开发人员正在使用代码段基址,而且他们使用的是本地的数据库。当您提交更改的时候,他们每个人在本地服务器上更新源代码的时候都必须非常谨慎。他们会手动同步这些更改,然后提交他们的工作。这样一来,版本控制系统对于这些配置文件来说已经毫无用处。如果曾经使用过Spring
MVC,那么您应该知道applicationContext.xml是应用程序中的关键组件,因为是它将所有的东西粘合在一起。所以,我们需要一种机制来帮助使应用程序中各项保持有序,这点非常重要。
正如前面所提到的,这是您可能遇到的较简单的配置问题。更难的问题出现在当需要在不同服务器中进行不同的Bean连接的时候。这类问题常会出现在日常软件开发任务中。例如,假如您的产品有一个客户身份验证模块,可以对来自关系数据库或LDAP服务器中的用户进行身份验证。自然,这一身份验证模块可以使用抽象了特定版本库的Bean进行配置。如果您想改变不同应用程序部署中验证用户的方式,就需要在applicationContext.xml文件中进行不同的Bean连接。这种配置问题常见于在部署中有可配置特性的所有应用程序。
在下文中,我们将讨论这两种配置问题。首先我们会关注同步的Bean属性问题及其解决方案,接下来,我们会讨论更加复杂的同步Bean连接问题。
解决方案
同步Bean属性
这个问题的一种可行的解决方案是将所有特定于主机的参数都放到普通的Java属性文件中,使用Spring的PropertyPlaceHolderConfigurer类,将这些参数写入Bean属性中。
使用这一解决方案,我们可以生成如下的属性文件(/WEB-INF/jdbc.properties):
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/test
jdbc.user=postgres
jdbc.password=
我们的Bean配置如下:
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property >
<value>/WEB-INF/jdbc.properties</value>
</property>
</bean>
<bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property >
<value>${ jdbc.driver}</value>
</property>
<property >
<value>${ jdbc.url}</value>
</property>
<property >
<value>${ jdbc.user}</value>
</property>
<property >
<value>${ jdbc.password}</value>
</property>
</bean>
如上所述,我们定义了一个PropertyPlaceholderConfigurer类的实例,并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处理器,并将使用定义在文件中的属性来代替所有的占位符(${ ...}value)。
利用这种技术,我们可以从applicationContext.xml中移除所有特定于主机的配置属性。通过这种方式,我们可以自由地为该文件添加新的Bean,而不必担心特定于主机属性的同步性。这样可以简化生产部署和维护。
同步性连接
上面的技术解决了第一个问题,可是如果您计划修改不同应用程序部署之间的Bean连接,这一技术便不很适合。针对这一问题的一个解决方案便是额外创建一个名为applicationContext-[hostname].xml
的XML定义文件。其中[hostname]是部署应用程序的主机的名称。例如,在本地的机器上,这个文件通常名为applicationContext-localhost.xml,而在部署时,它可能更名为applicationContext-somehost.com.xml。
可以猜测,这一文件必须包括特定于某一主机的所有配置Bean。在本文中,我们将假设dataSource
bean定义将位于这类文件中,而不是通用的applicationContext.xml定义。当然,这种机制与前者并非冲突,但是为了更加简单明了,我们将只关注这种方法。
既然我们已经有了特定的配置,下面我们就来讨论一下如何将其整合到整个Spring
MVC配置概念中。要达到这一目的,可以有许多方法,我们将详细地一一说明。但首先,我们应该注意到,由于有些Bean可能位于独立的配置文件中,因此在applicationContext.xml中,所有对它们的局部引用都必须更换成全局名称。
例如,如下引用:
<property
>
<ref local="someBean"/>
</property> 应更改为:
<property >
<ref bean="someBean"/>
</property> 在这之后,我们有很多可以添加额外的资源以用于配置的方式。其中最明显的就是使用<import>标签将这一额外资源包含在applicationContext.xml配置文件中。使用时,要将该标签放在applicationContext.xml文件开头。例如:
<import
resource="applicationContext-somehost.com.xml"/>
现在,在独立的XML定义文件和普通的应用程序上下文定义文件中的所有通用Bean定义都有了特定于主机的连接。由于大多数的Bean都不是特定于主机的,因此我们可以像处理Web应用程序中的其他资源一样自由地处理applicationContext.xml文件,并可以通过合适的版本控制系统与其进行同步。
但是,上述方法也有一定的弊端。如果您想保留不同XML文件的不同配置,就仍然必须担心applicationContext.xml的同步性,因为资源的名称必须根据不同服务器进行更改。虽然与原有的解决方案相比有了很大提高,只需更改文件名,但是这还是需要开发人员的手动协助。
由于与applicationContext.xml相比,主机配置不需如此频繁地进行更改,因此下一步便是将主机配置移动到web.xml文件中(如果可能的话)。幸运的是,我们有一个可用的解决方案。看一下下面关于web.xml配置的片断:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-somehost.com.xml
</param-value>
</context-param> 正如您所看到的,除了web.xml文件中常有的ContextLoaderListener之外,我们还添加了contextConfigLocation上下文参数配置。这一参数用于指示框架查找这些配置文件的位置。如果这一参数被省略,则Spring就只能到applicationContext.xml中查找。这里我们也定义了特定于主机的配置文件来使用。
利用这种方法,我们将所有特定于主机的配置从applicationContext.xml文件中移除,这样便减轻了其在不同应用程序部署中的同步性。
如果这种方法成为您的新习惯,您还可以使其更加灵活。通过遵守下列指令,也可以将特定于主机的配置从web.xml文件中移除。
为此,需要创建特定于我们的应用程序上下文的类:
package
net.nighttale.spring.util;
import java.net.InetAddress;
import
org.springframework.web.context.support.XmlWebApplicationContext;
public
class PerHostXmlWebApplicationContext
extends XmlWebApplicationContext {
protected String[] getDefaultConfigLocations() {
String hostname = "localhost";
try {
hostname =
InetAddress.getLocalHost().getHostName();
} catch (Exception e) {
}
String perHostConfiguration =
DEFAULT_CONFIG_LOCATION_PREFIX
+ "applicationContext-"
+ hostname
+ DEFAULT_CONFIG_LOCATION_SUFFIX
logger.debug(
"Adding per host configuration file: "
+ perHostConfiguration
);
if
(getNamespace() != null) {
return new String[] {
DEFAULT_CONFIG_LOCATION_PREFIX
+ getNamespace()
+
DEFAULT_CONFIG_LOCATION_SUFFIX
, perHostConfiguration};
}
else {
return new String[] {
DEFAULT_CONFIG_LOCATION
, perHostConfiguration};
}
}
}
这个类拓展了Spring中常被作为默认值使用的XmlWebApplicationContext。XmlWebApplicationContext类将Web应用程序的配置从XML定义文件中复制过来。默认情况下,它可以配置来自applicationContext.xml和[servlet-name]-servlet.xml文件中的应用程序。这个类执行的惟一一项额外任务便是获取它所在的主机名称,并将applicationContext-[hostname].xml文件添加到配置文件列表中。
为了使用这个类,我们需要对其进行编译,将其包含在类途径中,并指示Spring框架使用它。前两步非常简单,我们就不在此赘述。我们可以指示Sping通过contextClass上下文参数来使用它。除了web.xml文件中的原有配置,我们还可以添加下列内容:
<context-param>
<param-name>contextClass</param-name>
<param-value>
net.nighttale.spring.util.PerHostXmlWebApplicationContext
</param-value>
</context-param>
如果我们使用这一配置片断,将会有三个文件被用于初始化这个框架:[servlet-name]-servlet.xml、applicationContext-[hostname].xml以及applicationContext.xml。
正如您所看到的,applicationContext.xml和web.xml文件已经完全摆脱了任何特定的配置细节,而且您也不必担心会在更新应用程序时破坏配置。
但是,这种方法有一个不足之处。因为,不论是否会使用,都需要在应用程序部署中有第三个配置文件。在这种情况下,便不需要特定于主机的配置。例如:
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD
BEAN//EN"
"Address.getLocalHost().getHostName())
可以将其作为Java代码执行,也可在喜欢使用的脚本语言(如BeanShell或Groovy)中作为一个具有Java风格语法的脚本执行。在获取了主机的名称之后,应该创建一个默认的/WEB-INF/applicationContext-[hostname].xml空文件夹(如我们上面所定义的),然后便可以开始了。
åpythonç¨ä»ä¹è½¯ä»¶å¥½(åpythonç¨ä»ä¹ide)
æ°æå¦pythonç¨ä»ä¹è½¯ä»¶
æ°æå¦pythonç¨ç软件å¦ä¸ï¼
1.SublimeText
SublimeTextæ¯ä¸æ¬¾é常æµè¡ç代ç ç¼è¾å¨ï¼æ¯æPython代ç ç¼è¾ï¼åæ¶å ¼å®¹ææå¹³å°ï¼å¹¶ä¸ä¸°å¯çæ件æ©å±äºè¯æ³åç¼è¾åè½ï¼è¿ æ·å°å·§ï¼å ·æè¯å¥½çå ¼å®¹æ§ï¼å¾åç¼ç¨äººå£«çåç±ï¼
2.Vim
VimåViæ¯ä¸ç§æ¨¡åç¼è¾å¨ï¼å®å°ææ¬æ¥çä»ææ¬ç¼è¾ä¸å离ï¼VIMå¨åå§VIä¹ä¸åäºè¯¸å¤æ¹è¿ï¼å æ¬å¯æ©å±æ¨¡ååå°±å°ä»£ç æ建ï¼VIMScriptså¯ç¨äºåç§Pythonå¼åä»»å¡ï¼
3.Atom
Atom被称为âä¸çºªå¯ç ´è§£çææ¬ç¼è¾å¨âï¼å¯ä»¥å ¼å®¹ææå¹³å°ï¼æ¥ææ¶å°ççé¢ãæ件系ç»æµè§å¨åæ©å±æ件å¸åºï¼ä½¿ç¨Electronæ建ï¼å ¶è¿è¡æ¶å®è£ çæ©å±æ件å¯æ¯æPythonè¯è¨ï¼
4.GNUEmacs
GNUEmacsæ¯ä¸æ¬¾ç»èº«å è´¹ä¸å ¼å®¹ä»»ä½å¹³å°ç代ç ç¼è¾å¨ï¼ä½¿ç¨å¼ºå¤§çLispç¼ç¨è¯è¨è¿è¡å®å¶ï¼å¹¶ä¸ºPythonå¼åæä¾åç§å®å¶èæ¬ï¼æ¯ä¸æ¬¾å¯æ©å±ãå¯å®å¶ãèªå¨è®°å½ãå®æ¶æ¾ç¤ºçç¼è¾å¨ï¼ä¸ç´è¦ç»å¨UNIXå¨å´ã
5.VisualStudioCode
VisualStudioCodeæ¯ä¸æ¬¾å ¼å®¹LinuxãMacOSXåWindowså¹³å°çå ¨åè½ä»£ç ç¼è¾å¨ï¼å¯æ©å±å¹¶ä¸å¯ä»¥å¯¹å ä¹ææä»»å¡è¿è¡é ç½®ï¼å¯¹äºPythonçæ¯æå¯ä»¥å¨VisualStudioCodeä¸å®è£ æ件ï¼åªéå¿«éç¹å»æé®å³å¯æåå®è£ ï¼ä¸å¯èªå¨è¯å«Pythonå®è£ ååºã
Pythonç¨ä»ä¹è½¯ä»¶å代ç VSCodeï¼è¿æ¯ä¸ä¸ªå è´¹ãå¼æºã跨平å°ç代ç ç¼è¾å¨ï¼ç±å¾®è½¯èªä¸»è®¾è®¡ç åï¼çé¢é£æ ¼åVSç¸ä¼¼ï¼ä½æ²¡æVSé£ä¹åºå¤§èè¿ï¼è¿è¡é度快ãå ç¨å åå°ï¼æ¯æ常è§çèªå¨è¡¥å ¨ã代ç é«äº®ãè¯æ³æ示ãGITçåè½ï¼å®è£ Pythonæ件åï¼å¯ä»¥ç´æ¥ç¼è¾è¿è¡Pythonç¨åºã对äºPythonå ¥é¨å¼åè æ¥è¯´ï¼æ¯é常ä¸éçéæ©ã
SublimeTextï¼æ¯ä¸ä¸ªé常ä¸éç代ç ç¼è¾å¨ï¼åºæ¬åè½åVSCodeå·®ä¸å¤ï¼è½»ä¾¿çµæ´»ãè¿è¡é度快ï¼ææ¬ç¼è¾åè½å¼ºå¤§ï¼å¸¸è§çèªå¨è¡¥å ¨ãè¯æ³æ£æ¥ãè¯æ³æ示åè½é½è½å¾å¥½æ¯æï¼é 置好æ¬å°Python解éå¨è·¯å²åï¼ä¹æ¯ä¸ä¸ªé常ä¸éçPythonå¼å软件ã
Atomï¼ä¹æ¯ä¸ä¸ªå è´¹ãå¼æºã跨平å°ç代ç ç¼è¾å¨ï¼ç±GitHubä¸é¨ä¸ºå¹¿å¤§ç¨åºå设计ç åï¼åºæ¬åè½åå2个ç¼è¾å¨å·®ä¸å¤ï¼æ¯æ常è§çæºè½è¡¥å ¨ã代ç é«äº®ãè¯æ³æ£æ¥çåè½ï¼å®è£ Pythonæ件åï¼ä¹å¯ä»¥ç´æ¥ç¼è¾è¿è¡Pythonç¨åºã
Vimï¼è¿æ¯Linuxç¯å¢ä¸ä½¿ç¨æå¤çææ¬ç¼è¾å¨ï¼è½»ä¾¿çµæ´»ãæ件æ©å±ä¼å¤ï¼å¯ä»¥èªå®ä¹é ç½®ç¯å¢ï¼ååç§ç¼ç¨è¯è¨é½è½æ··æï¼èä¸ææå¾å¥½ï¼å®è£ Pythonä¹åï¼å¯ä»¥ç´æ¥å½ä½ä¸ä¸ªé常ä¸éçPythonå¼å软件æ¥ä½¿ç¨ã
VisualStudioï¼ç®å使ç¨æå¤çIDEç¯å¢ï¼éæäºé常å¤çå¼åç¯å¢ï¼æ°ççæ¬ä¹å¼å§æ¯æPythonå¼åï¼å¾éPythonä¹åï¼å¯ä»¥ç´æ¥ç¼è¾ãè°è¯ãè¿è¡Pythonç¨åºï¼åè½å¼ºå¤§ã
PyCharmï¼ä¸ä¸ªPythonä¸ç¨çå¼å软件ï¼å¨ä¸çé常æµè¡ï¼ä¹é常å欢è¿ï¼æ¯æ代ç éæã代ç åæãåå æµè¯çé«çº§åè½ï¼å æ¤å¼åãè°è¯ãè¿è¡æçå¾é«ï¼æ¬èº«èªå¸¦äºè®¸å¤å·¥ç¨æ¨¡åï¼å¯ä»¥å¿«éæ建flaskãDjangoçwebåºç¨ã
pythonç¨ä»ä¹ç¼è¾å¨
第ä¸æ¬¾ï¼SublimeText
SublimeTextæ¯ä¸ä¸ªä»£ç ç¼è¾å¨ï¼ä¹æ¯HTMLåæ£æå è¿çææ¬ç¼è¾å¨ãSublimeTextæ¯ç±ç¨åºåJonSkinneräºå¹´1æ份æå¼ååºæ¥ï¼å®æå被设计为ä¸ä¸ªå ·æ丰å¯æ©å±åè½çVimã
SublimeTextå ·ææ¼äº®çç¨æ·çé¢å强大çåè½ï¼ä¾å¦ä»£ç 缩ç¥å¾ï¼Pythonçæ件ï¼ä»£ç 段çãè¿å¯èªå®ä¹é®ç»å®ï¼èååå·¥å ·æ ã
SublimeTextç主è¦åè½å æ¬ï¼æ¼åæ£æ¥ï¼ä¹¦ç¾ï¼å®æ´çPythonAPIï¼Gotoåè½ï¼å³æ¶é¡¹ç®åæ¢ï¼å¤éæ©ï¼å¤çªå£ççãSublimeTextæ¯ä¸ä¸ªè·¨å¹³å°çç¼è¾å¨ï¼åæ¶æ¯æWindowsãLinuxãMacOSXçæä½ç³»ç»ã
第äºæ¬¾ï¼Geany
Geanyæ¯ä¸ä¸ªå°å·§ç使ç¨GTK+2å¼åç跨平å°çå¼æºéæå¼åç¯å¢ï¼ä»¥GPL许å¯è¯ååæºä»£ç ï¼æ¯å è´¹çèªç±è½¯ä»¶ã
Geanyå°å·§ãå¯å¨è¿ éï¼æ¥æè¯æ³é«äº®ã代ç èªå¨è¡¥å®ã代ç æå ãæ件æ©å±ãèªå¨è¡¥å®ç»å¸¸ä½¿ç¨çç»æãè°ç¨æ示çåè½ï¼æ¯æCãJavaãPHPãhtmlãPythonãperlãpascalçè¯è¨ï¼å¯¹å¼åè èè¨æ¯ä¸æ¬¾ç¸å¯¹ç®ä¾¿çå·¥å ·ã
æåªäºå¥½çPythonIDEIDEæ¯å¼åè å建ç¨åºæ¶æ使ç¨ç软件å ï¼å®å¯ä»¥éè¿ç®åçç¨æ·çé¢éæå¤ä¸ªé«åº¦å ³èçç»ä»¶ï¼ä»èæ大åæåå¼åè çç产æçï¼æ¬è´¨ä¸ï¼IDEæ¯ä¸ç§æ¹è¿ä»£ç å建ãæµè¯ådebugæµç¨çå·¥å ·ï¼å®ä½¿è¿äºå·¥ä½æ´å ç®åã
IDE使ç¨çå·¥å ·å æ¬ï¼ææ¬ç¼è¾å¨å/æ解éå¨è£ é èªå¨åå·¥å ·(assemblyautomationtool)è°è¯å¨(debugger)ã
ä¸é¢æ¯ç®åæ¯è¾æµè¡çPythonIDEï¼
1ãPyCharm
ç±èå软件å¼åå ¬å¸JetBrainså¼åãå¨æ¶å人工æºè½åæºå¨å¦ä¹ æ¶ï¼å®è¢«è®¤ä¸ºæ¯æ好çPython
IDEãæéè¦çæ¯ï¼Pycharmå并äºå¤ä¸ªåºï¼å¦MatplotlibåNumPyï¼å¸®å©å¼åè æ¢ç´¢æ´å¤å¯ç¨é项ã
å ¶æ¯æwebå¼åæ¡æ¶ï¼å¦PyramidãFlaskåDjangoãæä¾æºè½ä»£ç åè½ï¼å¯ä»¥æ§è¡æ´ç²¾ç¡®ãå¿«éçbugä¿®å¤ãå¨DockeråVagrantè¿æ¥åsshç»ç«¯ç帮å©ä¸ï¼å 许å¨è¿ç¨ä¸»æºä¸è¿è¡ç¨åºå¼åã
2ãVisualStudioCode
VSCodeæ¯å®æ´ç代ç ç¼è¾å¨ï¼å ·å¤å¾å¤ä¼ç§åè½ï¼è®¸å¤ç¨åºåç§°å ¶ä¸ºæ好çIDEç¼è¾å¨ã
å ¶Electronæ¡æ¶å 许å¼åè å¨å ä¹ææå¹³å°ä¸ä½¿ç¨VSCodeãå¨ç¼è¾å¨ä¸ç´æ¥debugãæ¯æå¤ä¸ªé®çå¿«æ·é®ï¼ä»¥å éç¼ç¨ã
3ãSublimeText
被认为æ¯æ好çPythonç¼è¾å¨ï¼å 为å®ç®åãéç¨ãæ¹ä¾¿ãå®ä½¿ç¨å¹¿æ³ï¼å¯ç¨äºä¸åçå¹³å°ã
å¯å¤çå¤ç§æ è®°è¯è¨ãå 许ç¨æ·éæ©æ³è¦è¿è¡ç项ç®ãå ·å¤è½å¤æä¾ç±»åå½æ°å®½ç´¢å¼çéè¦å·¥å ·ãæä¾å¼ºå¤§çAPIåç»ç»åççæç³»ç»ï¼ä»¥å®ç°é«æ§è½ã
4ãVI/Vim
ä½åæ好çPythonIDEå·¥å ·å5åãå®æ¯ä¸ä¸ªmodaleditorï¼å¯ä»¥ä»ãæ件ç¼è¾ãä¸åå²æ件ãç¸æ¯æåçViï¼Vimæäºå·¨å¤§è¿æ¥ï¼åè½æ´å 强大ã
å ¶å ·å¤é®ççé¢ï¼å¯ä»¥æåæçãæ¯æå¤ä¸ªæ件ãéè¿.vimrcæ件å®ç°ä¸åæ©å±åè½ã
5ãGNUEmacs
ä¹æ¯æ好Pythonç¼è¾å¨çæåç«äºè ãå®å¸¸è¢«æ述为å¯æ©å±ãèªææ¡£åãå®æ¶æ¾ç¤ºã尽管å®å¨ä¸ç并éææ°ï¼ä½å®ç»å¸¸å级æ¥æ»¡è¶³å¼åè çéæ±ã
åªäºpythonçç¼ç¨è½¯ä»¶å¼å¾æ¨èï¼ç¼åpythonæºä»£ç ç软件.é¦æ¨çPycharmã
PyCharmç¨äºbaiä¸è¬IDEå ·å¤çåè½ï¼æ¯å¦ï¼è°è¯ãè¯æ³é«äº®ãProject管çãdu代ç 跳转ãæºè½æ示ãèªå¨å®zhiæãåå æµè¯ãçæ¬æ§å¶
å¦å¤ï¼PyCharmè¿æä¾äºä¸äºå¾å¥½çåè½ç¨äºDjangoå¼åï¼åæ¶æ¯æGoogleAppEngineï¼æ´é ·çæ¯ï¼PyCharmæ¯æIronPythonã
å ¶æ¬¡æ¯sublimetextï¼SublimeTextæ¯æå¤ç§ç¼ç¨è¯è¨çè¯æ³é«äº®ãæ¥æä¼ç§ç代ç èªå¨å®æåè½ï¼è¿æ¥æ代ç ç段(Snippetï¼çåè½ï¼å¯ä»¥å°å¸¸ç¨ç代ç ç段ä¿åèµ·æ¥ï¼å¨éè¦æ¶éæ¶è°ç¨ãæ¯æVIM模å¼ï¼å¯ä»¥ä½¿ç¨Vim模å¼ä¸çå¤æ°å½ä»¤ãæ¯æå®ï¼ç®åå°è¯´å°±æ¯ææä½å½å¶ä¸æ¥æè èªå·±ç¼åå½ä»¤ï¼ç¶åææ¾åæå½å¶çæä½æè å½ä»¤ã
è¿æJupyter,JupyterNotebook(æ¤å被称为IPythonnotebook)æ¯ä¸ä¸ªäº¤äºå¼ç¬è®°æ¬ï¼æ¯æè¿è¡å¤ç§ç¼ç¨è¯è¨ã
æåå°±æ¯æåºæ¬çnopad++ï¼æå¼å§çæ¶åæ¯å®ç¨è¿æ¬¾ä½ä¸ºå¼åå·¥å ·è¿è¡åºç¡ç»ä¹ ã
Pythonç¼ç¨éè¦ç¨ä»ä¹è½¯ä»¶Pythonç¼ç¨éè¦ç¨ä»¥ä¸å 个软件ï¼
1ãPycharmï¼PyCharmæ¯ä¸ç§PythonIDEï¼å¸¦æä¸æ´å¥å¯ä»¥å¸®å©ç¨æ·å¨ä½¿ç¨Pythonè¯è¨å¼åæ¶æé«å ¶æççå·¥å ·ï¼æ¯å¦è°è¯ãè¯æ³é«äº®ãProject管çã代ç 跳转ãæºè½æ示ãèªå¨å®æãåå æµè¯ãçæ¬æ§å¶ã
2ãIDLEï¼Idleæ¯ä¸ä¸ªçº¯Pythonä¸ä½¿ç¨Tkinterç¼åçç¸å½åºæ¬çIDEã
3ãIpythonï¼ipythonæ¯ä¸ä¸ªpythonç交äºå¼shellï¼æ¯é»è®¤çpythonshell好ç¨å¾å¤ã
å¦éå¦ä¹ Pythonç¼ç¨æ¨èéæ©è¾¾å æè²ï¼ç§æ¿âåå¸åºé«å¾ãé«å¾æ¿é«èªâçæå¦ç念ï¼æ¯è¾¾å å ¬å¸ç¡®ä¿æå¦è´¨éçéè¦ç¯èãä½ä¸ºç¾å½ä¸å¸èä¸æè²å ¬å¸ï¼è¯ä¿¡ç»è¥ï¼æç»èåå®£ä¼ æ¯è¯¥æºæéå¢çç»è¥ç念ã该æºæå¨å¦åæ¥åä¹åå®å ¨å ¬å¼æææ课讲å¸çæ课å®æåèæ¯èµæï¼å¹¶ä¸å¦åç¾è®¢ãæå®æ课讲å¸æ¿è¯ºä¹¦ãï¼ç¡®ä¿å¦åå©çã
æ³äºè§£æ´å¤æå ³Pythonçç¸å ³ä¿¡æ¯ï¼æ¨èå¨è¯¢è¾¾å æè²ãè¾¾å ä¸é¿éãAdobeã红帽ãORACLEã微软ãç¾å½è®¡ç®æºè¡ä¸åä¼ï¼CompTIAï¼ãç¾åº¦çå½é ç¥ååå建ç«äºé¡¹ç®åä½å ³ç³»ãå ±åå¶å®è¡ä¸å¹è®æ åï¼ä¸ºè¾¾å å¦åæä¾é«ç«¯ææ¯ãæå¦è¯¾ç¨åå½é åå认å¯ï¼è®©è¾¾å å¦åæ´å ·å½é åå°±ä¸ç«äºåã