基于PLC的觸摸屏溫度控制系統(tǒng)_第1頁
基于PLC的觸摸屏溫度控制系統(tǒng)_第2頁
基于PLC的觸摸屏溫度控制系統(tǒng)_第3頁
基于PLC的觸摸屏溫度控制系統(tǒng)_第4頁
基于PLC的觸摸屏溫度控制系統(tǒng)_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE

PLC技術(shù)應(yīng)用項目說明書

設(shè)計題目

學(xué)院機械工程學(xué)院

2015年1月9日

課程設(shè)計任務(wù)書

茲發(fā)給2011級機電X班班學(xué)生張XX課程設(shè)計任務(wù)書,內(nèi)容如下:

設(shè)計題目:基于PLC的溫度控制系統(tǒng)

應(yīng)完成的項目:

(1)選題的背景和意義;

(2)明確設(shè)計任務(wù),擬定總體設(shè)計方案(有機械結(jié)構(gòu)的要進行結(jié)構(gòu)設(shè)計,三維軟件建模);

(3)硬件設(shè)計,傳感器、PLC(和電機)選型,設(shè)計信號采集、轉(zhuǎn)換電路,畫出PLC端口分配圖、接線控制端子連接圖;

(4)軟件設(shè)計,編寫控制程序流程圖(或重要程序),設(shè)計人機界面;

(5)課程設(shè)計說明書1份。

參考資料以及說明:

(1)金發(fā)慶.傳感器技術(shù)與應(yīng)用(第二版)[M].北京:機械工業(yè)出版社,2004

(2)鐘肇新.可編程控制器原理及應(yīng)用[M].廣州:華南理工大學(xué)出版社,2003

(3)常曉玲.電氣控制系統(tǒng)與可編程控制器[M].北京:機械工業(yè)出版社,2004

(4)蓋超會,陽勝峰.三菱PLC與變頻器、觸摸屏綜合培訓(xùn)教程[M].北京:中國電力出版社,2011

(5)濮良貴,陳國定,吳立言.機械設(shè)計[M].北京:高等教育出版社,2013

本設(shè)計任務(wù)書于2014年12月19日發(fā)出,應(yīng)于2015年1月9日前完成,然后進行答辯。

指導(dǎo)教師簽發(fā)2014年12月19日

課程設(shè)計評語:

課程設(shè)計總評成績:

指導(dǎo)教師簽字:

年月日

目錄

TOC\o"1-3"\h\u

12027

前言

2

2344

第一章系統(tǒng)總體方案

3

9095

第二章系統(tǒng)硬件設(shè)計

5

15077

2.1PLC選擇

5

24006

2.1.1FX2N-48MRPLC

5

9445

2.1.2FX2N-2AD特殊功能模塊

6

16442

2.1.3FX2N-2DA特殊功能模塊

7

23636

2.2硬件電路設(shè)計

8

15659

2.2.1溫度值給定電路

8

15591

2.2.2溫度檢測電路

11

20957

2.2.3過零檢測電路

12

9645

2.2.4晶閘管電功率控制電路

13

17559

2.2.5脈沖輸出通道

14

24953

2.2.6報警指示電路

15

992

2.2.7復(fù)位電路

15

16307

第三章系統(tǒng)軟件設(shè)計

16

14486

3.1程序設(shè)計

16

18569

3.2系統(tǒng)程序流程圖

17

27084

3.3控制系統(tǒng)控制程序的開發(fā)

18

4060

3.3.1溫度設(shè)定

18

18582

3.3.2A/D轉(zhuǎn)換功能模塊的控制程序

18

1114

3.3.3標(biāo)度變換程序

19

11047

3.4.4恒溫控制程序(PID)設(shè)計

20

17573

3.4.6顯示程序

26

14830

3.4.7恒溫指示程序

26

4729

3.4.8報警程序

27

9880

第四章總結(jié)與展望

28

31785

4.1總結(jié)

28

17438

4.2展望

28

22258

參考文獻

29

20555

附錄系統(tǒng)程序(梯形圖)

30

摘要

在工業(yè)生產(chǎn)過程中,加熱管溫度控制是十分常見的。溫度控制的傳統(tǒng)方法是人工—儀表控制。其重復(fù)性差,工藝要求難以保證,人工勞動強度大。目前大多數(shù)使用微機代替常規(guī)控制。以微機為核心控制系統(tǒng)雖然成本較低,但微機的可靠性和抗干擾性較差而使其硬件設(shè)計較復(fù)雜。而以PLC為核心的控制系統(tǒng),雖然成本較高,但PLC本身就有很強的抗干擾性和可靠性,因而系統(tǒng)的硬件設(shè)計也簡單得多。

本設(shè)計以工業(yè)水溫加熱為背景,設(shè)計以三菱FX2N-48MRPLC為控制器,使用電熱偶為溫度傳感器的溫度控制系統(tǒng),本文主要內(nèi)容包括:PLC選擇,溫度控制電路設(shè)計分析,加熱管控制電路設(shè)計分析,PLC程序編寫,采用PID控制。

關(guān)鍵詞:加熱溫度控制PLCPID

第一章緒論

隨著時代的發(fā)展,當(dāng)今的技術(shù)日趨完善,競爭也愈演愈烈;傳統(tǒng)的人工的操作已不能滿足于目前的制造業(yè)前景,也無法保證更高質(zhì)量的要求和提升高新技術(shù)企業(yè)的形象。

在生產(chǎn)實踐中,自動化給人們帶來了極大的便利和產(chǎn)品質(zhì)量上的保證,同時也減輕了人員的勞動強度,減少了人員上的編制。在許多復(fù)雜的生產(chǎn)過程中難以實現(xiàn)的目標(biāo)控制、整體優(yōu)化、最佳決策等,熟練的操作工、技術(shù)人員或?qū)<摇⒐芾碚邊s能夠容易判斷和操作,可以獲得滿意的效果。人工智能的研究目標(biāo)正是利用計算機來實現(xiàn)、模擬這些智能行為,通過人腦與計算機協(xié)調(diào)工作,以人機結(jié)合的模式,為解決十分復(fù)雜的問題尋找最佳的途徑。

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

在工業(yè)生產(chǎn)過程中,加熱管溫度控制是十分常見的。溫度控制的傳統(tǒng)方法是人工—儀表控制。其重復(fù)性差,工藝要求難以保證,人工勞動強度大。目前大多數(shù)使用微機代替常規(guī)控制。以微機為核心控制系統(tǒng)雖然成本較低,但微機的可靠性和抗干擾性較差而使其硬件設(shè)計較復(fù)雜。而以PLC為核心的控制系統(tǒng),雖然成本較高,但PLC本身就有很強的抗干擾性和可靠性,因而系統(tǒng)的硬件設(shè)計也簡單得多。所以,相比較于微機控制,PLC控制在過程控制方面更具有優(yōu)勢。這種系統(tǒng)控制精度高、重復(fù)性好、自動化程度高,可以大大提高產(chǎn)品質(zhì)量和減輕工人的勞動負(fù)擔(dān)。本文介紹了以PLC為核心實現(xiàn)PID算法的溫度控制系統(tǒng)的設(shè)計方法。

第二章系統(tǒng)總體方案

根據(jù)設(shè)計任務(wù)和要求,采用常規(guī)PID控制的溫度控制系統(tǒng)結(jié)構(gòu)如圖1-1所示。

圖1-1常規(guī)PID溫度控制系統(tǒng)的結(jié)構(gòu)

對應(yīng)圖1-1的系統(tǒng)結(jié)構(gòu),確定總體設(shè)計方案如圖1-2所示:

圖1-2總體設(shè)計方案

該總體方案主要由以下幾個部分組成

(1)觸摸屏:主要功能是設(shè)定和顯示相應(yīng)的溫度值,以及停止和開始功能。

(2)PLC:主要完成PID調(diào)節(jié)功能以及數(shù)據(jù)變換。

(3)測溫電路和A/D模塊:主要功能是0-10V溫度測量信號經(jīng)FX2N-A/D轉(zhuǎn)換成數(shù)字信號輸入PLC處理。

(4)輸出調(diào)節(jié)電路:主要功能是把PLC處理運算發(fā)出的控制信號通過脈寬調(diào)制裝置輸出脈沖信號對加熱管進行加熱

系統(tǒng)工作原理:溫度變送器將加熱管溫度變換為模擬信號,經(jīng)低通濾波器濾掉干擾信號后送放大器,將信號放大后送A/D模塊轉(zhuǎn)換為數(shù)字量送PLC,數(shù)字量經(jīng)標(biāo)度變換,得到實際加熱管溫度。數(shù)字控制器根據(jù)恒溫給定值Q0與實際加熱管溫度Q的偏差e(k)按積分分離PID控制算法,得到輸出控制量u(k),控制晶閘管導(dǎo)通時間,調(diào)節(jié)加熱管溫度的變化使之與給定恒溫值一致,達到恒溫控制目的。當(dāng)達到恒溫值、輸入錯誤或系統(tǒng)發(fā)生故障時,系統(tǒng)發(fā)出報警信號,同時用GT1040-QBBD-C觸摸屏對加熱管溫度進行實時顯示和溫度給定輸入。

第二章系統(tǒng)硬件設(shè)計

2.1PLC選擇

根據(jù)設(shè)計方案的分析,系統(tǒng)設(shè)計需要使用A/D轉(zhuǎn)換器和D/A轉(zhuǎn)換器來完成溫度采樣。在課程學(xué)習(xí)中,我們學(xué)習(xí)了三菱的FX系列PLC,因此,選擇三菱FX2N(基本I/O點數(shù)為24)和FX2N-2AD特殊功能模塊。

2.1.1FX2N-48MRPLC

FX2N系列PLC是FX系列中最先進的系列、具有高速處理及可以擴展大量滿足單個需要的特殊功能模塊等特點。它由基本單元、擴展單元、擴展模塊等構(gòu)成。用戶存儲器容量可擴展到16K步。I/O點最大可擴展到256點。它有27條基本指令,其基本指令的執(zhí)行速度超過了很多大型PLC。三菱FX2N-48MRPLC,為繼電器輸出類型,其輸入、輸出點數(shù)皆為是24點,可擴展模塊可用的點數(shù)為48~64,內(nèi)附8000步RAM。其內(nèi)部資源如下:

(1)輸入繼電器X(X0~X27,24點,八進制)

(2)輸出繼電器Y(Y0~Y27,24點,八進制)

(3)輔助繼電器M(M0~M8255)[通用輔助繼電器(M0~M499)]

(4)狀態(tài)繼電器(S0~S999)

(5)定時器T(T0~T255)(T0~T245為常規(guī)定時器)

(6)計數(shù)器C(C0~C255)

(7)指針(P/I)見表2-1和表2-2

(8)數(shù)據(jù)寄存器D(D0~D8255)(D0~D199為通用型)

表2-1定時器中斷標(biāo)號指針表

輸入編號

中斷周期(ms)

中斷禁止特殊輔助繼電器

I6XX

在指針名稱的XX部分中,輸入10~99的整數(shù)。I610為每10ms執(zhí)行一次定時器中斷

M8056

I7XX

M8057

I8XX

M8058

表2-2輸入中斷標(biāo)號指針表

輸入編號

指針編號

中斷禁止特殊輔助繼電器

上升中斷

下降中斷

X0

I001

I000

M8050

X1

I101

I100

M8051

X2

I201

I200

M8052

X3

I301

I300

M8053

X4

I401

I400

M8054

X5

I501

I500

M8055

注:M8050~M8058=“0”表允許;M8050~M8058=“1”表禁止。

2.1.2FX2N-2AD特殊功能模塊

FX2N-2AD為模擬量輸入模塊,有兩個模擬量輸入通道(分別為CH1、CH2),每個通道都可進行A/D轉(zhuǎn)換,將模擬量信號轉(zhuǎn)換成數(shù)字量信號,其分辨率為12位。其模擬量輸出性能如表2-3所示。

表2-3模擬量輸出性能表

項目

電壓輸入

電流輸入

模擬量輸入范圍

DC:0~+10V(輸入電阻200KΩ)

絕對最大輸入:-0.5V,+15V

DC:4~+20mA(輸入電阻250Ω)

絕對最大輸入:-2mA,+60mA

數(shù)字輸出

12位二進制

分辨率

2.5mV(10V/4000)

1.25mV(5V/4000)

4μA(20mA/4000)

總體精度

±1%(滿量程0~10V)

±1%(滿量程4~20mA范圍)

轉(zhuǎn)換速度

2.5ms/通道(與順空程序同步動作)

所有數(shù)據(jù)轉(zhuǎn)換和參數(shù)設(shè)置的調(diào)整可通過FROM/TO指令完成。同時在編程過程中重點用到了BFM數(shù)據(jù)緩沖存儲器,具體分布情況如表2-4所示。

表2-4FX2N-2AD緩沖存儲器的功能及分配

BFM

編號

內(nèi)容

b15-b8

b7-b4

b3

b2

b1

b0

#0

保留

輸入數(shù)據(jù)的當(dāng)前值(低8位)

#1

保留

輸入數(shù)據(jù)的當(dāng)前值(高4位)

#2-#16

保留

#17

保留

模擬到數(shù)字轉(zhuǎn)換開始

模擬到數(shù)字轉(zhuǎn)換通道

#18

保留

BFM說明:

BFM#0:存儲由BFM#17指定通道的輸入數(shù)據(jù)當(dāng)前值低8位數(shù)據(jù),當(dāng)前值數(shù)據(jù)以二進制存儲。

BFM#1:存儲由BFM#17指定通道的輸入數(shù)據(jù)當(dāng)前值高4位數(shù)據(jù),當(dāng)前值數(shù)據(jù)以二進制存儲。

BFM#17:b0:指定由模擬到數(shù)字轉(zhuǎn)換的通道(CH1,CH2)。

b0=0指定CH1

b0=1指定CH2

b1:由0→1時A/D轉(zhuǎn)換過程開始

2.1.3FX2N-2DA特殊功能模塊

FX2N-2DA為模擬量輸入模塊,有兩個模擬量輸出通道(分別為CH1、CH2),每個通道都可進行D/A轉(zhuǎn)換,將數(shù)字量信號轉(zhuǎn)換成模擬量信號,其分辨率為12位。其模擬量輸出性能如表2-3所示。

表2-3模擬量輸出性能表

項目

電壓輸出

電流輸出

模擬量輸入范圍

DC:0~+10V(輸入電阻200KΩ)

絕對最大輸入:-0.5V,+15V

DC:4~+20mA(輸入電阻250Ω)

絕對最大輸入:-2mA,+60mA

數(shù)字輸出

12位二進制

分辨率

2.5mV(10V/4000)

1.25mV(5V/4000)

4μA(20mA/4000)

總體精度

±1%(滿量程0~10V)

±1%(滿量程4~20mA范圍)

轉(zhuǎn)換速度

2.5ms/通道(與順空程序同步動作)

所有數(shù)據(jù)轉(zhuǎn)換和參數(shù)設(shè)置的調(diào)整可通過FROM/TO指令完成。同時在編程過程中重點用到了BFM數(shù)據(jù)緩沖存儲器,具體分布情況如表2-4所示。

表2-4FX2N-2DA緩沖存儲器的功能及分配

BFM

編號

內(nèi)容

b15-b8

b7-b4

b3

b2

b1

b0

#0

保留

輸入數(shù)據(jù)的當(dāng)前值(低8位)

#1

保留

輸入數(shù)據(jù)的當(dāng)前值(高4位)

#2-#16

保留

#17

保留

模擬到數(shù)字轉(zhuǎn)換開始

模擬到數(shù)字轉(zhuǎn)換通道

#18

保留

BFM說明:

BFM#0:存儲由BFM#17指定通道的輸入數(shù)據(jù)當(dāng)前值低8位數(shù)據(jù),當(dāng)前值數(shù)據(jù)以二進制存儲。

BFM#1:存儲由BFM#17指定通道的輸入數(shù)據(jù)當(dāng)前值高4位數(shù)據(jù),當(dāng)前值數(shù)據(jù)以二進制存儲。

BFM#17:b0:指定由模擬到數(shù)字轉(zhuǎn)換的通道(CH1,CH2)。

b0=0指定CH1

b0=1指定CH2

b1:由0→1時A/D轉(zhuǎn)換過程開始

2.2硬件電路設(shè)計

2.2.1溫度值給定電路

為了能同時使用觸摸屏和開關(guān)按鍵實現(xiàn)溫度給定值輸入,觸摸屏程序利用GTDesigner3設(shè)計觸摸屏溫度給定值輸入、觸摸屏溫度顯示、觸摸屏啟動控制、觸摸屏停止控制以及指示燈指示如下圖所示;本系統(tǒng)還設(shè)計了十個開關(guān)按鍵,作為溫度給定值的輸入端口,接收十進制數(shù)(觸摸屏程序和開關(guān)按鍵電路分別如下圖所示)。給定值范圍為0~100℃,若輸入值超過給定值范圍,系統(tǒng)會發(fā)出報警信號(亮紅燈)。

觸摸屏溫度給定輸入:(右圖第一行數(shù)字即為溫度給定輸入):

觸摸屏啟動控制:(左圖第一個方形圖形)

觸摸屏停止控制:(左圖第二個方形圖形)

觸摸屏指示燈指示:

恒溫完成指示信號(Y0004)

當(dāng)前溫度大于給定溫度(Y0005)

給定溫度超出范圍報警(Y0006)

按鍵設(shè)計電路如圖2-1所示:SB1為溫度值輸入允許,SB2~SB11分別表示十進制數(shù)0~9。先按下溫度值給定允許開關(guān)SB1,然后再輸入給定溫度值,先按下的數(shù)字為高位上的數(shù)值,后按下的數(shù)字為低位上的數(shù)值。比如,先后按下開關(guān)SB5、SB2和SB2,則表示給定溫度值為300℃,并送PLC數(shù)據(jù)寄存器保存。

2.2.2溫度檢測電路

溫度檢測是溫度控制系統(tǒng)的一個很重要的環(huán)節(jié),直接關(guān)系到系統(tǒng)性能。在PLC溫度控制系統(tǒng)中,溫度的檢測不僅要完成溫度到模擬電壓量的轉(zhuǎn)換還要將電壓轉(zhuǎn)換為數(shù)字量送PLC。其一般結(jié)構(gòu)如圖2-2所示。

溫度變送器

圖2-2溫度檢測基本結(jié)構(gòu)

溫度變送器將測溫點的溫度變換為模擬電壓,其值一般為mA級,需要放大為滿足A/D轉(zhuǎn)換要求的電壓值。然后送PLC的A/D轉(zhuǎn)換模塊進行A/D轉(zhuǎn)換,得到表示溫度的電壓數(shù)字量,再用軟件進行標(biāo)度變換與誤差補償,得到測溫點的實際溫度值。

本系統(tǒng)利用熱電偶完成加熱管溫度檢測(熱端檢測加熱管溫度,冷端置于0℃溫度中)、FX2N-2AD模塊一個通道實現(xiàn)A/D轉(zhuǎn)換。加熱管溫度檢

測與放大電路由熱電偶、低通濾波、信號放大和零點遷移電路四部分組成。其電路如圖2-3所示。

圖2-3加熱管溫度檢測與放大電路

圖中,R1、C1完成低通濾波,R2、RP、2CW51組成零點遷移電路,加熱管溫度檢測元件采用鎳鉻—鎳鋁熱電偶,分度號為EU-2,查分度表可得,當(dāng)溫度為0~100℃時,輸出電勢為0~4.095mV。檢測信號經(jīng)二級放大后送FX2N-2AD模塊,第一級放大倍數(shù)為50,第二級放大倍數(shù)為11.2

零點遷移,其輸出電壓為

式中,為零點遷移值。根據(jù)設(shè)計要求,給定溫度值為0~100℃,本系統(tǒng)選取測溫范圍為0~100℃,將0℃作為測溫起點(零點)。調(diào)整多圈電位器RP,使=50*11.2=560mV,當(dāng)加熱管溫度為0℃時,=0mV,=560mV,于是=0。經(jīng)零點遷移后,加熱管溫度為0~100℃時,=0~4.095mV,=0~9.94V,A/D轉(zhuǎn)換后的數(shù)字量為0~4000。

2.2.3過零檢測電路

按設(shè)計要求,要求過零檢測電路在每個電源周期開始時產(chǎn)生一個脈沖,作為觸發(fā)器的同步信號,其設(shè)計電路如圖2-4(a)所示。

圖2-4(a)過零檢測電路

圖中,GND為+5V電源地,LM339為過零比較器.LM339集成塊內(nèi)部裝有四個獨立的電壓比較器,共模范圍很大;差動輸入電壓范圍較大,大到可以等于電源電壓。二極管用作LM339輸入保護。電路的工作波形如圖2-4(b)所示。

圖2-4(b)過零檢測電路的工作波形圖

2.2.4晶閘管電功率控制電路

晶閘管是晶體閘流管的簡稱,也叫可控硅。它是一種半控型器件,是一種可以利用控制信號控制其導(dǎo)通而不能控制其關(guān)斷的電力電子器件。它的關(guān)斷完全是由其在主電路中承受的電壓和電流決定的。也即說,若要使已導(dǎo)通的晶閘管關(guān)斷,只能利用外加反向電壓和外電路的作用使流過晶閘管的電流降到接近零的某一數(shù)值以下。

晶閘管控制電熱元件消耗的電能有兩種方法,一是采用移相觸發(fā)控制輸入電壓的大小,二是采用過零觸發(fā)控制輸入電壓加到電熱元件上的周波數(shù)。由于移相觸發(fā)控制會產(chǎn)生較大的諧波干擾信號“污染”電網(wǎng),因此采用過零觸發(fā)控制。又由于本電路所控制的電阻爐只有一根電阻絲,功率也不大,因此,本系統(tǒng)采用單相電源供電,電源的通斷由二個晶閘管反并控制,如圖2-5所示。

圖2-5電功率控制電路

這種控制方法的原理是:各晶閘管的觸發(fā)角α恒為0o,使得一個周期內(nèi)電源均加在電熱元件上,通過控制一個控制周期內(nèi)晶閘管導(dǎo)通周波數(shù),就可控制電熱元件消耗的電能。根據(jù)電熱爐的數(shù)字模型可知,溫度的增量與它消耗的電能成正比,而電熱爐消耗的電能與晶閘管導(dǎo)通周波數(shù)成正比,因此,晶閘管導(dǎo)通周波數(shù)n與控制輸出控制量u(k)的關(guān)系為

n=K*u(k)

式中,K=/為比例系數(shù)(約為1),為一個控制周期內(nèi)的電源周波數(shù),溫度偏差不同,則u(k)、n不同,電熱爐消耗的電能亦不同,達到了根據(jù)溫度偏差調(diào)節(jié)輸入電能,保證爐溫按要求變化的目的。

晶閘管由正向?qū)ǖ疥P(guān)斷時,由于空穴積蓄效應(yīng),晶閘管反向阻斷能力的恢復(fù)需要一段時間。在這段時間里,晶閘管元件流過反向電流,接近終止時,很大,它與線路電感共同作用產(chǎn)生的電壓L*可能損壞晶閘管,必須采取保護措施,在晶閘管兩端并聯(lián)阻容吸收裝置。

設(shè)計電路中的元器件的選擇如下:

(1)R和C的選擇

阻容吸收裝置的參數(shù)按晶閘管ITN根據(jù)經(jīng)驗值選取為:

R=80ΩC=0.15μF

電容C的交流耐壓為:

電阻R的功率應(yīng)滿足:

實選電容0.15μF/630V一只,電阻80Ω/0.5W一只。

(2)快速熔斷器FU的選擇

快速熔斷器是專門用來保護晶閘管的,其熔體電流按下式選?。?/p>

式中,5/6為修正參數(shù),為保證可靠與選用方便,一般取。實選熔體額定電流為20A的RLS-50螺旋式快速熔斷器二只,分別與二只晶閘管串聯(lián),其額定電壓為500V。

(3)晶閘管的選擇

電阻爐的額定功率為4KW,電源電壓為220V,故負(fù)載電流IL=18.2A。由于每個晶閘管只導(dǎo)通半個電源周波且本系統(tǒng)采用過零觸發(fā)(α=0°),流過每個晶閘管的平均電流為9.1A。關(guān)斷時,承受正反向峰值電壓為,考慮到晶閘管的過載能力小及環(huán)境溫度的變化等因素,晶閘管的額定電流應(yīng)為:

額定電壓應(yīng)為:

根據(jù)以上計算,主回路的二只晶閘管選擇為KP20-10(參數(shù)為:20A,1KV,0.1A,3V)

2.2.5脈沖輸出通道

由于PLC有很強的抗干擾性和可靠性,且FX2N-48MR-001為繼電器輸出——2A/1點(KP20-10晶閘管的觸發(fā)電流和電壓分別為0.1A和3V),因而FX2N-48MR-001的輸出點能可靠地觸發(fā)晶閘管導(dǎo)通,而無須設(shè)計光電隔離和功率放大。脈沖輸出通道電路如圖2-6所示。

圖2-6脈沖輸出通道

圖中,初始時,Y0和Y1都為低電平,當(dāng)系統(tǒng)檢測到從X0輸入的同步信號為高(低)電平時,Y0(Y1)由低電平變高電平,輸出電流值為2A的觸發(fā)電流,去觸發(fā)晶閘管VT1(VT2)導(dǎo)通;當(dāng)X0從高電平變低電平(從低電平變高電平)時,Y0(Y1)脈沖結(jié)束,電路恢復(fù)為初態(tài)。

2.2.6報警指示電路

按設(shè)計要求,報警指示電路設(shè)計了一個恒溫指示(綠燈)燈、故障報警(紅燈)和輸入出錯報警(黃燈),完成指示、報警功能。顯示及給定溫度值均由GT1040-QBBD-C觸摸屏完成。設(shè)計電路如圖2-7所示。

圖2-7報警指示電路

2.2.7復(fù)位電路

復(fù)位電路由一個開關(guān)SB12完成開/關(guān)功能,當(dāng)按下開關(guān)SB12時系統(tǒng)啟動,正常運行,執(zhí)行任務(wù);當(dāng)斷開SB12時,系統(tǒng)停止運行,不執(zhí)行任何任務(wù)。設(shè)計電路如圖2-8所示。

圖2-8復(fù)位電路

系統(tǒng)軟件設(shè)計

PLC程序輸入可以通過手持編程器、專用編程器或計算機完成。但由于手持編程器在程序輸入或閱讀理解分析時比較煩瑣;專用編程器價格高,通用性差,而計算機除了可以進行PLC的編程外,還可作為一般計算機的用途,兼容性好,利用率高。因此,利用計算機進行PLC編程和通信更具優(yōu)勢。本次軟件設(shè)計即是利用計算機編程,在三菱PLC編程軟件GTDESINER下完成程序編寫和通信。

3.1程序設(shè)計

本設(shè)計系統(tǒng)采用三菱FX系列PLC控制。其輸入、輸出地址表如表2-6所示。另外,內(nèi)存分配如表3-1所示:

表3-1內(nèi)存分配表

儲存器

特定意義

儲存器

特定意義

D0

A/D轉(zhuǎn)換數(shù)字量結(jié)果

D30

u(k)

D4

溫度給定值Q0

D31

u(k-1)

D5

加熱管溫度Q

D32

e(k)

D25

觸發(fā)周波數(shù)n

D33

e(k-1)

D26

晶閘管允許觸發(fā)標(biāo)志

D34

e(k-2)

D27

采樣周期計數(shù)器

D35

D100~D121

數(shù)據(jù)緩沖區(qū)

D36

D29

斷偶計數(shù)器

D37

D38

十鍵輸入指定存儲元件

3.2系統(tǒng)程序流程圖

初始化

溫度給定

輸入值錯誤

錯誤報警

Y

N

A/D轉(zhuǎn)換

斷偶報警

轉(zhuǎn)換值>4000

Y

N

標(biāo)度變換

實際溫度顯示

給定值與實際溫度比較

差值e(k)=0

Y

差值e(k)>10

N

恒溫指示

n=240

Y

N

等待中斷

數(shù)字調(diào)節(jié)器

保存n晶閘管觸發(fā)準(zhǔn)備

等待中斷

圖3-1系統(tǒng)程序流程圖

3.3控制系統(tǒng)控制程序的開發(fā)

針對本系統(tǒng)要求控制系統(tǒng)實現(xiàn)恒溫控制的功能,溫度在(0~100℃)范圍內(nèi)任意設(shè)定(X10~X21輸入給定值),經(jīng)過積分分離PID調(diào)節(jié),實現(xiàn)恒溫控制,同時有恒溫指示和斷偶報警信號指示。特編寫以下控制程序。(總程序見附錄二)。

3.3.1溫度設(shè)定

本設(shè)計系統(tǒng)利用十鍵數(shù)字輸入指令,設(shè)定恒溫給定值。程序如圖3-2所示。

圖3-2讀取溫度給定

當(dāng)溫度設(shè)定允許(X1=1)時,執(zhí)行十鍵輸入指令,輸入給定溫度值,送D38,當(dāng)給定值在0~100℃范圍內(nèi)時,將給定值(D38)再送D4保存。否則輸入出錯報警(Y6=1)。

3.3.2A/D轉(zhuǎn)換功能模塊的控制程序

溫度檢測硬件電路給定的A/D轉(zhuǎn)換通道號CH1,完成加熱管溫度的A/D轉(zhuǎn)換。為了提高抗干擾能力,程序采用了數(shù)字濾波措施,濾波方法是取8次輸入的平均值作為檢測結(jié)果。在此過程中設(shè)定爐溫的模擬量送入FX2N-2AD模塊1#通道(CH1)。根據(jù)三菱公司的用戶手冊中的模塊編號規(guī)則,F(xiàn)X2N-2AD直接連PLC的為0號模塊。A/D轉(zhuǎn)換功能的PLC程序如圖3-3所示:

圖3-3A/D轉(zhuǎn)換程序

本程序設(shè)計以4.8s為一個控制周期,當(dāng)控制周期到才讀取A/D轉(zhuǎn)換結(jié)果。

控制周期計時中斷服務(wù)程序(I610)如圖3-4所示。

圖3-4計時中斷程序

I610為每計時10ms便自動執(zhí)行一次中斷。當(dāng)計時10ms到,系統(tǒng)執(zhí)行I610中斷服務(wù)程序,控制周期計數(shù)器(D27)加1,將D27與480比較,若相等則M331為ON(4.8s計時到),同時將控制周期計數(shù)器(D27)清0。

3.3.3標(biāo)度變換程序

另外針對本次設(shè)計所選擇的功能模塊FX2N-2AD的輸入輸出特性,有0~100℃經(jīng)零點遷移后所對應(yīng)的數(shù)字量為0~4000(0~10V對應(yīng)的數(shù)字量),通過模數(shù)轉(zhuǎn)換得到的溫度的數(shù)字量存入D0,根據(jù)此特性,輸入數(shù)據(jù)對應(yīng)的模擬量應(yīng)該為數(shù)字量占4000的百分比,即實際溫度=100*數(shù)字量/4000=數(shù)字量*1/40。從而得到實際的溫度的數(shù)值而送入D5,同時將所得的余數(shù)與0.5℃所對應(yīng)的數(shù)字量(約等于20)進行比較,如果大于20,則將D5中的數(shù)加一,反之則不變。如此就完成了對采樣溫度值的標(biāo)度變換。標(biāo)度變換功能的PLC程序如圖3-5所示:

圖3-5標(biāo)度變換程序

3.4.4恒溫控制程序(PID)設(shè)計

PID算法

根據(jù)給定的工藝要求,溫度控制分為三段:自由升溫段、恒溫段和自然降溫段。自然降溫?zé)o需控制和檢測溫度,自由升溫只需監(jiān)視加熱管溫度是否到達恒溫值,只有恒溫段需要控制與檢測加熱管溫度。用于恒溫控制的調(diào)節(jié)器有多種形式,如大林算法、PD調(diào)節(jié)、PID調(diào)節(jié)、開關(guān)調(diào)節(jié)等,本系統(tǒng)選用實際中切實可行的積分分離PID調(diào)節(jié),它能有效地減小系統(tǒng)的超調(diào)和穩(wěn)態(tài)誤差。

PID調(diào)節(jié)器的位置式控制方程為:

式中,e(t)為t時刻給定的恒溫值Q0與實際加熱管溫度Q之差。將其離散化,得

式中,T、、、分別為采樣周期、微分時間常數(shù)、積分時間常數(shù)和比例時間常數(shù);e(k)為本次采樣時Q0與Q之差。

令(3-1)

則有式(3-2)

式中,、、分別為調(diào)節(jié)器的比例、積分、微分系數(shù)(待定參數(shù))。

為了減少在線整定參數(shù)的數(shù)目,常常假定約束條件,以減少獨立變量的個數(shù),本次設(shè)計選取

T≈0.1

≈0.5

≈0.125

其中,為純比例控制時的臨界振蕩周期。將它們代入式(3-1)。即有

因此,對四個參數(shù)的整定便簡化成了對一個參數(shù)的整定。因而使調(diào)試較為簡單方便。

恒溫控制程序

為了減少超調(diào)和消除振蕩現(xiàn)象,當(dāng)自由升溫小于給定的恒溫值10℃,系統(tǒng)就開始進行恒溫控制,恒溫控制采用積分分離PID調(diào)節(jié)。系統(tǒng)的控制算法如下:

當(dāng)加熱管溫度Q大于給定恒溫值10℃時,系統(tǒng)全速升溫,令u(k)=240,240為一個控制周期(4.8s)的工頻電源周波數(shù)。

當(dāng)e(k)<5℃時,按式(3-2)進行PID調(diào)節(jié)。

除上述兩種情況外,系統(tǒng)均進行PD調(diào)節(jié),去掉(3-2)中的e(k)。

溫度數(shù)字調(diào)節(jié)器程序框圖如圖3-6所示。

溫度數(shù)字調(diào)節(jié)器的PLC程序框圖和梯形圖分別如圖3-7所示。

將實際溫度(D5)與設(shè)定值(D4)比較得到的差值e(k)存于D32。若e(k)大于10,則送240給D30(u(k));若e(k)小于10而大于5時,則進行PD算式運算(去掉(4-2)中的積分項e(k)的剩余項)。若e(k)小于5時則進行PID算式運算(實現(xiàn)式(4-2))。最后保存u(k),更新u(k-1)、e(k-1)和e(k-2)以備下次運算。

開始

e(k)=Q0-Q

e(k)>10

NY

計算PD項

u(k)=u(k-1)+kp[e(k)-e(k-1)]+kd[e(k)-2e(k-1)+e(k-2)]

e(k)<5

u(k)=240

NY

計算PD+I項(k)=u(k)+kie(k)

u(k)->u(k-1)

e(k-1)->e(k-2)

e(k)->e(k-1)

保存u(k)

結(jié)束

圖3-6數(shù)字控制器流程

圖3-7數(shù)字控制器程序

3.4.5數(shù)字觸發(fā)器程序設(shè)計

數(shù)字觸發(fā)器組成與原理

數(shù)字觸發(fā)器按照調(diào)節(jié)器輸出的控制量控制輸送給加熱管的能量。由于晶閘管移相觸發(fā)存在很大的諧波干擾“污染”電網(wǎng),本系統(tǒng)采用過零觸發(fā),觸發(fā)器的組成如圖3-8所示。

圖3-8過零數(shù)字觸發(fā)器組成

工作原理如下:數(shù)字觸發(fā)器準(zhǔn)備程序?qū)⒖刂屏縰(k)變換為晶閘管的導(dǎo)通周波數(shù)n,且當(dāng)n>0時,置晶閘管允許觸發(fā)標(biāo)志為1。準(zhǔn)備程序在每個控制周期執(zhí)行一次。當(dāng)電源正半波到來時(由低電平變高電平),若晶閘管允許觸發(fā)標(biāo)志為1,則在Y0端產(chǎn)生一個觸發(fā)脈沖,經(jīng)光電隔離和功率放大后觸發(fā)晶閘管VT1導(dǎo)通,使電源正半波加到電阻絲上。當(dāng)電源負(fù)半波到來時(由高電平變低電平),若晶閘管允許觸發(fā)標(biāo)志為1,則在Y1端產(chǎn)生一個觸發(fā)脈沖,經(jīng)光電隔離和功率放大后觸發(fā)晶閘管VT2導(dǎo)通,使電源負(fù)半波加到電阻絲上,使負(fù)載得到一個完整的電壓波形。程序還完成晶閘管已導(dǎo)通周波數(shù)計數(shù)工作,當(dāng)已導(dǎo)通周波數(shù)等于n時,表示本控制周期內(nèi)向電阻絲輸送的能量已達到控制要求,將晶閘管允許觸發(fā)標(biāo)志清0,Y0、Y1不再輸出觸發(fā)脈沖。

數(shù)字觸發(fā)器程序

數(shù)字觸發(fā)器程序由兩部分組成:準(zhǔn)備程序和觸發(fā)程序

其程序框圖如圖3-9和圖3-10所示。

電源在一個控制周期(4.8s)有240個周波,而u(k)的最大亦也240,因此,晶閘管在一個控制周期的導(dǎo)通周波數(shù)n與控制量u(k)的關(guān)系為

n=u(k)

脈沖輸出通道要求PLC輸出的觸發(fā)脈沖為正脈沖,故程序先使Y0(或Y1)由0變1,延時約0.01s后(半個周波時間),再將Y0(或Y1)置0,在Y0(或Y1)端形成一個寬約0.01s的正脈沖。

圖3-9晶閘管觸發(fā)準(zhǔn)備程序圖3-10數(shù)字觸發(fā)程序

數(shù)字觸發(fā)器功能的PLC程序如下圖3-11所示:

當(dāng)X2為ON時,將u(k)送D25作觸發(fā)周波數(shù)n,將其與0比較,若n大于0,則置位D26(觸發(fā)允許標(biāo)志)允許觸發(fā)并將Y0和Y1置1。X0為電源周波信號輸入端,當(dāng)允許晶閘管觸發(fā)時,當(dāng)X0的上升沿(下降沿)到時Y0(Y1)輸出1,延時半個周波時間后Y0(Y1)輸出0,即在Y0(Y1)端口產(chǎn)生正脈沖去觸發(fā)晶閘管導(dǎo)通。同時每完成一個周波觸發(fā),將D25減1。直到D25為0止。D25為0而采樣周期未到D26被清0,系統(tǒng)將不再對晶閘管輸出觸發(fā)脈沖。

圖3-11數(shù)字觸發(fā)器程序

3.4.6顯示程序

本設(shè)計系統(tǒng)用GT1040-QBBD-C觸摸屏顯示溫度(本系統(tǒng)設(shè)定溫度范圍為0~100℃),

顯示程序如圖3-12所示:

觸摸屏溫度顯示(右圖第二行數(shù)字即為溫度顯示):

3.4.7恒溫指示程序

當(dāng)實際溫度與溫度給定值相等時,系統(tǒng)發(fā)出恒溫指示信號(Y4=1,綠燈亮)。恒溫指示程序如圖3-13所示:

圖3-13恒溫顯示程序

將實際溫度值(D5)與溫度設(shè)定值(D4)進行比較,如果相等則令Y4為ON,恒溫指示燈亮。同時令觸發(fā)脈沖個數(shù)為0,系統(tǒng)將不對電阻爐加熱。

3.4.8報警程序

將A/D轉(zhuǎn)換的數(shù)字量與4000比較,若連續(xù)兩次檢測到A/D轉(zhuǎn)換的數(shù)字量大于4000,則表示斷偶,系統(tǒng)輸出斷偶報警信號,Y5為ON,亮紅燈。如圖3-14所示。

圖3-14報警程序

第四章總結(jié)與展望

4.1總結(jié)

本文主要是針對“基于PLC的模擬量控制”的研究。

PLC完成對系統(tǒng)現(xiàn)場的控制過程。通過功能模塊實現(xiàn)了對模擬量、開關(guān)量、脈沖量的轉(zhuǎn)換,從而達到了對上述變量的控制,以及顯示、報警等功能。同時,控制系統(tǒng)現(xiàn)場對變量的變換有著直觀的顯示作用。

本文所做的主要工作:

(1)溫度設(shè)定由輸入端口獲得(十進制輸入)或由觸摸屏實現(xiàn)溫度設(shè)定,具備實時顯示和報警功能,人機界面良好。

(2)PLC編程實現(xiàn)積分分離PID算法。

(3)基于PLC模擬量控制和過程控制實現(xiàn)溫度控制。

(4)過零觸發(fā)晶閘管實現(xiàn)電功率的控制.

通過此次課設(shè),讓我了解了plc梯形圖、指令表、順序功能圖有了更好的了解,也讓我了解了關(guān)于plc設(shè)計原理。有很多設(shè)計理念來源于實際,從中找出最適合的設(shè)計方法。

雖然本次課程設(shè)計是要求自己獨立完成,但是,彼此還是脫離不了集體的力量,遇到問題和同學(xué)互相討論交流。多和同學(xué)討論。我們在做課程設(shè)計的過程中要不停的討論問題,這樣,我們可以盡可能的統(tǒng)一思想,這樣就不會使自己在做的過程中沒有方向,并且這樣也是為了方便最后設(shè)計和在一起。討論不僅是一些思想的問題,還可以深入的討論一些技術(shù)上的問題,這樣可以使自己的處理問題要快一些,少走彎路。多改變自己設(shè)計的方法,在設(shè)計的過程中最好要不停的改善自己解決問題的方法,這樣可以方便自己解決問題

4.2展望

由于PLC的諸多優(yōu)點,也已經(jīng)在工控領(lǐng)域得到了廣泛引用,但是,還沒有形成系統(tǒng)化、理論化的開發(fā)方法。隨著可編程序控制器技術(shù)的發(fā)展,PLC已越來越多地應(yīng)用于對模擬量的控制,所以應(yīng)增加D/A,A/D轉(zhuǎn)換及運算功能的仿真。同時,要盡量抑制干擾,尤其是控制回路之外的干擾。

過程控制系統(tǒng)開發(fā)工具功能的不斷完善,使過程控制將具有更廣闊的應(yīng)用前景,對我國國民生產(chǎn)生活各個領(lǐng)域的自動化水平的提高都有著重要的意義。

隨著微機的軟硬件技術(shù)和網(wǎng)絡(luò)通訊技術(shù)的飛速發(fā)展,工業(yè)自動化領(lǐng)域發(fā)生了革命性的技術(shù)進步。而PLC及工控機作為工業(yè)控制的設(shè)備基礎(chǔ),通過技術(shù)的不斷革新,在工業(yè)控制中的地位日益加強,并且成為工業(yè)控制技術(shù)進步的主要工具。

參考文獻

[1]朱江主編.可編程控制技術(shù)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2013

[2]康華光主編.模擬電子技術(shù)基礎(chǔ)[M].第五版.北京:高等教育出版社,2006

[3]閻石主編.數(shù)字電子技術(shù)基礎(chǔ)[M].第五版.北京:高等教育出版社,2006

[4]三菱公司編.三菱FX系列可編程序控制器特殊功能模塊用戶手冊,2001

[5]三菱公司編.三菱可編程序控制器應(yīng)用101例,1994

[6]三菱觸摸屏用戶使用手冊

[7]王本琪.基于組態(tài)王的PLC鍋爐溫度控制系統(tǒng)的設(shè)計.青島:中國海洋大學(xué).2012

[8]王振.基于PLC的鍋爐供熱控制系統(tǒng)的設(shè)計.大連:大連海事大學(xué).2008

附錄系統(tǒng)程序(梯形圖)

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

C語言全總字符串函數(shù)

函數(shù)名:stpcpy

功能:拷貝一個字符串到另一個

用法:char*stpcpy(char*destin,char*source);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

stpcpy(string,str1);

printf("%sn",string);

return0;

}

函數(shù)名:strcat

功能:字符串拼接函數(shù)

用法:char*strcat(char*destin,char*source);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

chardestination[25];

char*blank="",*c="C++",*Borland="Borland";

strcpy(destination,Borland);

strcat(destination,blank);

strcat(destination,c);

printf("%sn",destination);

return0;

}

函數(shù)名:strchr

功能:在一個串中查找給定字符的第一個匹配之處

用法:char*strchr(char*str,charc);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charstring[15];

char*ptr,c='r';

strcpy(string,"Thisisastring");

ptr=strchr(string,c);

if(ptr)

printf("Thecharacter%cisatposition:%dn",c,ptr-string);

else

printf("Thecharacterwasnotfoundn");

return0;

}

函數(shù)名:strcmp

功能:串比較

用法:intstrcmp(char*str1,char*str2);

看Asic碼,str1>str2,返回值>0;兩串相等,返回0

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="aaa",*buf2="bbb",*buf3="ccc";

intptr;

ptr=strcmp(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

else

printf("buffer2islessthanbuffer1n");

ptr=strcmp(buf2,buf3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer3n");

else

printf("buffer2islessthanbuffer3n");

return0;

}

函數(shù)名:strncmpi

功能:將一個串中的一部分與另一個串比較,不管大小寫

用法:intstrncmpi(char*str1,char*str2,unsignedmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=strcmpi(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函數(shù)名:strcpy

功能:串拷貝

用法:char*strcpy(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

strcpy(string,str1);

printf("%sn",string);

return0;

}

函數(shù)名:strcspn

功能:在串中查找第一個給定字符集內(nèi)容的段

用法:intstrcspn(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*string1="1234567890";

char*string2="747DC8";

intlength;

length=strcspn(string1,string2);

printf("Characterwherestringsintersectisatposition%dn",length);

return0;

}

函數(shù)名:strdup

功能:將串拷貝到新建的位置處

用法:char*strdup(char*str);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*dup_str,*string="abcde";

dup_str=strdup(string);

printf("%sn",dup_str);

free(dup_str);

return0;

}

函數(shù)名:stricmp

功能:以大小寫不敏感方式比較兩個串

用法:intstricmp(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=stricmp(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函數(shù)名:strerror

功能:返回指向錯誤信息字符串的指針

用法:char*strerror(interrnum);

程序例:

#include<stdio.h>

#include<errno.h>

intmain(void)

{

char*buffer;

buffer=strerror(errno);

printf("Error:%sn",buffer);

return0;

}

函數(shù)名:strcmpi

功能:將一個串與另一個比較,不管大小寫

用法:intstrcmpi(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=strcmpi(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函數(shù)名:strncmp

功能:串比較

用法:intstrncmp(char*str1,char*str2,intmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";

intptr;

ptr=strncmp(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

else

printf("buffer2islessthanbuffer1n");

ptr=strncmp(buf2,buf3,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer3n");

else

printf("buffer2islessthanbuffer3n");

return(0);

}

函數(shù)名:strncmpi

功能:把串中的一部分與另一串中的一部分比較,不管大小寫

用法:intstrncmpi(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBBccc",*buf2="bbbccc";

intptr;

ptr=strncmpi(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函數(shù)名:strncpy

功能:串拷貝

用法:char*strncpy(char*destin,char*source,intmaxlen);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

strncpy(string,str1,3);

string[3]='';

printf("%sn",string);

return0;

}

函數(shù)名:strnicmp

功能:不注重大小寫地比較兩個串

用法:intstrnicmp(char*str1,char*str2,unsignedmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBBccc",*buf2="bbbccc";

intptr;

ptr=strnicmp(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函數(shù)名:strnset

功能:將一個串中的所有字符都設(shè)為指定字符

用法:char*strnset(char*str,charch,unsignedn);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string="abcdefghijklmnopqrstuvwxyz";

charletter='x';

printf("stringbeforestrnset:%sn",string);

strnset(string,letter,13);

printf("stringafterstrnset:%sn",string);

return0;

}

函數(shù)名:strpbrk

功能:在串中查找給定字符集中的字符

用法:char*strpbrk(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string1="abcdefghijklmnopqrstuvwxyz";

char*string2="onm";

char*ptr;

ptr=strpbrk(string1,string2);

if(ptr)

printf("strpbrkfoundfirstcharacter:%cn",*ptr);

else

printf("strpbrkdidn'tfindcharacterinsetn");

return0;

}

函數(shù)名:strrchr

功能:在串中查找指定字符的最后一個出現(xiàn)

用法:char*strrchr(char*str,charc);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charstring[15];

char*ptr,c='r';

strcpy(string,"Thisisastring");

ptr=strrchr(string,c);

if(ptr)

printf("Thecharacter%cisatposition:%dn",c,ptr-string);

else

printf("Thecharacterwasnotfoundn");

return0;

}

函數(shù)名:strrev

功能:串倒轉(zhuǎn)

用法:char*strrev(char*str);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*forward="string";

printf("Beforestrrev():%sn",forward);

strrev(forward);

printf("Afterstrrev():%sn",forward);

return0;

}

函數(shù)名:strset

功能:將一個串中的所有字符都設(shè)為指定字符

用法:char*strset(char*str,charc);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10]="123456789";

charsymbol='c';

printf("Beforestrset():%sn",string);

strset(string,symbol);

printf("Afterstrset():%sn",string);

return0;

}

函數(shù)名:strspn

功能:在串中查找指定字符集的子集的第一次出現(xiàn)

用法:intstrspn(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*string1="1234567890";

char*string2="123DC8";

intlength;

length=strspn(string1,string2);

printf("Characterwherestringsdifferisatposition%dn",length);

return0;

}

函數(shù)名:strstr

功能:在串中查找指定字符串的第一次出現(xiàn)

用法:char*strstr(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*str1="BorlandInternational",*str2="nation",*ptr;

ptr=strstr(str1,str2);

printf("Thesubstringis:%sn",ptr);

return0;

}

函數(shù)名:strtod

功能:將字符串轉(zhuǎn)換為double型值

用法:doublestrtod(char*str,char**endptr);

程序例:

#include<stdio.h>

#include<stdlib.h>

intmain(void)

{

charinput[80],*endptr;

doublevalue;

printf("Enterafloatingpointnumber:");

gets(input);

value=strtod(input,&endptr);

printf("Thestringis%sthenumberis%lfn",input,value);

return0;

}

函數(shù)名:strtok

功能:查找由在第二個串中指定的分界符分隔開的單詞

用法:char*strtok(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charinput[16]="abc,d";

char*p;

/*strtokplacesaNULLterminator

infrontofthetoken,iffound*/

p=strtok(input,",");

if(p)printf("%sn",p);

/*AsecondcalltostrtokusingaNULL

asthefirstparameterreturnsapointer

tothecharacterfollowingthetoken*/

p=strtok(NULL,",");

if(p)printf("%sn",p);

return0;

}

函數(shù)名:strtol

功能:將串轉(zhuǎn)換為長整數(shù)

用法:longstrtol(char*str,char**endptr,intbase);

程序例:

#include<stdlib.h>

#include<stdio.h>

intmain(void)

{

char*string="87654321",*endptr;

longlnumber;

/*strtolconvertsstringtolonginteger*/

lnumber=strtol(string,&endptr,10);

printf("string=%slong=%ldn",string,lnumber);

return0;

}

函數(shù)名:strupr

功能:將串中的小寫字母轉(zhuǎn)換為大寫字母

用法:char*strupr(char*str);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string="abcdefghijklmnopqrstuvwxyz",*ptr;

/*convertsstringtouppercasecharacters*/

ptr=strupr(string);

printf("%sn",ptr);

return0;

}

函數(shù)名:swab

功能:交換字節(jié)

用法:voidswab(char*from,char*to,intnbytes);

程序例:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

charsource[15]="rFnakoBlrnad";

chartarget[

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論