




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录
摘要 1
ABSTRACT 2
第1章绪论
1
1.1温度控制系统的研究背景
1
1.2温度控制系统的研究现状
1
1.3温度控制系统的基本控制要求 2
1.4本论文的主要内容
3
第2章系统硬件设计 4
2.1系统总体方案设计 4
2.2系统硬件设计 4
第3章系统软件设计 10
3.1模糊控制器设计 10
3.2程序流程图
14
3.3程序设计
15
第4章组态设计 25
4.1OPC与PLC连接 25
4.2WinCC组态软件 26
4.3系统测试结果 30
第5章总结与展望 33
5.1总结 33
5.2展望 33
参考文献 34
致谢 35
河南工程学院本科毕业设计
摘要
在工业控制的各个领域,温度控制都有着广泛的应用。如钢铁厂、火电厂、化工厂等锅炉的温度控制系统。由于控制过程复杂且干扰多,具有大时滞性,不确定性,因此,要求有先进的控制系统和理论。常用的控制算法有PID算法,但它适用于线性的控制系统,需要不断调整参数。智能控制算法对于非线性的控制系统控制效果比较好,例如模糊PID算法。通过计算偏差与偏差变化率,查询模糊规则表,得出PID控制器的参数。本文就是采用这种控制算法对温度进行控制。
本文基于西门子S7-200PLC,设计了一个温度自动控制系统。利用OPC技术实现了PLC和WinCC组态软件的数据通信和控制,对温度控制过程进行实时监控、报警和分析。本文主要完成以下方面的工作。
首先介绍了温度控制系统的研究背景和研究现状,然后介绍了模糊PID算法,最后介绍了本系统的硬件系统和软件系统的设计、组装和配置过程,以PLC为控制核心,PT100温度传感器测量温度,通过变送器转换为电流信号,输入模拟量模块。经过模糊PID程序运算得出PID参数,占空比输出控制中间继电器接通,实现对温度精确控制的目的。
本系统将PLC、WinCC组态软件和实物模型三者结合在一起,通过这三者之间的通讯和监控,实现了对温度的自动控制,增强了系统的自动化水平,具有重要的实际意义。
关键词:温度控制;模糊PID;S7-200PLC;WinCC
ABSTRACT
Inallareasofindustrialcontrol,temperaturecontrolhasawiderangeofapplications.Suchassteelplants,thermalpowerplants,chemicalplantsandotherboilertemperaturecontrolsystem.Asthecontrolprocessiscomplexandinterference,withlargedelay,uncertainty,therefore,requiresadvancedcontrolsystemsandtheory.CommonlyusedcontrolalgorithmshavePIDalgorithms,butitissuitableforlinearcontrolsystemsandrequiresconstantadjustmentofparameters.Intelligentcontrolalgorithmfornon-linearcontrolsystemcontroleffectisbetter,suchasfuzzyPIDalgorithm.Bycalculatingthedeviationanddeviationrateofchange,queryfuzzyrulestable,obtainedPIDcontrollerparameters.Thispaperistousethiscontrolalgorithmtocontrolthetemperature.
BasedonSiemensS7-200PLC,thispaperdesignsatemperatureautomaticcontrolsystem.UsingOPCtechnologytoachievethePLCandWinCCconfigurationsoftwaredatacommunicationandcontrol,thetemperaturecontrolprocessforreal-timemonitoring,alarmandanalysis.Thisarticlemainlycompletesthefollowingwork.
Firstly,theresearchbackgroundandresearchstatusofthetemperaturecontrolsystemareintroduced.ThenthefuzzyPIDalgorithmisintroduced.Finally,thehardwaresystemandthesoftwaresystemaredesigned,assembledandconfigured.ThePLCisthecontrolcoreandthePT100temperaturesensormeasuresthetemperature,Throughthetransmitterintoacurrentsignal,entertheanalogmodule.AfterthefuzzyPIDprogramtocalculatethePIDparameters,dutycycleoutputcontrolintermediaterelayconnectedtoachievethepurposeofprecisetemperaturecontrol.
ThesystemcombinesthePLC,theWinCCconfigurationsoftwareandthephysicalmodeltogethertorealizetheautomaticcontrolofthetemperaturethroughthecommunicationandmonitoringbetweenthethree,andenhancetheautomationlevelofthesystem,whichisofgreatpracticalsignificance.
Keywords:temperaturecontrol,fuzzyPID,S7-200PLC,WinCC
第1章绪论
温度作为一种非常重要的参数,与科学实验和工业生产都紧密相连,具有不可忽略的影响,发挥着重要作用;对温度进行精确的控制,不仅影响到工业生产过程的质量,还对试验结果的好坏起着不可忽略的关键作用,特别是在机械加工、食品生产、石油勘探、冶金冶炼等行业中;温度控制系统的工艺过程一般都是复杂多变的,影响因素很多,易干扰等特点,因此急需研究先进的控制理论,幵发更为智能化的控制技术[1]。
1.1温度控制系统的研究背景
可编程逻辑控制器PLC是一种数字运算操作的电子系统,专为工业应用而设计。它性能卓越,满足各种各样的要求。
组态软件是数据采集监控系统SCADA的软件平台,是以计算机为基础的生产过程控制与调度自动化系统;它操作简单、功能强大,可以设置多种多样的项目类别;组态方式灵活,可以为用户快速方便的构成自动控制系统的数据采集和监控功能[2]。
西门子视窗控制中心WinCC是上个世纪九十年代进入市场的HMI/SCADA软件,它可以为用户提供适用于工业自动化控制的图像显示、数据归档、报表以及报警等功能;WinCC内包含PLC驱动程序,与上位机连接方便。它可以方便的建立模拟工业现场的独特人机界面,满足各种不同的需要。
1.2温度控制系统的研究现状
温度控制存在于生产生活的方方面面,在很多领域发挥着重要的作用。温度控制系统经过两百多年的发展,人们对温度控制系统的研究越来越深入,对控制性能的要求越来越高,比如精度高,稳定性好,因此,温度控制技术飞速发展。对于温度控制系统,目前常用的包括以下5类:基于单片机的温度控制系统,基于IPC(工控机)的温控系统,DCS(集散控制系统),FCS(现场总线控制系统)以及基于PLC的温度控制系统:
单片机应用广泛,功耗较低,控制能力强,方便灵活的扩展能力,体积小,可靠性高等优点。但单片机中断源少,响应速度偏慢,不能直接与传感器对接,不适用于复杂的环境中。
工控机(IPC)是一种可以用于工业或相关场合下的工业级PC机。它具有抗高温、抗振动等特性,可以在工业恶劣的环境中使用。但IPC也有自身的局限性,譬如较差的数据处理能力和较低的数据安全性,如果仅仅用IPC,会导致抗干扰能力弱,可靠性差。
DCS即集散型控制系统,它具有监控功能丰富,管理协调灵活多变的优点,这种系统的控制单元通常采用双冗余的结构,性能很稳定。将DCS应用于温度控制领域,能提高自动化水平,同时具有灵活的管理能力及高可靠性,由于DCS良好的扩展性,系统的抗干扰能力和工作效率也能达到满意效果。但也不是完美的、最为理想的控制方法,主要是由于它的幵放性不高,还需要与第三方仪表或控制系统通信,而实现正常通讯的硬件成本又过高。
现场总线控制系统(FCS)是一种融合了多种先进技术的综合系统,由于FCS的自主化程度高,高开放性、高智能性及集成性,不仅使用户易于安装,使用方便,节省了投资费用和维护开销,还便于用户集中管理,同时便于远程维护、诊断。将FCS应用于温度控制领域,不仅系统的智能化程度高,同时可以使系统具有更高的精度,管理方便;当然,FCS也存在不足,由于发展时间较短,目前还处在发展初期,FCS的国际标准很多,简单统计约有12种之多,众多的标准导致各个厂商不知道究竟该遵循或使用哪一种标准,限制了FCS的广泛应用。
PLC是一种微处理器,同时综合计算机、自控以及通信技术等先进技术的控制专用计算机,它可以与HMI结合,做成非常友好的界面,PLC性能强大,有较强的抗干扰性,编程使用梯形图简单易学,方便用户扩充,在工业上有广泛的应用。相对于IPC、DCS、FCS等系统而言,PLC性能优越,价格实惠,尤其在发达的工业国家,PLC在各个领域都有应用[3]。
这5种控制系统各有优缺点,考虑到稳定性通用性,本实验采用PLC进行温度控制。
1.3温度控制系统的基本控制要求
温度信号经过PT100,温度变送器,变成电流信号,输入PLC。经过PLC内部模糊PID程序运算得到输出,占空比输出控制两个中间继电器线圈的通断。一个中间继电器KA1控制电阻炉加热,另一个中间继电器KA2控制电风扇降温。比例Kp,积分Ti,微分Td三个值由偏差E和偏差变化率EC查表得出,使之动态变化。设定温度为50°C,温度偏差E,偏差变化率EC较大时,在一个周期内电阻炉加热时间长,随着温度偏差E变小,偏差变化率EC变小,在一个周期内电阻炉加热时间逐渐变短。快到达50°C时不再加热,防止超调量过大。电风扇开始工作,使温度稳定在50°C左右。
1.4本论文的主要内容
本文主要内容就是设计,实现电阻炉的恒温控制,以及系统中硬件和软件的调试工作。
第1章是绪论,对国内外温度控制的发展情况进行介绍,并说明研究温度控制系统的意义和目的。
第2章阐述该控制系统的总体控制框图,对其中的温度检测框图和中间继电器控制框图进行分析,介绍系统的硬件,包括PLC,输入输出各种元器件的选型,温度传感器,变送器的基本结构。
第3章阐述电阻炉温度控制方面应用的模糊算法,对算法的基本意义和应用进行分析,并绘制系统控制算法的框图。并介绍系统的梯形图。包括启动,停止的编程,查表程序等。
第4章主要介绍WinCC组态的设计。包含按钮,指示灯,输入/输出域的调试,整体画面的搭建。并总结这次实验,分析温度曲线。
第5章主要是总结与展望,总结完成的工作,不足的地方。
第2章系统硬件设计
2.1系统总体方案设计
根据整体的控制系统的组成部分,可分为PLC、PLC模拟量模块、中间继电器、温度变送器、温度传感器PT100、电阻炉、风扇、按钮、指示灯、上位机。温度模拟量作为PLC的输入量进行采集,通过PLC程序运算输出信号控制中间继电器,组成整个控制系统,如图1所示。
图1控制系统框图
PLC是整个控制系统的核心,给PLC写入模糊控制程序,通过温度传感器PT100和温度变送器把温度信号输入PLC。通过模糊程序运算,使PLC输入控制中间继电器。从而控制电阻炉的温度,使系统稳定运行。
由PLC输出控制中间继电器线圈,中间继电器线圈控制触点,完成小负载拖动大负载。
温度低于设定温度时PLC控制中间继电器KA1的输出闭合,KA1线圈得电,触点闭合,电阻炉工作。温度高于设定温度时PLC控制中间继电器KA2的输出闭合,KA2线圈得电,触点闭合,电扇工作。从而控制温度的变化。
2.2系统硬件设计
2.2.1PLC选型
根据输入输出点数,本设计控制核心采用西门子公司的S7-200系列PLC。该系列PLC为小型PLC,有各种功能模块,便于扩展,功能也很强大。它采用晶体管输出,响应时间很快[4]。PLC如图2所示。
图2S7-200PLC
模拟量模块选用S7-200系列的EM235模块,为四通道模拟量输入,一通道模拟量输出。模拟量输入量程有0~20mA,0~10V,0~5V等多种模式,便于用户选择[5]。模拟量模块如图3所示。
图3模拟量模块
2.2.2温度检测系统设计
根据温度控制的要求,我制定了两种控制方案。方案一:温度传感器PT100检测温度,经过变送器把信号转换为PLC模拟量模块能识别的电流信号,输入PLC。方案二:AD590作为温度传感器,设计电路,进行焊接,再把信号输入PLC。因为PT100性能稳定,便于接线,维护。工业上大多数使用PT100(或PT1000)作为温度传感器。综上所述,我选用方案一,以PT100作为温度传感器,组成温度控制系统的信号输入。
PT100温度传感器,在0°C时电阻大约100Ω,在100°C时电阻大约138.5,可以近似的看成线性变化[6]。温度曲线如图4所示。
图4PT100温度曲线
但电阻信号PLC模块EM235无法识别,需要经过转换。温度变送器就是把电阻信号转换为4~20mA电流或者0~5V/0~10V的电压信号,能被PLC模块识别。本设计采用的温度变送器为0~100°C,4~20mA输出的电流。采用4~20mA输出,而不采用0~20mA,是为了当电流输出为0时,无法判断是硬件故障还是输出为最小值。4~20mA输出就不会出现这个问题。4mA对应0°C,20mA对应100°C,线性变化[7]。所以用电流可以计算出温度。温度变送器如图5所示。
图5PT100温度变送器
温度信号需要经过传感器测量,转换成PLC能识别的信号才能输入PLC。
PT100插入电阻炉中检测温度,电阻信号送给温度变送器,通过变送器外接电源,转换为PLC可以识别的电流信号(4~20mA),输入到PLC模拟量模块。完成温度信号的输入[8]。
2.2.3温度控制系统设计
温度控制由PLC触点接通,使中间继电器线圈得电,常开触点得电闭合,从而控制电阻炉和风扇的接通和闭合,使温度变化。温度控制系统硬件接线图如图6所示。
图6温度控制系统硬件接线图
中间继电器如图7所示。
图7中间继电器
电阻炉如图8所示。
图8电阻炉
PT100插入铁心进行温度测量。
2.2.4输入输出地址与接线图
PLC输入地址的分配如表1所示,输出地址的分配如表2所示。
表1输入地址
地址
元器件
功能
I0.0
SB3
加热
I0.1
SB4
降温
I0.3
SB1
停止按钮
I0.5
SB2
启动按钮
表2输出地址
地址
元器件
功能
Q0.0
KA2,HL2
风扇
Q0.1
KA1,HL1
电阻炉
Q0.3
HL3
高温报警灯
Q0.4
HL4
低温报警灯
PLC的接线图如图9所示。
图9系统硬件接线图
第3章系统软件设计
3.1模糊控制器设计
本章重点介绍模糊控制理论在电阻炉温度控制中的可行性,先对模糊控制简要描述,其次确定该理论能用在温度控制中,然后采用专家经验法得出的模糊规则表,确定模糊控制为控制核心,模糊控制对数学模型没有太高的要求,通过模糊判据就能实现温度控制。
3.1.1模糊控制理论简介
经典控制和现代控制的传统自动控制理论都有一个共同点,就是有准确的被控数学模型,才能设计,建立控制器。但是有很多复杂的因素会阻碍数学模型的构建[9]。在这种情况下,模糊控制理论有着极大的优势,模糊控制其实就是依据具体操作人员长期积累的工作经验,来实时实地的模拟操作控制系统的实际运行状态。
模糊理论是在20世纪60年代L.A.zadeh教授创立的模糊集合理论的数学基础上发展起来的。上个世纪70年代,Mamdani将模糊控制应用在了蒸汽机上,模糊控制开始在实践中运行。因为模糊控制不需要知道被控对象精确的数学模型,而且操作过程中系统的稳定性即鲁棒性很强,可以参考专家经验和实际数据来控制系统,这使得模糊控制在各个领率得到了快速的发展[10]。
3.1.2模糊控制系统组成与原理
模糊控制系统由模糊控制器、输入/输出接口、执行机构、被控对象和测量装置等五部分组成。如图10所示。
图10模糊控制系统结构图
被控对象就是电阻炉,检测装置是PT100温度传感器,模糊控制器就是输入PLC中的模糊程序。执行机构是中间继电器。
模糊控制有两个重要的参数:e和ec。设定温度为T0(50°C),输出温度为T1,其偏差量为:e=T0-T1偏差模糊化,设偏差量e的模糊子集为e={负大,负小,零,正小,正大}设定它对应的语言变量,写成:
NB(NegativeBig)=负大
NS(NegativeSmall)=负小
Z0(Zero)=零
PS(PositiveSmall)=正小
PB(PositiveBig)=正大
E和EC的基本论域为[-3,+3],并均匀分成7档,为模糊集上的论域:{-3,-2,-1,0,1,2,3},模糊子集元素对应为{NB,NM,NS,ZE,PS,PM,PB}。
掌握了对应的E和EC,模糊规则语言可以表示为:
ifEis…andECis…thenUis…[11]。
3.1.3控制器的设计
目前温度的控制大多数采用PID控制,这种控制方法简单、便于实现,但对其参数整定比较难,现实中我们只能根据经验来手动调整参数,且一组参数不能完全适应过程中各个阶段,还容易产生较大的超调。因此在实际生产中常规的PID控制器不能达到理想的控制效果,而模糊控制却可以。应对处理此类繁杂体系中的非线性与模型非精确性的特点,模糊控制获得了很大的市场。所以本文章采用模糊控制PID进行电阻炉温度控制,用PLC作为控制核心。
由模糊控制器得出参数,输入PID控制器,完成对温度的控制。如图11所示。
图11模糊PID控制结构图
控制系统采用2输入3输出的模糊控制器。温度设定值与测量值的偏差e和偏差变化率ec作为输入量,Kp、Ti、Td作为输出量。控制过程为控制器计算出温度值偏差e以及偏差变化率ec,并以此作为PLC的输入变量,经模糊控制器输出Kp、Ti、Td给PID控制器进行调节[12],通过中间继电器控制电阻炉和风扇。
Kp、Ti、Td论域等级为Kp=Ti=Td=[-3,-2,-1,0,1,2,3],模糊化子集为KP=TI=TD=[NB,NM,NS,ZE,PS,PM,PB]。
根据控制经验,得出控制规则表。如表3、4、5所示。
表3Kp的模糊规则
e/ec
NB
NM
NS
ZE
PS
PM
PB
NB
PB
PB
PM
PM
PS
ZE
ZE
NM
PB
PB
PM
PS
PS
ZE
NS
NS
PM
PM
PM
PS
ZE
NS
NS
ZE
PM
PM
PS
ZE
NS
NM
NM
PS
PS
PS
ZE
NS
NS
NM
NM
PM
PS
ZE
NS
NM
NM
NM
NB
PB
ZE
ZE
NM
NM
NM
NB
NB
表4Ti的模糊规则
e/ec
NB
NM
NS
ZE
PS
PM
PB
NB
NB
NB
NM
NM
NS
ZE
ZE
NM
NB
NB
NM
NM
NS
ZE
ZE
NS
NB
NM
NS
NS
ZE
PS
PS
ZE
NM
NM
NS
ZE
PS
PM
PB
PS
NM
NS
ZE
PS
PS
PM
PB
PM
ZE
ZE
PS
PS
PM
PB
PB
PB
ZE
ZE
PS
PM
PM
PB
PB
表5Td的模糊规则
e/ec
NB
NM
NS
ZE
PS
PM
PB
NB
PS
NS
NB
NB
NB
NM
PS
NM
PS
NS
NB
NM
NM
NS
ZE
NS
ZE
NS
NM
NM
NS
NS
ZE
ZE
ZE
NS
NS
NS
NS
NS
ZE
PS
ZE
ZE
ZE
ZE
ZE
ZE
ZE
PM
PB
NB
PS
PS
PS
PS
PB
PB
PB
PM
PM
PM
PS
PS
PB
由表的模糊规则可写成条件语句,即
Ife=Aiandec=BithenKporTiorTd=Ci
其中Ai、Bi是定义在e、ec上的X、Y上的模糊集,Ci是定义在Kp、Ti、Td上Z的模糊集,共有49条规则,根据输入e、ec模糊量化后得到的X、Y可计算出Kp、Ti、Td[13]。如表6所示。
表6X、Y查询表
X/Y
-3
-2
-1
0
1
2
3
-3
Z0
Z1
Z2
Z3
Z4
Z5
Z6
-2
Z7
Z8
Z9
Z10
Z11
Z12
Z13
-1
Z14
Z15
Z16
Z17
Z18
Z19
Z20
0
Z21
Z22
Z23
Z24
Z25
Z26
Z27
1
Z28
Z29
Z30
Z31
Z32
Z33
Z34
2
Z35
Z36
Z37
Z38
Z39
Z40
Z41
3
Z42
Z43
Z44
Z45
Z46
Z47
Z48
研究系统的稳定性,当温度值很低(低于目标值),且温度值有更快降低的趋势时,比例系数Kp增大,应加大电阻炉加热的占空比。用模糊语句(Ife=NBandec=NBthenKp=PB)。共有49条规则。计算时公式为7(X+3)+(Y+3),即知道X(e),Y(ec),即可求出对应的Kp、Ti、Td。
PID控制器用试凑法整定参数,PID凑试法:先采用先比例,后积分,再微分。首先设定比例系数Kp,适当增大比例系数,使系统输出震荡增大,减小比例系数,使输出震荡减弱;减小积分时间常数,使输出修正变快。若输出波动周期很长,即不稳定,则需增大积分时间常数;若输出快速震荡,则需要将微分时间常数降低,若波动缓慢而误差较大,则需增大微分时间常数。最后试凑出PID参数:
δ=3
TI=7.6
TD=5.3
3.2程序流程图
程序流程图如图12所示。
开始
将模糊控制查询表置入PLC的VD500-VD548(Kp),VD600-VD648(Ti),VD700-VD748(Td)中
N
是否到采样时间?到?
Y
将A/D设定的采样值和实际值分别放入VD250和VD255中
将e和ec分别存入VD270和VD370中
将输入量分别量化到输入模糊量化的论域{-3,-2,-1,0,1,2,1}中对应的元素,置入VW200和VW300中
查询模糊控制表,得到输出量Kp,Ti,Td置入VD800,VD804,VD808中中
PID输出数值,占空比输出。
结束
图12程序流程图
3.3程序设计
3.3.1主程序设计
程序由一个主程序,5个子程序组成。主程序里面包括PID模块,输入,输出控制,以及五个子程序的合集。五个子程序为E、EC、KP、TI、TD。E子程序求出e,赋值给vw200。EC子程序求出ec,赋值给VW300。KP子程序算出具体的Kp数值赋值给VD800。TI子程序算出具体的Ti数值赋值给VD804。TD子程序算出具体的Td数值赋值给VD808。子程序如图13所示。
图13子程序块
3.3.2系统的启动和停止
系统分为物理按钮控制和WinCC上位机控制,不会出现干扰和影响。按下SB2按钮即I0.5,M9.0得电,进行自锁。程序启动,开始检测温度,进行输出。需要停止时按下SB1按钮即I0.3,断开M9.0,程序停止。启动停止程序如图14所示。
图14启动停止程序
3.3.3PID设定程序
S7-200系列PLC编程软件自带PID编程向导,方便用户编写PID控制程序。按照向导,一步步完成PID设定。根据第2章的计算,比例增益设置为3,积分时间设置为7.6,微分时间设置为5.3。如图15所示。因为是4~20mA的电流输入,需要偏移量20%,输出设置为占空比输出,如图16所示。PID的参数地址设置为从VB1000开始,如图17所示。
图15PID参数设置
图16输入输出设置
图17PID参数地址
编好的PID子程序如图,VD800、VD804、VD808为模糊控制器算出的比例增益、积分时间、微分时间。分别赋值给VD1012、VD1020、VD1024,实现模糊控制器的输出赋值给PID控制器。赋值程序如图18所示。
图18PID参数赋值程序
3.3.4手动控制程序设计与温度报警
当按下SB3按钮即I0.0,M6.1置位,M6.0接通。即Q0.1闭合,开始加热。再按一下SB3按钮,M6.1复位,M6.0复位。加热停止。即用一个按钮SB3控制加热的启动停止。降温程序和这个类似。控制程序如图19所示。
图19强制加热程序
当温度低于49°C,Q0.4接通,HL4灯亮,表示低温报警。当温度高于51°C,Q0.3接通,HL3灯亮,表示高温报警。温度报警程序如图20所示。
图20温度报警程序
3.3.5e和ec子程序设计
西门子S7-200PLC的编程软件STEP7-Micro/Win可以使用子程序和中断,还有自带的PID编程向导,十分方便。模拟量模块输入4~20mA对应的数字量是6400-32000,设定温度为50°C即19200。19200存入VD250,AIW0是模拟量输入通道接收到的实际电流信号,不过显示为数字信号,范围是6400-32000。设定值VD250减去实际测量的量VD260,即得到偏差,存入VD270。偏差e的计算程序如图21所示。
图21e计算程序
对应的模糊化X论域,表示为当温度小于等于38度(12),e赋值为-3;大于38度小于40度,e赋值为-2,依次类推。如表7所示。
表7e模糊化论域
-3
-2
-1
0
1
2
3
X≥12
12>X≥10
10>X≥8
8>X≥6
6>X≥4
4>X≥2
2>X
e对应的程序如图22所示,根据温度偏差得出对应的数值,存入VW200。ec的模糊化方法一样。ec存入VW300。
图22e赋值程序
3.3.6Kp、Ti、Td查表程序设计
第三章给出了Kp、Ti、Td的模糊查询表,程序用公式7(X+3)+(Y+3),即知道X(e),Y(ec),即可求出对应的∆Kp、∆Ti、∆Td。输出的模糊量∆Kp需要转换成清晰量,采用加权平均法(重心法)解模糊化,即可求出∆Kp。公式为:
∆Kp=j=149upj∆Kp·∆Kppjj=149upj∆Kp(3.1)
式中upj∆Kp(j=0,1,2,···,49)是根据当前e和ec值进行模糊化后求得的表3中各种∆Kp的隶属度。∆Ti、∆Td的推理过程同上。
根据模糊规则表和∆Kp、∆Ti、∆Td,完成输出量的查询表。根据e和ec得出修正参数,然后带入公式,完成PID参数整定[14]。
Kp=KP'+∆K×qp(3.2)
Ti=Ki'+∆K×qi(3.3)
Td=Kd'+∆K×qd(3.4)
图23所示为Kp的部分程序。7(VW200+3)+VW300+3得出的数再加上500,与500到548比较,得到Kp存入VD800中。VW200,VW300是e,ec。最后赋值给VD800,完成Kp的赋值。Ti,Td方法类似。最终完成VD800,VD804,VD808的赋值。VD800、VD804、VD808为模糊控制器算出的比例增益、积分时间、微分时间。分别赋值给VD1012、VD1020、VD1024,实现模糊控制器的输出赋值给PID控制器。
图23Kp查表程序
第4章组态设计
4.1OPC与PLC连接
如今,工业生产向着自动化和集成化发展,一个大型自动化项目中,包含了不同厂家的各种设备。这些设备有的提供数据采集,有的实现监控功能,不同设备标准不一样,接口也不一样。有的设备还需要安装驱动才能使用,这限制了设备之间的数据交换,限制了设备各种功能的扩展。为了实现各种设备之间无阻碍的通信和连接,OPC技术应运而生[15]。
OPC技术是用于工业自动化领域的一项技术标准。西门子推出的PCAccess软件是用于S7-200PLC的OPC软件,用于客户机测试端,检测通信的正确性。
电脑端打开PCAccess软件,如图24所示。
图24PCAccess界面
将需要的地址一个一个输入,设置好,下载到PLC,经过检测可以通信。如图25所示。
图25变量设置
4.2WinCC组态软件
4.2.1WinCC概述
WinCC全称是WindowsControlCenter,即视窗控制中心。是西门子和微软共同研究开发的上位机组态软件,主要用于生产过程的监控。WinCC软件开发周期短,系统的扩展性好,开放性好,运行起来稳定性很高。它可以提供强大的监控画面,有可操作性,为工业现场的监控提供了方便。它图形编辑能力强,模块丰富,可以用动画效果显示实际生产过程,也可以实时报警,调出历史趋势曲线,生成多种报表。WinCC的基本功能如下:
1.过程监控。作为通用的组态软件,WinCC可以对工业现场进行数据采集、监控。
2.与PLC等设备通信。WinCC通过与PLC等设备通信,实现生产监控功能。
3.编程接口。WinCC软件灵活方便,动画效果好,能实现复杂的输入输出功能。
4.报警功能。当设备故障或者生产出现问题,WinCC可以实现报警功能,及时发现问题。
5.趋势功能。WinCC能提供精确的曲线和表格,便于工作人员分析生产情况。
6.报表功能。WinCC可以生成报表和打印报表,为工业控制提供了数据记录。
7.二次开发功能。WinCC有二次开发功能,根据需要可以扩展现有的功能。
本课题选用PC/PPI电缆(USB接口)连接WinCC和PLC。
4.2.2WinCC和PLC的连接设置
第1步新建工程,命名为TEMP,变量管理的位置按右键,单机添加新的驱动程序。
第2步选择OPC.chn,点击打开。
第3步在OPC选项里面按右键点系统参数。
第4步在local里面选择S7-200OPCServer,点击游览服务器。
第5步点击NewPLC,点击所有名称点击添加条目。如图26所示。
第6步添加完成,在主界面OPC项目里S7-200OPCServer中能看到添加的所有名称。WinCC和PLC连接完成。如图27所示。
图26添加条目
图27完成连接
4.2.3WinCC组态设计
在图形编辑器中创建新的画面,依次放入按钮,指示灯,静态文本,输入/输出域,图表等。以下为按钮的制作过程,选择一个按钮,缩放到合适大小,输入“启动”。双击按钮,在事件→按钮→鼠标中双击“按左键”。出现画面。常数选择“1”,变量选择之前设置的“START”,如图28所示。双击“释放左键”。常数选择“0”,变量选择“START”如图29所示。即完成了鼠标左键点击启动,松开鼠标左键,点动按钮的组态设置。其他按钮和这个方法一样。
图28左键设置
图29右键设置
指示灯的设置如下。画一个大小合适的圈。命名为“加热指示灯”双击指示灯,在颜色里面右击背景颜色的动态,选择“动态对话框”在公式/表达式里面选择“加热”。数据类型设置为布尔型,是/真颜色设置为绿色,如图30所示。即完成了加热指示灯的设置。当加热时,指示灯绿色常亮,表示在加热。
图30指示灯设置
输入输出域即显示变化的数值,比如温度,Kp、Ti、Td的数值等。实时温度的设置如下。在智能对象里面双击输入/输出域。出现一个小窗口。右键,选择属性,输入/输出。在输出值按右键,选择动态对话框,表达式/公式选择“TEMP”变量,数据类型设置为模拟量,选择合适的输出格式,如图31所示。即完成了实时温度的设置。
图31输入/输出域设置
最后布置好的画面如图32所示。
图32组态画面
4.3组态与硬件调试
WinCC组态画面制作好之后电脑连接PLC进行通信调试,按下机械按钮“开始”或者点击组态画面“开始”,系统开始工作。温度显示为26°C,设定温度为50°C。因为温度低于49°C,所以低温报警灯亮。逐渐加热,温度最后快到50°C时加热停止,温度有较大的滞后性,温度会升到51°C以上,高温报警灯亮。超过50°C风扇工作,温度慢慢降低,最后在50°C上下波动,最后趋于稳定。在温度变化过程中,E和EC的变化会导致Kp,Ti,Td变化,使模糊PID控制输出最适合的参数,完成系统的调节。运行画面如图33所示。
图33系统运行画面
系统实物如图34所示。
图34系统实物
设置PID控制器系数Kp=3,Ti=7.6,Td=5.3,得到温度曲线为图35所示。使用模糊PID算法,得到温度曲线如图36所示。
对比普通的PID温度控制曲线和模糊PID控制器温度控制曲线和,模糊PID控制器动态性能更好,稳定性,快速性更好。模糊控制器控制温度在50°C上下浮动,符合控制要求。
图35常规PID控制温度曲线
图36模糊PID控制温度曲线
第5章总结与展望
5.1总结
在工业生产中,自动化温度控制很重要,提高了效率与质量。本系统工程实现了温度的自动化控制,用中间继电器控制电阻炉和风扇的通断,用模糊算法输出Kp,Ti,Td三个参数。用WinCC组态画面监控运行状态。用STEP7MicroWIN编写了全部的控制程序,完成了温度系统的控制。低温时电阻炉占空比输出开始加热,快到设定温度时不再加热。电风扇工作,温度降到设定温度左右风扇占空比输出,温度保持动态平衡。温度控制功能良好,在组态界面监控状态也正常,可以应用于简单的工业温度控制。
5.2展望
实际应用中,本控制设备还需要完善。实际工业控制领域,需要组装成控制柜,再用触摸屏现场控制,信息集中在总控室进行总体监控,这样方便统一管理。工业方面一般用双冗余控制,提高系统的稳定性,数学模型也需要再详细分析计算一下。输出方面如果有更多的时间我会考虑用模拟量输出,控制可控硅来加热,这样温度控制效果会更理想。
参考文献
[1]段江霞.模糊PID控制在大惯量时滞温度控制系统中的应用研究[D].兰州大学学位论文.2013:1-52.
[2]刘艳梅,任双艳,李一波.S7-300可编程控制器(PLC)教程[M].北京:人民邮电出版社,2008:56-60.
[3]周万珍.PLC分析与应用[M].北京:电子工业出版社,2004:155-163.
[4]西门子中国有限公司自动化与驱动集团.SIMATICS7-200可编程序控制器系统手册[S].北京:北京西门子公司:2003.
[5]诸静.模糊控制原理与应用[M].北京:机械工业出版社,1995:190-196.
[6]姚然.基于PLC模糊控制的小型花卉玻璃温室温度控制[D].昆明理工大学学位论文.2015:1-42.
[7]向虹霖.基于PLC的模糊控制应用研究[D].西南石油大学学位论文.2010:1-45.
[8]陶权,谢彤.基于PLC的过程控制实验装置温度模糊PID控制[J].自动化技术与应用,2010,29(10):22-26.
[9]范海亮.基于PLC的模糊PID复合控制在热泵干燥控制系统中的应用[D].南京农业大学学位论文.2012:1-73.
[10]潘永湘,杨延西,赵跃.过程控制与自动化仪表[M].北京:机械工业出版社,2007:160-165.
[11]王阿根.电气可编程控制原理与与应用[M].北京:清华大学出版社,2014:203-206.
[12]PHILIPB.FuzzyLogicController[J].LeonardoJournalofSciences.2007,6(11):79-92.
[13]叶建美.基于PLC的瓦楞原纸模糊PID温度控制系统的设计与应用[D].浙江工业大学学位论文.2009:1-50.
[14]姜其锋.基于Fuzzy_PID的人造板调施胶系统的研究[D].东北电力大学学位论文.2016:1-57.
[15]JIRIK,MIROSLAVP.ImplementationofFuzzyLogicControlBasedonPLC[C].IEEEETFA'2011
致谢
在本次设计中,我遇到了许多问题。最开始不太懂模糊控制算法,不明白过程控制方面的问题,不太懂PLC的接线和输入输出的元器件连接,在老师和同学的帮助下,这些问题都得到了解决。我要特别感谢XXX老师,老师前期给我找了好多资料,并耐心给我讲解问题,让我完成了我的设计。老师多次催促我抓紧完成进度,平时还多次查看我的设计进度,进行指导。在此,我再次感谢XXX老师对我们的悉心的指导和照顾。
附录资料:不需要的可以自行删除
C语言编程规范(仅供参考)
1.基本要求
1.1程序结构清析,简单易懂,单个函数的程序行数不得超过100行。
1.2打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
1.3尽量使用标准库函数和公共函数。
1.4不要随意定义全局变量,尽量使用局部变量。
1.5使用括号以避免二义性。
2.可读性要求
2.1可读性第一,效率第二。
2.2保持注释与代码完全一致。
2.3每个源程序文件,都有文件头说明,说明规格见规范。
2.4每个函数,都有函数头说明,说明规格见规范。
2.5主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。
2.7常量定义(DEFINE)有相应说明。
2.8处理过程的每个阶段都有相关注释说明。
2.9在典型算法前都有注释。
2.10利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为6个
字节。
2.11循环、分支层次不要超过五层。
2.12注释可以与语句在同一行,也可以在上行。
2.13空行和空白字符也是一种特殊注释。
2.14一目了然的语句不加注释。
2.15注释的作用范围可以为:定义、引用、条件分支以及一段代码。
2.16注释行数(不包括程序头和函数头说明部份)应占总行数的1/5到1/3。
3.结构化要求
3.1禁止出现两条等价的支路。
3.2禁止GOTO语句。
3.3用IF语句来强调只执行两组语句中的一组。禁止ELSEGOTO和ELSERETURN。
3.4用CASE实现多路分支。
3.5避免从循环引出多个出口。
3.6函数只有一个出口。
3.7不使用条件赋值语句。
3.8避免不必要的分支。
3.9不要轻易用条件分支去替换逻辑表达式。
4.正确性与容错性要求
4.1程序首先是正确,其次是优美
4.2无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
4.3改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
4.4所有变量在调用前必须被初始化。
4.5对所有的用户输入,必须进行合法性检查。
4.6不要比较浮点数的相等,
如:10.0*0.1==1.0,不可靠
4.7程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否
逻辑锁定、打印机是否联机等。
4.8单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。
5.可重用性要求
5.1重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。
5.2公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。
5.3公共控件或类应建立使用模板。
附:C++编程规范,delphi作相应的参考
1适用范围
本标准适用于利用VisulC++,BorlandC++进行软件程序开发的人员.。
.2变量命名
命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意
义字符串,如果连续意义字符串仅两个,可都大写.如OK.
具体例程:
BOOL类型bEnable;
ch*charchText
c*类对象cMain(对象实例)
h*Handle(句柄)hWnd
i*int
n*无符号整型
p*指针
sz,str*字符串
wWORD
x,y坐标
Char或者TCHAR类型与WindowsAPI有直接联系的用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(一般用于循环变量)。
其他资源句柄同上
.3常量命名和宏定义
常量和宏定义必须具有一定的实际意义;
常量和宏定义在#include和函数定义之间;
常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一
条定义的右侧必须有一简单的注释,说明其作用;
资源名字定义格式:
菜单:IDM_XX或者CM_XX
位图:IDB_XX
对话框:IDD_XX
字符串:IDS_XX
DLGINIT:DIALOG_XX
ICON:IDR_XX
.4函数命名
函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源:模
块名及文件名,如是内部函数,只要注释其定义文件名;
第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线
间隔,示例如下:
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结构体命名
结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用
大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数
据区,必须注明其所属的进程。全局数据定义只需注意其用途。
示例如下:
typedefstruct
{
charszProductName[20];
charszAuthor[20];
charszReleaseDate[16];
charszVersion[10];
unsignedlongMaxTables;
unsignedlongUsedTables;
}DBS_DATABASE;
DBS_DATABASEGdataBase;
6控件的命名:
用小写前缀表示类别
用小写前缀表示类别:
fm窗口
cmd按钮
cobcombo,下拉式列表框
txt文本输入框
lablabal,标签
imgimage,图象
picpicture
grdGrid,网格
scr滚动条
lst列表框
frmfram
7注释
原则上注释要求使用中文;
文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复
杂的算法需要加上流程说明;
函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数
需要加上变量用途说明;
程序中注释包括:修改时间和作者、方便理解的注释等;
引用一:文件开头的注释模板
/******************************************************************
**文件名:
**Copyright(c)1998-1999*********公司技术开发部
**创建人:
**日期:
**修改人:
**日期:
**描述:
**
**版本:
**
******************************************************************/
引用二:函数开头的注释模板
/*****************************************************************
**函数名:
**输入:a,b,c
**a
**b
**c
**输出:x
**x为1,表示...
**x为0,表示...
**功能描述:
**全局变量:
**调用模块:
**作者:
**日期:
**修改:
**日期:
**版本
****************************************************************/
引用三:程序中的注释模板
/**/
/*注释内容*/
/**/
8程序
a.程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,
尽量不采用递归模式。
b.编写程序时,亦必须想好测试的方法,换句话说,”单元测试”的测试方案应
在程序编写时一并拟好。
c.注释一定要与程序一致。
d.版本封存以后的修改一定要将老语句用/**/封闭,不能自行删除或修改,并要
在文件及函数的修改记录中加以记录。
e.程序中每个block的开头”{"及"}”必须对齐,嵌套的block每进一套,
缩进一个tab,TAB为4个空格,block类型包括if、for、while、do等关键字引出的。
f.对于比较大的函数,每个block和特殊的函数调用,都必须注明其功能,举例如下
:
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中的变量命名:
遵循匈牙利命名法,命
名必须有意义,制定如下规定
窗体:以大写的W开始,如About版权窗体,命名为WAbout
文件:以大写的F开始,如About版权窗体,文件命名为FAbout.cpp
按钮(Button):如退出按钮,命名为btnExit
……
基类:加base标记,如报表基类,窗体命名为:WBaseRep,文件命名为FBaseRep.cpp
转贴
>1.在.h/.cpp的开头应有一段格式统一的说明,内容包括:
>a.文件名(FileName);
>b.创建人(Creater);
>c.文件创建时间(Date);
>d.简短说明文件功能、用途(Comment)。
好习惯
>2.除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必
要
>时还可有备注或补充说明。
还是好习惯
>3.每列代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。
太宽了,我的限制是60列,因为文本方式下屏幕一共80列,如果你用BC这一类的编辑
器,窗口边框等又要占据一定空间,所以80列太宽
>4.循环、分支代码,判断条件与执行代码不得在同一行上。
很对
>5.指针的定义,*号既可以紧接类型,也可以在变量名之前。
>
>例:可写做:int*pnsize;
>
>也可写做:int*pnsize;
>
>但不得写做:int*pnsize;
建议采用第二种,除非附加另外一条规定:一次只声明一个变量,否则就会让人混淆,
比如:
int*a,b;
看起来b好像也是个指针,其实不是。
>6.在类的成员函数内调用非成员函数时,在非成员函数名前必须加上"::"。
这一条我倒觉得并不是必需的,我的看法是决不要让你的类成员函数和全局函数的名称
相同(或类似)
>7.函数入口参数有缺省值时,应注释说明。
>
>例:BOOLCWpsDib::PaintDIB(CDC*pDC,CRect&rc,
>intnBrightness,file://*=0*//
>BOOLbGrayScalefile://*=FALSE*//)
每个变量写一行,必要时加上/*in,out*/注释
>8.elseif必须写在一行。
应该尽量避免elseif这样的结构
>9.与‘{’、‘}’有关的各项规定:
>
>9.1‘{’、‘}’应独占一行。在该行内可有注释。
>9.2‘{’必须另起一行,‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在
同
>一列上。
>9.3在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么
>做。若省略后可能引起歧义,则必须加上‘{’、‘}’。
持保留意见,因为GNU的代码规范是这样的:
if(NULL==ptr)
{
//dosomethinghere
}
或者
if(NULL==ptr){
//dosomethinghere
}
争论哪个更好并没有意义,关键是统一,如果用VC当然你的办法最方便,可是如果你用
emacs或者vi,就不是这样了。
>10.与空格有关的各项规定。
>
>10.1在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。
但
>在‘—>’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*
>’(取值)等运算符之后不得有空格。
>10.2for、while、if等关键词之后应有1个空格,再接‘(’,之后无空格;在结
尾
>的‘)’前不得有空格。
我认为在括号两端加空格并不是什么错误,尤其是在一个条件十分复杂的if语句里
>10.3调用函数、宏时,‘(’、‘)’前后不得有空格。
>10.4类型强制转换时,‘(’‘)’前后不得有空格
同上
>11.与缩进有关的各项规定
>
>11.1缩进以Tab为单位。1个Tab为4个空格
我认为这个值应该更大,我自己使用8个空格,如果你的代码因为缩进幅度太大而导致
折行,那么几乎可以肯定你的程序设计方案有问题。
>11.2下列情况,代码缩进一个Tab:
>1.函数体相对函数名及'{'、'}'。
>2.if、else、for、while、do等之后的代码。
>3.一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有+-*/等
运
>算符,则运算符应在上一行末尾,而不应在下一行的行首。
这一条我反对,运算符应该放在下一行行首,以使人能清楚的知道这一行是续上一行
的,比如
if(something
&&somethingelse
&&otherthings)
如果写做
if(something&&
somethingelse&&
otherthings)
反而看不清楚
>11.3下列情况,不必缩进:switch之后的case、default。
编程规范与范例
目录
1排版6
2注释11
3标识符命名18
4可读性20
5变量、结构22
6函数、过程28
7可测性36
8程序效率40
9质量保证44
10代码编辑、编译、审查50
11代码测试、维护52
12宏53
1排版
1-1:程序块要采用缩进风格编写,缩进的空格数为4个。
说明:对于由开发工具自动生成的代码可以有不一致。
1-2:相对独立的程序块之间、变量说明之后必须加空行。
示例:如下例子不符合规范。
if(!valid_ni(ni))
{
...//programcode
}
repssn_ind=ssn_data[index].repssn_index;
repssn_ni=ssn_data[index].ni;
应如下书写
if(!valid_ni(ni))
{
...//programcode
}
repssn_ind=ssn_data[index].repssn_index;
repssn_ni=ssn_data[index].ni;
1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
示例:
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:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
示例:
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:若函数或过程中的参数较长,则要进行适当的划分。
示例:
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:不允许把多个短语句写在一行中,即一行只写一条语句。
示例:如下例子不符合规范。
rect.length=0;rect.width=0;
应如下书写
rect.length=0;
rect.width=0;
1-7:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
示例:如下例子不符合规范。
if(pUserCR==NULL)return;
应如下书写:
if(pUserCR==NULL)
{
return;
}
1-8:对齐只使用空格键,不使用TAB键。
说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,不要使用BC作为编辑器合版本,因为BC会自动将8个空格变为一个TAB键,因此使用BC合入的版本大多会将缩进变乱。
1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
1-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
示例:如下例子不符合规范。
for(...){
...//programcode
}
if(...)
{
...//programcode
}
voidexample_fun(void)
{
...//programcode
}
应如下书写。
for(...)
{
...//programcode
}
if(...)
{
...//programcode
}
voidexample_fun(void)
{
...//programcode
}
1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。
说明:采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。
在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。
示例:
(1)逗号、分号只在后面加空格。
inta,b,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年妇幼保健员考试政策解读与展望试题及答案
- 青光眼疾病的预防
- DB34-T 4644-2023 单位楼宇智慧安防系统建设指南
- 青春期知识与爱情
- 青春期教育主题班会教案
- 中级银行业法律法规与综合能力-中级银行从业资格考试《法律法规与综合能力》押题密卷8
- 物理-高考调研测试理综试卷物理第二次诊断性考试
- 贵州双乳峰旅游概览
- 物理人教版2024版八年级上册2.1声音的产生与传播教案01
- 迷路的时候怎么办安全教案
- 2024年四川省成都市成华区中考二诊物理试题
- CHT 1020-2010 1:500 1:1 000 1:2 000地形图质量检验技术规程(正式版)
- 2024年高考化学答题技巧-晶胞分析
- 成年奶牛饲养管理技术
- 2024年重庆鈊渝金融租赁股份有限公司招聘笔试冲刺题(带答案解析)
- 拔胃管护理不良事件案例分享
- 热食类食品制售操作流程
- 信息系统运行维护技术规范
- (正式版)QBT 5976-2024 制浆造纸行业绿色工厂评价要求
- 国家自然科学基金重大项目立项建议书
- 施工现场消防培训课件
评论
0/150
提交评论