基于PLC的十字路口交通信號燈控制系統(tǒng)設(shè)計(jì)_第1頁
基于PLC的十字路口交通信號燈控制系統(tǒng)設(shè)計(jì)_第2頁
基于PLC的十字路口交通信號燈控制系統(tǒng)設(shè)計(jì)_第3頁
基于PLC的十字路口交通信號燈控制系統(tǒng)設(shè)計(jì)_第4頁
基于PLC的十字路口交通信號燈控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAGE

PAGE

73

【摘要】:針對近年來城市交通的擁擠現(xiàn)象,特別是駕駛員違章嚴(yán)重、交通事故頻發(fā)、車輛尾氣污染等問題,介紹集計(jì)算機(jī)、信息、電子及通訊等眾多高新技術(shù)手段于一體的智能交通指揮中心控制系統(tǒng)。該系統(tǒng)的安裝及使用,大大緩解了城市道路堵塞現(xiàn)象、提高了道路的通行能力。減少了駕駛員違章的次數(shù),抑制了交通事故的發(fā)生、同時(shí)能夠減輕車輛尾氣排放,從而對降低環(huán)境污染起到了不可低估的作用。

分析現(xiàn)代城市交通控制與管理問題的現(xiàn)狀,結(jié)合城鄉(xiāng)交通的實(shí)際情況闡述了交通燈控制系統(tǒng)的工作原理,給出了一種簡單實(shí)用的城市交通燈控制系統(tǒng)的硬件電路設(shè)計(jì)方案。

【關(guān)鍵詞】:交通控制交通燈PLC控制機(jī)

【Abstract】:Inrecentyears,forurbantrafficcongestion,especiallydriversofseriousviolations,thefrequenttrafficaccidents,vehicleexhaustpollution,introducedthesmall-computer,information,electronicsandcommunicationsandotherhigh-techmeansinoneoftheintelligenttrafficcontrolcenterSystem.Thesystem,andtheuseofandgreatlyeasetheurbanroadcongestion,increasedroadcapacity.Toreducethenumberofillegaldriverstocurbtheoccurrenceoftrafficaccidentsandatthesametimetoreducevehicleemissions,thusreducingenvironmentalpollutionHaveplayedaroleshouldnotbeunderestimated.

Analysisofthemodernurbantrafficcontrolandmanagementofthestatusquo,combinedwiththeactualsituationofurbanandruraltransportonthetrafficlightcontrolsystemworkingprinciple,givenasimpleandpracticalurbantrafficlightcontrolsystemhardwaredesign.

【Keywords】:trafficcontroltrafficlightsPLCcontrol

目錄

序言

3

一、PLC的概述

4

(一)PLC的產(chǎn)生和定義

4

(二)PLC的基本組成

4

二、PLC的硬件與工作原理

6

(一)PLC的硬件結(jié)構(gòu)

6

(二)CPU模塊中的存儲器

7

(三)PLC的工作原理

8

三、PLC的特點(diǎn)與應(yīng)用領(lǐng)域

10

(一)PLC的特點(diǎn)

10

(二)PLC的應(yīng)用領(lǐng)域

11

(三)PLC的前景

11

四、PLC的程序設(shè)計(jì)基礎(chǔ)

12

(一)PLC中的程序結(jié)構(gòu)

12

(二)F1—40MR的編程組件:

13

(三)某些編程組件的使用特性及含義:

14

五、十字路口交通燈的介紹

16

(一)十字路口交通燈的原理及示意圖

16

六、應(yīng)用PLC設(shè)計(jì)十字路口交通燈

17

(一)輸入輸出點(diǎn)分配表

17

(二)順序功能圖

18

(三)梯形圖:

18

(四)指令表

18

七、小結(jié)

19

致謝

20

參考文獻(xiàn)

21

附錄

22

序言

隨著社會經(jīng)濟(jì)的發(fā)展,城市交通問題越來越引起人們的關(guān)注。人、車、路三者關(guān)系的協(xié)調(diào),已成為交通管理部門需要解決的重要問題之一。城市交通控制系統(tǒng)是用于城市交通數(shù)據(jù)監(jiān)測、交通信號燈控制與交通疏導(dǎo)的計(jì)算機(jī)綜合管理系統(tǒng),它是現(xiàn)代城市交通監(jiān)控指揮系統(tǒng)中最重要的組成部分。

不同的城市有不同城市的問題,但共性就是混合交通流問題。在交叉口如何解決混合交通流中的相互影響或彼此的相互影響,就是解決問題的關(guān)鍵!隨著我國城市化建設(shè)的發(fā)展,越來越多的新興城市的出現(xiàn),使得城市的交通成為了一個絕對主要的問題。同時(shí)隨著我國經(jīng)濟(jì)的穩(wěn)步發(fā)展,隨著城市機(jī)動車量的不斷增加,人民的生活水平日漸提高,越來越多的汽車進(jìn)入尋常老百姓的家庭,據(jù)不完全統(tǒng)計(jì),目前我國城市里的十字路口交通系統(tǒng)大都采用定時(shí)來控制(不排除繁忙路段或高峰時(shí)段用交警來取代交通燈的情況)。

單片機(jī)控制系統(tǒng)設(shè)計(jì)時(shí)硬件和軟件均要設(shè)計(jì),抗干擾性能差,不通用,并且需要有接口電路與之配套,價(jià)格中等,制造較難。程序的設(shè)計(jì)中,分析控制交通的多種原理,用傳統(tǒng)的方法實(shí)現(xiàn)難度較大,所以使用可編程控制器,其主要原因是因?yàn)镻LC具有簡單易懂、操作方便、可靠性高、通用靈活、體積小、使用壽命長等一系列的優(yōu)點(diǎn)。

本設(shè)計(jì)介紹了應(yīng)用PLC實(shí)現(xiàn)十字路口交通信號燈的自動控制。通過對交通信號燈的控制要求分析,對PLC控制系統(tǒng)進(jìn)行了軟、硬件設(shè)計(jì),并通過實(shí)驗(yàn)證明該系統(tǒng)簡單、經(jīng)濟(jì)、運(yùn)行可靠,具有很高的實(shí)用價(jià)值。

一、PLC的概述

(一)PLC的產(chǎn)生和定義

1968年由美國通用汽車公司(GE)提出,1969年有美國數(shù)字設(shè)備公司(DEC)研制成功,有邏輯運(yùn)算、定時(shí)、計(jì)算功能稱為PLC(programmablelogiccontroller)。

80年代,由于計(jì)算機(jī)技術(shù)的發(fā)展,PLC采用通用微處理器為核心,功能擴(kuò)展到各種算術(shù)運(yùn)算,PLC運(yùn)算過程控制并可與上位機(jī)通訊、實(shí)現(xiàn)遠(yuǎn)程控制。被稱為PC(programmablecontroller)即可編程控制器。

國際電工委員會(IEC)在1985年對PLC做了如下定義:“可編程控制器(ProgrammbleLogicController,PLC)是一種數(shù)字運(yùn)算操作的電子系統(tǒng),專為在工業(yè)環(huán)境下應(yīng)用而設(shè)計(jì)。它采用可編程序的存儲器,用來在其內(nèi)部存儲執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)和算術(shù)運(yùn)算等操作的指令,并通過數(shù)字式、模擬式的輸入和輸出,控制各種類型的機(jī)械或生產(chǎn)過程。PLC及其有關(guān)設(shè)備,都應(yīng)按易于使工業(yè)控制系統(tǒng)形成一個整體,易于擴(kuò)充其功能的原則來設(shè)計(jì)?!睆囊陨隙x中可以看出,PLC是一種用程序來改變控制功能的工業(yè)控制計(jì)算機(jī),除了能夠完成各種各樣的控制功能外,還有與其它計(jì)算機(jī)智能設(shè)備通信聯(lián)網(wǎng)的功能。

PLC是一種數(shù)字運(yùn)算操作的電子系統(tǒng),專為在工業(yè)環(huán)境應(yīng)用而設(shè)計(jì)的。它采用可編程序的存貯器,用來在其內(nèi)部存貯執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)和算術(shù)運(yùn)算等操作的指令,并通過數(shù)字式、模擬式的輸入和輸出,控制各種類型的機(jī)械或生產(chǎn)過程。

(二)PLC的基本組成

目前,可編程控制器的產(chǎn)品很多,不同的廠家生產(chǎn)的PLC以及同一家生產(chǎn)的不同型號的PLC其結(jié)構(gòu)個不相同,但就其工作原理而言,是大致相同的。它們都是以微處理器為核心的結(jié)構(gòu),其功能的實(shí)現(xiàn)不僅基于硬件的作用,而更靠軟件的支持。PLC的主機(jī)由微處理器(CPU)、存儲器(EPROM、ROM)、輸入/輸出模塊、外設(shè)I/O接口、通信接口及電源組成。

下面分別介紹PLC各組成部分及作用。

CPU模塊

CPU模塊主要由微處理器(CPU芯片)和存儲器組成。在PLC控制系統(tǒng)中,CPU模塊相當(dāng)于認(rèn)的大腦和心臟,它不斷地采集輸入信號,執(zhí)行用戶程序,刷新系統(tǒng)的輸出;存儲器用來儲存程序和數(shù)據(jù)。

I/O模塊

輸入(Input)模塊和輸出(Output)模塊簡稱為I/O模塊,它們相當(dāng)于人的眼、耳、手、腳,是聯(lián)系外部現(xiàn)場設(shè)備和CPU模塊的橋梁。

輸入模塊用來接收和采集輸入信號,開關(guān)量輸入模塊用來接收從按鈕、選擇開關(guān)、數(shù)字撥碼開關(guān)、限位開關(guān)、接近開關(guān)、光電開關(guān)、壓力繼電器等來的開關(guān)量輸入信號;模擬量輸入模塊用來接收電位器、測速發(fā)電機(jī)和各種變送器提供的連續(xù)變化的模擬量電流電壓信號。開關(guān)量輸出模塊用來控制接觸器、電磁閥、電磁鐵、指示燈、數(shù)字顯示裝置和報(bào)警裝置等輸出設(shè)備;模擬量輸出模塊用來控制調(diào)節(jié)閥、變頻器等執(zhí)行裝置。

CPU模塊的工作電壓一般是5V,而PLC外部的輸入、輸出電路的電源電壓較高,例如DC24V和AC220V。從外部引入的尖峰電壓和干擾噪聲可能損壞CPU模塊中的元器件,或使PLC不能正常工作。在I/O模塊中,用光耦合器、光敏晶閘管、小型繼電器等器件來隔離PLC的內(nèi)部電路和外部的I/O電路。I/O模塊除了傳遞信號外,還有電平轉(zhuǎn)換與隔離的作用。

(3)編程器

編程器用來生成用戶程序,并用它來編輯、檢查、修改用戶程序,監(jiān)視用戶程序的執(zhí)行情況。手持式編程器不能直接輸入和編輯梯形圖,只能輸入和編輯指令表程序,因此又叫做指令編程器。它的體積小,價(jià)格便宜,一般用來給小型PLC編程,或者用于現(xiàn)場調(diào)試和維護(hù)。

使用編程軟件可以在計(jì)算機(jī)屏幕上直接生成和編輯梯形圖或指令表程序,并且可以實(shí)現(xiàn)不同編程語言之間的相互轉(zhuǎn)換。程序被編譯后下載到PLC,也可以將PLC中的程序上傳到計(jì)算機(jī)。程序可以存盤或打印,通過網(wǎng)絡(luò)或電話線,還可以實(shí)現(xiàn)遠(yuǎn)程編程和傳送。

電源

PLC使用AC220V電源或DC24V電源。內(nèi)部的開關(guān)電源為各模塊提供不同電壓等級的直流電源。小型PLC可以為輸入電路和外部的電子傳感器(例如接近開關(guān))提供DC24V電源,驅(qū)動PLC負(fù)載的直流電源一般由用戶提供。

二、PLC的硬件與工作原理

(一)PLC的硬件結(jié)構(gòu)

根據(jù)硬件結(jié)構(gòu)的不同,可以將PLC分為整體式、模塊式和混合式。

整體式PLC

整體式又叫做單元式或箱體式,它的體積小、價(jià)格低,小型PLC一般采用整體式結(jié)構(gòu)。

整體式PLC將CPU模塊、I/O模塊和電源裝在一個箱型塑料機(jī)殼內(nèi),S7-200稱為CPU模塊。其前蓋下面有模式選擇開關(guān)、模擬量電位器和擴(kuò)展模塊連接器。S7-200系列PLC提供多種具有不同I/O點(diǎn)數(shù)的CPU模塊和數(shù)字量、模擬量I/O擴(kuò)展模塊供用戶選用。CPU模塊和擴(kuò)展模塊用扁平電纜連接,可以選用全輸入型或全輸出型的數(shù)字量I/O擴(kuò)展模塊來改變輸入、輸出點(diǎn)的比例。

整體式PLC還配備有許多專用的特殊功能模塊,例如模擬量輸入、輸出模塊、熱電偶模塊、位置控制模塊和通信模塊等,使PLC的功能得到擴(kuò)展。

模塊式PLC

大、中型PLC一般采用模塊式結(jié)構(gòu),它由機(jī)架和模塊組成。模塊插在模塊插座上,后者焊在機(jī)架中的總線連接板上,有不同槽數(shù)的機(jī)架供用戶選用,如果一個機(jī)架容納不下選用的模塊,可以增設(shè)一個或數(shù)個擴(kuò)展機(jī)架,各機(jī)架之間接口模塊和電纜相連。

用戶可以選用不同檔次的CPU模塊、品種繁多的I/O模塊和特殊功能模塊,對硬件配置的選擇余地較大,維修時(shí)更換模塊也很方便。

整體式PLC每一I/O點(diǎn)的平均價(jià)格比模塊式的便宜,小型控制系統(tǒng)一般采用整體式PLC。但是模塊式PLC的硬件組態(tài)方便靈活,I/O點(diǎn)數(shù)的多少、輸入點(diǎn)數(shù)與輸出點(diǎn)數(shù)的比例、I/O模塊的種類和塊數(shù)、特殊I/O模塊的使用等方面的選擇余地都比整體式PLC大得多,維修時(shí)更換模塊、判斷故障范圍也很方便,因此較復(fù)雜的、要求較高的系統(tǒng)一般選用模塊式PLC。

(二)CPU模塊中的存儲器

存儲器分為系統(tǒng)程序存儲器和用戶程序存儲器。系統(tǒng)程序相當(dāng)于個人計(jì)算機(jī)的操作系統(tǒng),它使PLC具有基本的智能,能夠完成PLC設(shè)計(jì)者規(guī)定的各種工作。系統(tǒng)程序由PLC生產(chǎn)廠家設(shè)計(jì)并固化在ROM(只讀存儲器)中,用戶不能讀取。用戶程序由用戶設(shè)計(jì),它使PLC能完成用戶要求的特定功能。用戶程序存儲器的容量以字節(jié)(B)為單位。

PLC使用以下幾種物理存儲器:

隨機(jī)存取存儲器(RAM)

用戶可以用編程裝置讀出RAM中的內(nèi)容,也可以將用戶程序?qū)懭隦AM,因此RAM又叫讀/寫存儲器。它是易失性的存儲器,它的電源中斷后,儲存的信息將會丟失。

RAM的工作速度高、價(jià)格便宜、改寫方便。在關(guān)斷PLC的外部電源后,可以用鋰電池保存RAM中的用戶程序和某些數(shù)據(jù)。鋰電池可以用1~3年,需要更換鋰電池時(shí),由PLC發(fā)出信號,通知用戶?,F(xiàn)在部分PLC仍然用RAM來儲存用戶程序。

只讀存儲器(ROM)

ROM的內(nèi)容只能讀出,不能寫入。它是非易失性的,它的電源消失后,仍能保存儲存的內(nèi)容。ROM用來存放PLC的系統(tǒng)程序。

可以電擦除可編程的只讀存儲器(EEPROM)

EEPROM是非易失性的,但是可以用編程裝置對它編程,兼有ROM的非易失性和RAM的隨機(jī)存取優(yōu)點(diǎn),但是寫入數(shù)據(jù)所需的時(shí)間比RAM長得多。S7-200用EEPROM來存儲用戶程序和需長期保存的重要數(shù)據(jù)。

(三)PLC的工作原理

1、用觸點(diǎn)和線圈實(shí)現(xiàn)邏輯運(yùn)算

在數(shù)字量控制系統(tǒng)中,變量僅有兩種相反的工作狀態(tài),例如高電平和低電平、繼電器線圈的通電和斷電、觸點(diǎn)的接通和斷開,可以用邏輯代數(shù)中的1和0來表示,在波形圖中,用高電平表示1狀態(tài),用低電平表示0狀態(tài)。

用繼電器電路或梯形圖可以實(shí)現(xiàn)“與”、“或”、“非”邏輯運(yùn)算。用多個觸點(diǎn)的串、并聯(lián)電路可以實(shí)現(xiàn)復(fù)雜的邏輯運(yùn)算。

繼電器的線圈通電時(shí),其常開觸點(diǎn)接通,常閉觸點(diǎn)斷開;線圈斷電時(shí),其常開觸點(diǎn)斷開,常閉觸點(diǎn)閉合。梯形圖中的位元件(例如PLC的輸出點(diǎn)Q)的觸點(diǎn)和線圈也有類似的關(guān)系。

2、PLC的操作模式

(1)、操作模式

PLC由兩種操作模式,即RUN(運(yùn)行)模式與STOP(停止)模式。

在RUN模式下,通過執(zhí)行反映控制要求的用戶程序來實(shí)現(xiàn)控制功能;而在STOP模式下,CPU不執(zhí)行用戶程序,我們可以使用編程軟件來創(chuàng)建和編輯用戶程序,設(shè)置PLC的硬件功能,并將用戶程序和硬件設(shè)置信息下載到PLC中。如果有致命錯誤,在消除它之前不允許從STOP模式進(jìn)入RUN模式。PLC操作系統(tǒng)儲存非致命錯誤供用戶檢查,但是不會從RUN模式自動進(jìn)入STOP模式。

I/O響應(yīng)時(shí)間:指從PLC的某一輸入信號變化開始到系統(tǒng)有關(guān)輸出端信號的改變所需的時(shí)間。

PLC的I/O響應(yīng)時(shí)間為了增強(qiáng)PLC的抗干擾能力,提高其可靠性,PLC的每個開關(guān)量輸入端都采用光電隔離等技術(shù)。

為了能實(shí)現(xiàn)繼電器控制線路的硬邏輯并行控制,PLC采用了不同于一般微型計(jì)算機(jī)的運(yùn)行方式(掃描技術(shù))。

以上兩個主要原因,使得PLC的I/O響應(yīng)比一般微型計(jì)算機(jī)構(gòu)成的工業(yè)控制系統(tǒng)慢一些,其響應(yīng)時(shí)間至少等于一個掃描周期,一般均大于一個掃描周期。

用模式開關(guān)改變操作模式

CPU模塊上的模式開關(guān)在STOP位置時(shí),將停止用戶程序的運(yùn)行;在RUN位置時(shí),將啟動用戶程序的運(yùn)行。模式開關(guān)在STOP或TERM(Terminal,終端)位置時(shí),電源通電后CPU自動進(jìn)入STOP模式;在RUN位置時(shí),電源通電后自動進(jìn)入RUN模式。

用STEP7-Micro/WIN編程軟件改變操作模式

用編程軟件控制CPU的操作模式必須滿足下面的兩個條件:

在編程軟件與PLC之間建立起通信連接。

將PLC的模式開關(guān)放置在RUN模式或TERM模式。

在編程軟件中單擊工具條上的運(yùn)行按鈕,或執(zhí)行菜單命令“PLC”—“RUN”(運(yùn)行),將進(jìn)入RUN模式。單擊停止按鈕,或執(zhí)行菜單命令“PLC”—“STOP”(停止),將進(jìn)入STOP模式。

在程序中改變操作模式

在程序中插入STOP指令,可以使CPU由RUN模式進(jìn)入STOP模式。

3、PLC的基本工作原理

PLC是一種存儲程序的控制器。用戶根據(jù)某一對象的具體控制要求,編好程序后,編程器將程序鍵入PLC的用戶存儲器中存儲。PLC的控制功能就是運(yùn)用用戶程序來實(shí)現(xiàn)的。

PLC采用循環(huán)掃描的方式來進(jìn)行工作,即在PLC通電并完成了對硬件和軟件的初始化之后,用戶程序反復(fù)不斷地執(zhí)行,以使PLC的輸出及時(shí)的響應(yīng)隨時(shí)可能變換的輸入信號,直到PLC停機(jī)或者切換到STOP狀態(tài)為止。這種周而復(fù)始的循環(huán)工作方式稱為掃描工作方式。

PLC在RUN工作模式下,采用周期循環(huán)掃描、分時(shí)操作的工作方式,不斷地采集輸入信號、執(zhí)行用戶程序以刷新系統(tǒng)輸出;同時(shí),完成內(nèi)部處理和通信服務(wù)等工作。

掃描工作當(dāng)PLC投入運(yùn)行后,其工作過程一般分為三個階段,即輸入采樣、用戶程序執(zhí)行和輸出刷新三個階段。完成上述三個階段稱作一個掃描周期。在整個運(yùn)行期間,PLC的CPU以一定的掃描速度重復(fù)執(zhí)行上述三個階段。

三、PLC的特點(diǎn)與應(yīng)用領(lǐng)域

(一)PLC的特點(diǎn)

PLC是綜合繼電器接觸器控制的優(yōu)點(diǎn)及計(jì)算機(jī)靈活、方便的特點(diǎn)而設(shè)計(jì)制造和發(fā)展的,這就使PLC具有許多其他控制器所無法相比的優(yōu)點(diǎn)。

(1)編程方法簡單易學(xué)

(2)功能強(qiáng)、性價(jià)比高

(3)硬件配套齊全、用戶使用方便、適應(yīng)性強(qiáng)

(4)可靠性高,抗干擾能力強(qiáng)

系統(tǒng)的設(shè)計(jì)、安裝、調(diào)試工作量少

(6)維修工作量小,維修方便

(7)體積小,能耗低,易于集成

(二)PLC的應(yīng)用領(lǐng)域

PLC廣泛地應(yīng)用在很多的部門,隨著其性能價(jià)格比的不斷提高,PLC的應(yīng)用范圍不斷擴(kuò)大,主要有以下幾個方面:

數(shù)字量邏輯控制

這是PLC最基本最廣泛的應(yīng)用。其輸入輸出均為開關(guān)量信號,控制過程與繼電器控制系統(tǒng)最為接近,控制成本低廉,可靠性極高??梢杂糜趩闻_設(shè)備,也可用于自動生產(chǎn)線,還可用于民用或家庭場合。

運(yùn)動控制

使用專用的運(yùn)動控制模塊,實(shí)現(xiàn)直線運(yùn)動、圓周運(yùn)動等場合的位置、速度等過程控制,廣泛應(yīng)用于各種機(jī)械的加工場合。

閉環(huán)過程控制

通過PLC的模擬量A/D、D/A模塊,可以完成模擬量和數(shù)字量之間的相互轉(zhuǎn)換,實(shí)現(xiàn)對溫度、壓力、流量等連續(xù)變化的模擬量的PID(比例-積分-微分)閉環(huán)過程控制。廣泛應(yīng)用于塑料加工、鍋爐控制等設(shè)備控制。

數(shù)據(jù)處理

現(xiàn)代PLC具有數(shù)學(xué)運(yùn)算、數(shù)據(jù)傳輸、數(shù)據(jù)轉(zhuǎn)換、排序、查表等功能,可能實(shí)現(xiàn)數(shù)據(jù)采集、分析和處理,大大增強(qiáng)了PLC自動控制系統(tǒng)的功能。

通信聯(lián)網(wǎng)

經(jīng)通訊端口,可以實(shí)現(xiàn)PLC之間、PLC與其它智能設(shè)備(如計(jì)算機(jī)、變頻器、數(shù)控裝置等)之間通信,組成功能強(qiáng)大的“分散控制、集中管理”的分布式自動控制系統(tǒng)(DCS系統(tǒng)),為現(xiàn)代工業(yè)自動化生產(chǎn)提供強(qiáng)有力的控制支持。

(三)PLC的前景

為了適應(yīng)市場的各方面的需求,各生產(chǎn)廠家對PLC不斷進(jìn)行改進(jìn),推出功能更加強(qiáng)大、結(jié)果更加完美的新產(chǎn)品。這些新產(chǎn)品總體來說,朝兩個方向發(fā)展:一個向超小型、專用化和低價(jià)格的方向發(fā)展,以進(jìn)行單機(jī)控制;另一個是向大型化、高速化、多功能化和分布式全自動網(wǎng)絡(luò)化方向發(fā)展,以適應(yīng)現(xiàn)代化的大型工廠、企業(yè)自動化的需要[6]。

四、PLC的程序設(shè)計(jì)基礎(chǔ)

(一)PLC中的程序結(jié)構(gòu)

(1)可編程序控制器是專為工業(yè)生產(chǎn)過程的自動控制而開發(fā)的通用控制器,編程簡單是它的—個突出優(yōu)點(diǎn),它沒有采用計(jì)算機(jī)程序語言,而是開發(fā)了面向控制過程、面向問題、簡單直觀的PLC編程語言。

程序由兩部分組成:操作系統(tǒng),由PLC的生產(chǎn)廠家提供,它支持用戶程序的運(yùn)行;用戶程序,由用戶為了完成特定的控制任務(wù)而編寫的應(yīng)用程序。

PLC的編程語言標(biāo)準(zhǔn)IEC61131-3規(guī)定了下述5鐘編程語言:順序功能圖,梯形圖,功能塊圖,指令表和結(jié)構(gòu)文本。其中較為常用的有順序功能圖、梯形圖和指令表。

順序功能圖,是一種位于其它編程語言之上的圖形語言,用來編寫順序控制程序。它為我們提供了一種組織程序的圖形方法。步、轉(zhuǎn)換和動作是順序功能圖中的三種主要元件。

梯形圖程序是使用的最多的PLC圖形編程語言。梯形圖程序由觸點(diǎn)、線圈和用方框表示的功能塊組成。觸點(diǎn)代表邏輯輸入條件,例如外部的開關(guān)、按鈕和內(nèi)部條件等。線圈通常代表邏輯輸出結(jié)果,用來控制外部的指示燈、交流接觸器和內(nèi)部的標(biāo)志位等。功能塊圖用來表示定時(shí)器、計(jì)數(shù)器或者數(shù)學(xué)運(yùn)算、數(shù)據(jù)處理等指令。PLC的梯形圖也稱之為電路或程序,是一種軟件信息,反映PLC的輸入輸出邏輯控制關(guān)系的程序軟件。需要注意的是,與傳統(tǒng)的繼電器控制系統(tǒng)的梯形圖電路不同,PLC的梯形圖不是真正的物理硬件電路,不能把他們當(dāng)做硬件電路來對待。

指令表程序,指令是程序中的最小獨(dú)立單位,用戶程序是由若干條順序排列的指令而構(gòu)成。一條指令一般由一個操作碼和一個操作數(shù)組成,操作數(shù)由標(biāo)識符和參數(shù)組成。操作碼定義要執(zhí)行的功能,它告訴CPU該執(zhí)行什么操作;操作數(shù)為執(zhí)行該操作所需要的信息,它告訴CPU用什么去做。一般情況下,指令的操作數(shù)在PLC的存貯器中。

(2)S7-200的控制程序由主程序、子程序和中斷程序組成。

主程序:是程序的主體,每個項(xiàng)目都必須并且只能有一個主程序。在主程序中可以調(diào)用子程序和中斷程序。

子程序:子程序是可選的,僅在被其它程序調(diào)用時(shí)執(zhí)行。同一個子程序可以在不同地方被多次調(diào)用。使用子程序可以簡化程序代碼和減少掃描時(shí)間。

中斷程序:用來及時(shí)處理與用戶程序的執(zhí)行時(shí)序無關(guān)的操作,或者不能事先預(yù)測何時(shí)發(fā)生的中斷事件。中斷程序不是由用戶程序調(diào)用,而是在中斷事件發(fā)生時(shí)由操作系統(tǒng)調(diào)用。中斷程序由用戶編寫。

(二)F1—40MR的編程組件:

F1—40MR的編程組件的名稱由字母和數(shù)字表示,它們分別表示組件的類型

和組件號。

組件號用八進(jìn)制數(shù)表示,各種編程組件的編號的取值范圍有嚴(yán)格的規(guī)定,不同的組件編號均不相同,互不重疊,具體安排如下:

輸入繼電器(X):X400—X413,X500—X513

輸出繼電器(Y):Y430—Y437,Y530—Y537

定時(shí)器(T):T50—T57,T450—T457,T550—T557,T650—T657

計(jì)數(shù)器(C):C60—C67,C460—C467,C560—C567,C660—667

輔助繼電器(M):M100—M377(其中M300—M377斷電保持)

狀態(tài)寄存器(S):S600—S647

特殊輔助繼電器(M):M70,M71,M72,M73,M76,M77等16個

(三)某些編程組件的使用特性及含義:

1、特殊標(biāo)志位(SM)存儲器

CPU224編址范圍SM0.0~SM179.7,共180個字節(jié)。其中SM0.0~SM29.7的30個字節(jié)為只讀型區(qū)域。

①SMB0為狀態(tài)位字節(jié),在每次掃描循環(huán)結(jié)尾由S7-200CPU更新,定義如下:

SM0.0RUN狀態(tài)監(jiān)控,PLC在運(yùn)行RUN狀態(tài),該位始終為1。

SM0.1首次掃描時(shí)為1,PLC由STOP轉(zhuǎn)為RUN狀態(tài)時(shí),ON(1態(tài))一個掃描周期,用于程序的初始化。

SM0.2當(dāng)RAM中數(shù)據(jù)丟失時(shí),ON一個掃描周期,用于出錯處理。

SM0.3PLC上電進(jìn)入RUN方式,ON一個掃描周期。

SM0.4分脈沖,該位輸出一個占空比為50%的分時(shí)鐘脈沖。用作時(shí)間基準(zhǔn)或簡易延時(shí)。

SM0.5秒脈沖,該位輸出一個占空比為50%的秒時(shí)鐘脈沖。可用作時(shí)間基準(zhǔn)。

SM0.6掃描時(shí)鐘,一個掃描周期為ON(高電平),另一為OFF(低電平)循環(huán)交替。

SM0.7工作方式開關(guān)位置指示,0為TERM位置,1為RUN位置。為1時(shí),使自由端口通訊方式有效。

②SMB1為指令狀態(tài)位字節(jié),常用于表及數(shù)學(xué)操作,部分位定義如下:

SM1.0零標(biāo)志,運(yùn)算結(jié)果為0時(shí),該位置1。

SM1.1溢出標(biāo)志,運(yùn)算結(jié)果溢出或查出非法數(shù)值時(shí),該位置1。

SM1.2負(fù)數(shù)標(biāo)志,數(shù)學(xué)運(yùn)算結(jié)果為負(fù)時(shí),該位為1。

2、置位/復(fù)位指令

SS-BIT,N:從起始位(S-BIT)開始的N個元件置1。

RS-BIT,N:從起始位(S-BIT)開始的N個元件清0。

3、定時(shí)器

1)工作方式分類

通電延時(shí)型(TON)、有記憶的通電延時(shí)型(保持型)(TONR)、斷電延時(shí)型(TOF)等三類。

2)時(shí)基標(biāo)準(zhǔn)分類

1ms、10ms、100ms三種類型,不同的時(shí)基標(biāo)準(zhǔn),定時(shí)精度、定時(shí)范圍和定時(shí)器的刷新方式不同。

a.定時(shí)精度:

b.定時(shí)范圍:定時(shí)時(shí)間T=時(shí)基*預(yù)置值

時(shí)基越大,定時(shí)時(shí)間越長,但精度越差。

4、定時(shí)器工作原理分析

(1)通電延時(shí)型(TON)

使能端(IN)輸入有效時(shí),定時(shí)器開始計(jì)時(shí),當(dāng)前值從0開始遞增,大于或等于預(yù)置值(PT)時(shí),定時(shí)器輸出狀態(tài)位置1(輸出觸點(diǎn)有效),當(dāng)前值的最大值為32767。使能端無效(斷開)時(shí),定時(shí)器復(fù)位(當(dāng)前值清零,輸出狀態(tài)位置0)。

(2)有記憶通電延時(shí)型(TONR)

使能端(IN)輸入有效時(shí)(接通),當(dāng)前值從0遞增,當(dāng)前值大于或等于預(yù)置值(PT)時(shí),輸出狀態(tài)位置1。使能端輸入無效(斷開)時(shí),當(dāng)前值保持(記憶),使能端(IN)再次接通有效時(shí),在原記憶值的基礎(chǔ)上遞增計(jì)時(shí)。(TONR)定時(shí)器采用線圈的復(fù)位指令(R)進(jìn)行復(fù)位操作,當(dāng)復(fù)位線圈有效時(shí),定時(shí)器當(dāng)前值清零,輸出狀態(tài)位置0。

(3)斷電延時(shí)型(TOF)

使能端(IN)輸入有效時(shí),定時(shí)器輸出狀態(tài)位立即置1,當(dāng)前值復(fù)位(為0)。使能端(IN)斷開時(shí),開始計(jì)時(shí),當(dāng)前值從0遞增,當(dāng)前值達(dá)到預(yù)置值時(shí),定時(shí)器狀態(tài)位復(fù)位置0,并停止計(jì)時(shí),當(dāng)前值保持

五、十字路口交通燈的介紹

(一)十字路口交通燈的原理及示意圖

在十字路口的東西、南北主干道上裝設(shè)紅燈、綠左轉(zhuǎn)、綠直行和黃燈,控制機(jī)動車輛和非機(jī)動車輛,人行斑馬線上裝設(shè)紅、綠燈控制行人。其控制過程為:東西南北方向主干道的紅燈一直處于點(diǎn)亮狀態(tài),提示主干道上左轉(zhuǎn)通行時(shí)直行禁止通行,直行通行時(shí)左轉(zhuǎn)禁止通行,只有紅燈亮?xí)r該方向車輛禁止通行。主干道車輛通行時(shí)交通燈信號的變化規(guī)律為:左轉(zhuǎn)綠燈亮15秒后閃爍三次,黃燈亮2秒,然后直行綠燈亮(同時(shí)東西方向人行道綠燈亮),15秒后閃爍三次,黃燈亮2秒,然后綠燈全部熄滅,只有紅燈亮,車輛禁止通行。

該系統(tǒng)屬于連續(xù)循環(huán)工作的控制系統(tǒng),要求系統(tǒng)啟動后能夠周期性地連續(xù)循環(huán)工作,故系統(tǒng)中設(shè)置兩個輸入信號分別控制系統(tǒng)的啟動和停止。PLC選用三菱F1—40MR基本單元,I/O接口數(shù)為24/16。

分析系統(tǒng)的控制模型可以看出,人行道斑馬線上的綠燈狀態(tài)與直行綠燈信號相同,可用同一個控制信號。故整個控制系統(tǒng)需設(shè)置兩個輸入接口:X400接啟動輸入開關(guān)SB1,X401接停止輸入開關(guān)SB2;再設(shè)置九個輸出端口分別控制各信號燈。根據(jù)系統(tǒng)的控制模型和控制要求可畫出系統(tǒng)中各輸出信號的控制時(shí)序如圖三所示。

六、應(yīng)用PLC設(shè)計(jì)十字路口交通燈

(一)輸入輸出點(diǎn)分配表

為了將十字路口交通燈的控制關(guān)系用PLC控制器實(shí)現(xiàn),PLC需要1個輸入點(diǎn)作為啟動、停止開關(guān),9個輸出點(diǎn)。為了使用方便,所以選用三菱F1—40MR基本單元,I/O接口數(shù)為24/16。

交通信號燈控制系統(tǒng)的PLC輸入、輸出點(diǎn)分配表。

輸入信號

輸出信號

名稱

代號

輸入點(diǎn)編號

名稱

代號

輸出點(diǎn)編號

啟動按鈕

SB1

I0.0

主干道紅燈

Y430

Q0.0

停止按鈕

SB2

I0.0

南北左轉(zhuǎn)綠燈

Y432

Q0.1

南北方向黃燈

Y433

Q0.2

南北直行綠燈

Y431

Q0.3

東西左轉(zhuǎn)綠燈

Y532

Q0.4

東西方向黃燈

Y533

Q0.5

東西直行綠燈

Y531

Q0.6

南北人行道紅燈

Y534

Q0.7

東西人行道紅燈

Y434

Q1.0

表6.1輸入輸出點(diǎn)分配表

根據(jù)以上I/O分配表和所選定的S7-200小型PLC,得到該控制系統(tǒng)的I/O外部接線如圖二所示。

(二)順序功能圖

由實(shí)驗(yàn)內(nèi)容和分析控制過程,得出控制規(guī)律,根據(jù)以上分析繪出順序功能圖,見附錄一:

(三)梯形圖:

根據(jù)控制系統(tǒng)的順序功能圖,采用以轉(zhuǎn)換條件為主要的設(shè)計(jì)方法,可以編寫得到該十字路口交通燈的PLC控制系統(tǒng)的梯形圖,見附錄二。

(四)指令表

該十字路口交通燈的PLC控制系統(tǒng)的指令表,見附錄三。

七、小結(jié)

本次設(shè)計(jì)的是十字路口交通燈PLC控制系統(tǒng)設(shè)計(jì)與調(diào)試,由于這個課題和我們的生活聯(lián)系很緊密,所以這讓我做起來相對簡單一點(diǎn)。

俗話說萬事開頭難,一開始我沒有頭緒,但是在老師和同學(xué)的指導(dǎo)下,我慢慢的就理解了,然后就開始了設(shè)計(jì)。首先我自己研究課題中的十字交通燈的基本要求,在了解透徹的情況下,就去查閱各種資料,然后初步確定了要以時(shí)間計(jì)時(shí)為轉(zhuǎn)換條件來進(jìn)行各工部間的聯(lián)系。接著分析了設(shè)計(jì)中可能會遇到的問題。

分析了這些問題之后,我就開始做準(zhǔn)備工作。首先我先畫順序功能圖,在反復(fù)揣摩與研究后順利的完成了。然后就是確定各器件的型號。之后就是設(shè)計(jì)各器件的位置,使電路看起來整齊美觀。

然后我就開始畫梯形圖,在此之前,我先對順序功能圖進(jìn)行了分析,在理解之后,去查閱了一些資料,就開始畫梯形圖了。這個過程是很困難,也很考驗(yàn)人的。在反反復(fù)復(fù),一次又一次的編譯、仿真與檢查后,最后終于成功了。

在這幾周的忙碌中,我學(xué)到了許多,對PLC有了進(jìn)一步的了解。在老師、同學(xué)的幫助下,我完成了設(shè)計(jì)。我認(rèn)為本次設(shè)計(jì)不僅是學(xué)到了更多知識,也很好的鍛煉了我面對困難時(shí)的意志力。

致謝

能夠順利完成這次PLC控制十字交通燈的設(shè)計(jì),首先要感謝我的指導(dǎo)教師——XXX老師,從開始分析設(shè)計(jì)此課題一直到現(xiàn)在的論文寫作,XXX老師都給了我莫大的幫助。期間XXX老師的工作比較忙,但是他仍然在百忙之中抽出時(shí)間來給我們輔導(dǎo),甚至一整天都待在實(shí)驗(yàn)室?guī)臀覀兘庖?,很多時(shí)候都顧不上吃飯。由于我在做設(shè)計(jì)的過程中遇到好多不懂的問題,但XXX老師一直都是很耐心的解釋給我聽,直到我弄懂為止。

其次,也要感謝我的同學(xué)們,當(dāng)我遇到難以解決的問題時(shí),他們幫我去查閱資料,然后耐心的解釋給我聽。真的很感動,很感謝!因?yàn)槲覀兓ハ嗬斫?、互相幫助,所以我們都學(xué)到了很多東西。

總之,感謝XXX老師和我的同學(xué)們,在此,向你們表示我衷心的謝意!

參考文獻(xiàn)

[1]宋伯生.陳東旭.PLC應(yīng)用及實(shí)驗(yàn)教程[M].北京:機(jī)械工業(yè)出版社,2006.P212

[2]孫同景.PLC原理及工程應(yīng)用[D].北京:機(jī)械工業(yè)出版社,2008.P256

[3]周波.胡修玉.可編程控制器原理與應(yīng)用[M].北京:國防工業(yè)出版社.2008.P122

[4]鐘肇新.范建東.馮太合.可編程控制器原理及應(yīng)用[M].廣州:華南理工大學(xué)出版社.2008.P188

附錄

附錄一:(順序功能圖)

附錄二:(程序梯形圖)

附錄三:(程序指令表)

ORGANIZATION_BLOCK主程序:OB1

TITLE=程序注釋

BEGIN

Network1//網(wǎng)絡(luò)標(biāo)題

//網(wǎng)絡(luò)注釋

LDSM0.1

SM0.0,1

Network2

LDM0.0

AI0.0

SM0.1,1

RM0.0,1

Network3

LDM0.1

AT37

SM0.2,1

RM0.1,1

Network4

LDM0.2

AT38

SM0.3,1

RM0.2,1

Network5

LDM0.3

AT39

SM0.4,1

RM0.3,1

Network11

LDM1.1

AT45

SM1.2,1

RM1.1,1

Network12

LDM1.2

AT46

SM1.3,1

RM1.2,1

Network13

LDM1.3

AT47

SM1.4,1

RM1.3,1

Network14

LDM1.4

AT48

SM0.0,1

RM1.4,1

Network15

LDM1.4

OM0.1

OM0.2

OM0.3

OM0.4

OM0.5

OM0.6

OM0.7

Network22

LDM0.1

LDM0.2

ASM0.5

OLD

OM0.3

OM0.6

OM0.7

OM1.0

OM1.1

OM1.2

LDM1.3

ASM0.5

OLD

OM1.4

=Q0.7

Network23

LDM0.1

LDM0.2

ASM0.5

OLD

OM0.3

OM0.4

LDM0.5

ASM0.5

OLD

OM0.6

OM0.7

LDM1.0

Network31

LDM1.0

TONT44,50

Network32

LDM1.1

TONT45,50

Network33

LDM1.2

TONT46,50

Network34

LDM1.3

TONT47,50

Network35

LDM1.4

TONT48,50

Network6

LDM0.4

AT40

SM0.5,1

RM0.4,1

Network7

LDM0.5

AT41

SM0.6,1

RM0.5,1

Network8

LDM0.6

AT42

SM0.7,1

RM0.6,1

Network9

LDM0.7

AT43

SM1.0,1

RM0.7,1

Network10

LDM1.0

AT44

SM1.1,1

RM1.0,1

OM1.0

OM1.1

OM1.2

OM1.3

=Q0.0

Network16

LDM0.1

OM0.2

=Q0.1

Network17

LDM0.3

OM0.6

=Q0.2

Network18

LDM0.4

OM0.5

=Q0.3

Network19

LDM0.7

OM1.0

=Q0.4

Network20

LDM1.1

OM1.4

=Q0.5

Network21

LDM1.2

OM1.3

=Q0.6

ASM0.5

OLD

OM1.1

OM1.4

=Q1.0

Network24

LDM0.1

TONT37,50

Network25

LDM0.2

TONT38,50

Network26

LDM0.3

TONT39,50

Network27

LDM0.4

TONT40,50

Network28

LDM0.5

TONT41,50

Network29

LDM0.6

TONT42,50

Network30

LDM0.7

TONT43,50

END_ORGANIZATION_BLOCK

SUBROUTINE_BLOCKSBR_0:SBR0

TITLE=子程序注釋

BEGIN

Network1//網(wǎng)絡(luò)標(biāo)題

//網(wǎng)絡(luò)注釋

END_SUBROUTINE_BLOCK

INTERRUPT_BLOCKINT_0:INT0

TITLE=中斷程序注釋

BEGIN

Network1//網(wǎng)絡(luò)標(biāo)題

//網(wǎng)絡(luò)注釋

END_INTERRUPT_BLOCK

附錄資料:不需要的可以自行刪除

C語言編程規(guī)范(僅供參考)

1.基本要求

1.1程序結(jié)構(gòu)清析,簡單易懂,單個函數(shù)的程序行數(shù)不得超過100行。

1.2打算干什么,要簡單,直接了當(dāng),代碼精簡,避免垃圾程序。

1.3盡量使用標(biāo)準(zhǔn)庫函數(shù)和公共函數(shù)。

1.4不要隨意定義全局變量,盡量使用局部變量。

1.5使用括號以避免二義性。

2.可讀性要求

2.1可讀性第一,效率第二。

2.2保持注釋與代碼完全一致。

2.3每個源程序文件,都有文件頭說明,說明規(guī)格見規(guī)范。

2.4每個函數(shù),都有函數(shù)頭說明,說明規(guī)格見規(guī)范。

2.5主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο螅┒x或引用時(shí),注釋能反映其含義。

2.7常量定義(DEFINE)有相應(yīng)說明。

2.8處理過程的每個階段都有相關(guān)注釋說明。

2.9在典型算法前都有注釋。

2.10利用縮進(jìn)來顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致并以Tab鍵為單位,定義Tab為6個

字節(jié)。

2.11循環(huán)、分支層次不要超過五層。

2.12注釋可以與語句在同一行,也可以在上行。

2.13空行和空白字符也是一種特殊注釋。

2.14一目了然的語句不加注釋。

2.15注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。

2.16注釋行數(shù)(不包括程序頭和函數(shù)頭說明部份)應(yīng)占總行數(shù)的1/5到1/3。

3.結(jié)構(gòu)化要求

3.1禁止出現(xiàn)兩條等價(jià)的支路。

3.2禁止GOTO語句。

3.3用IF語句來強(qiáng)調(diào)只執(zhí)行兩組語句中的一組。禁止ELSEGOTO和ELSERETURN。

3.4用CASE實(shí)現(xiàn)多路分支。

3.5避免從循環(huán)引出多個出口。

3.6函數(shù)只有一個出口。

3.7不使用條件賦值語句。

3.8避免不必要的分支。

3.9不要輕易用條件分支去替換邏輯表達(dá)式。

4.正確性與容錯性要求

4.1程序首先是正確,其次是優(yōu)美

4.2無法證明你的程序沒有錯誤,因此在編寫完一段程序后,應(yīng)先回頭檢查。

4.3改一個錯誤時(shí)可能產(chǎn)生新的錯誤,因此在修改前首先考慮對其它程序的影響。

4.4所有變量在調(diào)用前必須被初始化。

4.5對所有的用戶輸入,必須進(jìn)行合法性檢查。

4.6不要比較浮點(diǎn)數(shù)的相等,

如:10.0*0.1==1.0,不可靠

4.7程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動去處理發(fā)生的意外事件,如文件能否

邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等。

4.8單元測試也是編程的一部份,提交聯(lián)調(diào)測試的程序必須通過單元測試。

5.可重用性要求

5.1重復(fù)使用的完成相對獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類。

5.2公共控件或類應(yīng)考慮OO思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。

5.3公共控件或類應(yīng)建立使用模板。

附:C++編程規(guī)范,delphi作相應(yīng)的參考

1適用范圍

本標(biāo)準(zhǔn)適用于利用VisulC++,BorlandC++進(jìn)行軟件程序開發(fā)的人員.。

.2變量命名

命名必須具有一定的實(shí)際意義,形式為xAbcFgh,x由變量類型確定,Abc、Fgh表示連續(xù)意

義字符串,如果連續(xù)意義字符串僅兩個,可都大寫.如OK.

具體例程:

BOOL類型bEnable;

ch*charchText

c*類對象cMain(對象實(shí)例)

h*Handle(句柄)hWnd

i*int

n*無符號整型

p*指針

sz,str*字符串

wWORD

x,y坐標(biāo)

Char或者TCHAR類型與WindowsAPI有直接聯(lián)系的用szAppName[10]形式否則用

FileName[10]形式,單個字符也可用小寫字母表示;

Int類型nCmdShow;

LONG類型lParam;

UINT類型uNotify;

DWORD類型dwStart;

PSTR類型pszTip;

LPSTR類型lpCmdLine

LPTSTR類型lpszClassName;

LPVOID類型lpReserved

WPARAM類型wParam,

LPARAM類型lParam

HWND類型hDlg;

HDC類型hDC;

HINSTANCE類型hInstance

HANDLE類型hInstance,

HICON類型hIcon;

intiTmp

floatfTmp

DWORDdw*

String,AnsiStringstr*

m_類成員變量m_nVal,m_bFlag

g_全局變量g_nMsg,g_bFlag

局部變量中可采用如下幾個通用變量:nTemp,nResult,I,J(一般用于循環(huán)變量)。

其他資源句柄同上

.3常量命名和宏定義

常量和宏定義必須具有一定的實(shí)際意義;

常量和宏定義在#include和函數(shù)定義之間;

常量和宏定義必須全部以大寫字母來撰寫,中間可根據(jù)意義的連續(xù)性用下劃線連接,每一

條定義的右側(cè)必須有一簡單的注釋,說明其作用;

資源名字定義格式:

菜單:IDM_XX或者CM_XX

位圖:IDB_XX

對話框:IDD_XX

字符串:IDS_XX

DLGINIT:DIALOG_XX

ICON:IDR_XX

.4函數(shù)命名

函數(shù)原型說明包括引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來源:模

塊名及文件名,如是內(nèi)部函數(shù),只要注釋其定義文件名;

第一個字母必須使用大寫字母,要求用大小寫字母組合規(guī)范函數(shù)命名,必要時(shí)可用下劃線

間隔,示例如下:

voidUpdateDB_Tfgd(TRACK_NAME);file://ModuleName:r01/sdw.c

voidPrintTrackData(TRACK_NAME);file://ModuleName:r04/tern.c

voidImportantPoint(void);file://ModuleName:r01/sdw.c

voidShowChar(int,int,chtype);file://LocalModule

voidScrollUp_V(int,int);file://LocalModule

.5結(jié)構(gòu)體命名

結(jié)構(gòu)體類型命名必須全部用大寫字母,原則上前面以下劃線開始;結(jié)構(gòu)體變量命名必須用

大小寫字母組合,第一個字母必須使用大寫字母,必要時(shí)可用下劃線間隔。對于私有數(shù)

據(jù)區(qū),必須注明其所屬的進(jìn)程。全局?jǐn)?shù)據(jù)定義只需注意其用途。

示例如下:

typedefstruct

{

charszProductName[20];

charszAuthor[20];

charszReleaseDate[16];

charszVersion[10];

unsignedlongMaxTables;

unsignedlongUsedTables;

}DBS_DATABASE;

DBS_DATABASEGdataBase;

6控件的命名:

用小寫前綴表示類別

用小寫前綴表示類別:

fm窗口

cmd按鈕

cobcombo,下拉式列表框

txt文本輸入框

lablabal,標(biāo)簽

imgimage,圖象

picpicture

grdGrid,網(wǎng)格

scr滾動條

lst列表框

frmfram

7注釋

原則上注釋要求使用中文;

文件開始注釋內(nèi)容包括:公司名稱、版權(quán)、作者名稱、時(shí)間、模塊用途、背景介紹等,復(fù)

雜的算法需要加上流程說明;

函數(shù)注釋包括:輸入、輸出、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜的函數(shù)

需要加上變量用途說明;

程序中注釋包括:修改時(shí)間和作者、方便理解的注釋等;

引用一:文件開頭的注釋模板

/******************************************************************

**文件名:

**Copyright(c)1998-1999*********公司技術(shù)開發(fā)部

**創(chuàng)建人:

**日期:

**修改人:

**日期:

**描述:

**

**版本:

**

******************************************************************/

引用二:函數(shù)開頭的注釋模板

/*****************************************************************

**函數(shù)名:

**輸入:a,b,c

**a

**b

**c

**輸出:x

**x為1,表示...

**x為0,表示...

**功能描述:

**全局變量:

**調(diào)用模塊:

**作者:

**日期:

**修改:

**日期:

**版本

****************************************************************/

引用三:程序中的注釋模板

/**/

/*注釋內(nèi)容*/

/**/

8程序

a.程序編碼力求簡潔,結(jié)構(gòu)清晰,避免太多的分支結(jié)構(gòu)及太過于技巧性的程序,

盡量不采用遞歸模式。

b.編寫程序時(shí),亦必須想好測試的方法,換句話說,”單元測試”的測試方案應(yīng)

在程序編寫時(shí)一并擬好。

c.注釋一定要與程序一致。

d.版本封存以后的修改一定要將老語句用/**/封閉,不能自行刪除或修改,并要

在文件及函數(shù)的修改記錄中加以記錄。

e.程序中每個block的開頭”{"及"}”必須對齊,嵌套的block每進(jìn)一套,

縮進(jìn)一個tab,TAB為4個空格,block類型包括if、for、while、do等關(guān)鍵字引出的。

f.對于比較大的函數(shù),每個block和特殊的函數(shù)調(diào)用,都必須注明其功能,舉例如下

count.divisor=1193280/freq;//computethepropercount

OutByte((unsignedshort)67,(unsignedchar)182);//tell8253thata

countiscoming

OutByte((unsignedshort)66,count.c[0]);//sendlow-orderbyte

OutByte((unsignedshort)66,count.c[1]);//sendhigh-orderbyte

×××××××××××××××××××××××××××××××××××××××

bcb,delphi中的變量命名:

遵循匈牙利命名法,命

名必須有意義,制定如下規(guī)定

窗體:以大寫的W開始,如About版權(quán)窗體,命名為WAbout

文件:以大寫的F開始,如About版權(quán)窗體,文件命名為FAbout.cpp

按鈕(Button):如退出按鈕,命名為btnExit

……

基類:加base標(biāo)記,如報(bào)表基類,窗體命名為:WBaseRep,文件命名為FBaseRep.cpp

轉(zhuǎn)貼

>1.在.h/.cpp的開頭應(yīng)有一段格式統(tǒng)一的說明,內(nèi)容包括:

>a.文件名(FileName);

>b.創(chuàng)建人(Creater);

>c.文件創(chuàng)建時(shí)間(Date);

>d.簡短說明文件功能、用途(Comment)。

好習(xí)慣

>2.除非極其簡單,否則對函數(shù)應(yīng)有注釋說明。內(nèi)容包括:功能、入口/出口參數(shù),必

>時(shí)還可有備注或補(bǔ)充說明。

還是好習(xí)慣

>3.每列代碼的長度推薦為80列,最長不得超過120列;折行以對齊為準(zhǔn)。

太寬了,我的限制是60列,因?yàn)槲谋痉绞较缕聊灰还?0列,如果你用BC這一類的編輯

器,窗口邊框等又要占據(jù)一定空間,所以80列太寬

>4.循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。

很對

>5.指針的定義,*號既可以緊接類型,也可以在變量名之前。

>

>例:可寫做:int*pnsize;

>

>也可寫做:int*pnsize;

>

>但不得寫做:int*pnsize;

建議采用第二種,除非附加另外一條規(guī)定:一次只聲明一個變量,否則就會讓人混淆,

比如:

int*a,b;

看起來b好像也是個指針,其實(shí)不是。

>6.在類的成員函數(shù)內(nèi)調(diào)用非成員函數(shù)時(shí),在非成員函數(shù)名前必須加上"::"。

這一條我倒覺得并不是必需的,我的看法是決不要讓你的類成員函數(shù)和全局函數(shù)的名稱

相同(或類似)

>7.函數(shù)入口參數(shù)有缺省值時(shí),應(yīng)注釋說明。

>

>例:BOOLCWpsDib::PaintDIB(CDC*pDC,CRect&rc,

>intnBrightness,file://*=0*//

>BOOLbGrayScalefile://*=FALSE*//)

每個變量寫一行,必要時(shí)加上/*in,out*/注釋

>8.elseif必須寫在一行。

應(yīng)該盡量避免elseif這樣的結(jié)構(gòu)

>9.與‘{’、‘}’有關(guān)的各項(xiàng)規(guī)定:

>

>9.1‘{’、‘}’應(yīng)獨(dú)占一行。在該行內(nèi)可有注釋。

>9.2‘{’必須另起一行,‘{’之后的代碼必須縮進(jìn)一個Tab?!畕’與‘}’必須在

>一列上。

>9.3在循環(huán)、分支之后若只有一行代碼,雖然可省略‘{’、‘}’,但不推薦這么

>做。若省略后可能引起歧義,則必須加上‘{’、‘}’。

持保留意見,因?yàn)镚NU的代碼規(guī)范是這樣的:

if(NULL==ptr)

{

//dosomethinghere

}

或者

if(NULL==ptr){

//dosomethinghere

}

爭論哪個更好并沒有意義,關(guān)鍵是統(tǒng)一,如果用VC當(dāng)然你的辦法最方便,可是如果你用

emacs或者vi,就不是這樣了。

>10.與空格有關(guān)的各項(xiàng)規(guī)定。

>

>10.1在所有兩目、三目運(yùn)算符的兩邊都必須有空格。在單目運(yùn)算符兩端不必空格。

>在‘—>’、‘::’、‘.’、‘[’、‘]’等運(yùn)算符前后,及‘&’(取地址)、‘*

>’(取值)等運(yùn)算符之后不得有空格。

>10.2for、while、if等關(guān)鍵詞之后應(yīng)有1個空格,再接‘(’,之后無空格;在結(jié)

>的‘)’前不得有空格。

我認(rèn)為在括號兩端加空格并不是什么錯誤,尤其是在一個條件十分復(fù)雜的if語句里

>10.3調(diào)用函數(shù)、宏時(shí),‘(’、‘)’前后不得有空格。

>10.4類型強(qiáng)制轉(zhuǎn)換時(shí),‘(’‘)’前后不得有空格

同上

>11.與縮進(jìn)有關(guān)的各項(xiàng)規(guī)定

>

>11.1縮進(jìn)以Tab為單位。1個Tab為4個空格

我認(rèn)為這個值應(yīng)該更大,我自己使用8個空格,如果你的代碼因?yàn)榭s進(jìn)幅度太大而導(dǎo)致

折行,那么幾乎可以肯定你的程序設(shè)計(jì)方案有問題。

>11.2下列情況,代碼縮進(jìn)一個Tab:

>1.函數(shù)體相對函數(shù)名及'{'、'}'。

>2.if、else、for、while、do等之后的代碼。

>3.一行之內(nèi)寫不下,折行之后的代碼,應(yīng)在合理的位置進(jìn)行折行。若有+-*/等

運(yùn)

>算符,則運(yùn)算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。

這一條我反對,運(yùn)算符應(yīng)該放在下一行行首,以使人能清楚的知道這一行是續(xù)上一行

的,比如

if(something

&&somethingelse

&&otherthings)

如果寫做

if(something&&

somethingelse&&

otherthings)

反而看不清楚

>11.3下列情況,不必縮進(jìn):switch之后的case、default。

編程規(guī)范與范例

目錄

1排版6

2注釋11

3標(biāo)識符命名18

4可讀性20

5變量、結(jié)構(gòu)22

6函數(shù)、過程28

7可測性36

8程序效率40

9質(zhì)量保證44

10代碼編輯、編譯、審查50

11代碼測試、維護(hù)52

12宏53

1排版

1-1:程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個。

說明:對于由開發(fā)工具自動生成的代碼可以有不一致。

1-2:相對獨(dú)立的程序塊之間、變量說明之后必須加空行。

示例:如下例子不符合規(guī)范。

if(!valid_ni(ni))

{

...//programcode

}

repssn_ind=ssn_data[index].repssn_index;

repssn_ni=ssn_data[index].ni;

應(yīng)如下書寫

if(!valid_ni(ni))

{

...//programcode

}

repssn_ind=ssn_data[index].repssn_index;

repssn_ni=ssn_data[index].ni;

1-3:較長的語句(>80字符)要分成多行書寫,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。

示例:

perm_count_msg.head.len=NO7_TO_STAT_PERM_COUNT_LEN

+STAT_SIZE_PER_FRAM*sizeof(_UL);

act_task_table[frame_id*STAT_TASK_CHECK_NUMBER+index].occupied

=stat_poi[index].occupied;

act_task_table[taskno].duration_true_or_false

=SYS_get_sccp_statistic_state(stat_item);

report_or_not_flag=((taskno<MAX_ACT_TASK_NUMBER)

&&(n7stat_stat_item_valid(stat_item))

&&(act_task_table[taskno].result_data!=0));

1-4:循環(huán)、判斷等語句中若有較長的表達(dá)式或語句,則要進(jìn)行適應(yīng)的劃分,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。

示例:

if((taskno<max_act_task_number)

&&(n7stat_stat_item_valid(stat_item)))

{

...//programcode

}

for(i=0,j=0;(i<BufferKeyword[word_index].word_length)

&&(j<NewKeyword.word_length);i++,j++)

{

...//programcode

}

for(i=0,j=0;

(i<first_word_length)&&(j<second_word_length);

i++,j++)

{

...//programcode

}

¹1-5:若函數(shù)或過程中的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐帧?/p>

示例:

n7stat_str_compare((BYTE*)&stat_object,

(BYTE*)&(act_task_table[taskno].stat_object),

sizeof(_STAT_OBJECT));

n7stat_flash_act_duration(stat_item,frame_id*STAT_TASK_CHECK_NUMBER

+index,stat_object);

¹1-6:不允許把多個短語句寫在一行中,即一行只寫一條語句。

示例:如下例子不符合規(guī)范。

rect.length=0;rect.width=0;

應(yīng)如下書寫

rect.length=0;

rect.width=0;

1-7:if、for、do、while、case、switch、default等語句自占一行,且if、for、do、while等語句的執(zhí)行語句部分無論多少都要加括號{}。

示例:如下例子不符合規(guī)范。

if(pUserCR==NULL)return;

應(yīng)如下書寫:

if(pUserCR==NULL)

{

return;

}

1-8:對齊只使用空格鍵,不使用TAB鍵。

說明:以免用不同的編輯器閱讀程序時(shí),因TAB鍵所設(shè)置的空格數(shù)目不同而造成程序布局不整齊,不要使用BC作為編輯器合版本,因?yàn)锽C會自動將8個空格變?yōu)橐粋€TAB鍵,因此使用BC合入的版本大多會將縮進(jìn)變亂。

1-9:函數(shù)或過程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷等語句中的代碼都要采用縮進(jìn)風(fēng)格,case語句下的情況處理語句也要遵從語句縮進(jìn)要求。

1-10:程序塊的分界符(如C/C++語言的大括號‘{’和‘}’)應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對齊。在函數(shù)體的開始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進(jìn)方式。

示例:如下例子不符合規(guī)范。

for(...){

...//programcode

}

if(...)

{

...//programcode

}

voidexample_fun(void)

{

...//programcode

}

應(yīng)如下書寫。

for(...)

{

...//programcode

}

if(...)

{

...//programcode

}

voidexample_fun(void)

{

...//programcode

}

1-11:在兩個以上的關(guān)鍵字、變量、常量進(jìn)行對等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對等操作時(shí),如果是關(guān)系密切的立即操作符(如->),后不應(yīng)加空格。

說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。

由于留空格所產(chǎn)生的清晰性是相對的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,因?yàn)樵贑/C++語言中括號已經(jīng)是最清晰的標(biāo)志了。

在長語句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時(shí)不要連續(xù)留兩個以上空格。

示例:

(1)逗號、分號只在后面加空格。

inta,b,c;

(2)比較操作符,賦值操作符"="、"+=",算術(shù)操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前后加空格。

if(current_time>=MAX_TIME_VALUE)

a=b+c;

a*=2;

a=b^

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論