matlab BP神经网络的训练算法中训练函数(traingdm 、trainlm、trainbr)的实现过程及相应的VC源代码
VC源代码?你很搞笑嘛。。php导航网站源码带手机
给你trainlm的m码
function [out1,out2] = trainlm(varargin)
%TRAINLM Levenberg-Marquardt backpropagation.
%
% <a href="matlab:doc trainlm">trainlm</a> is a network training function that updates weight and
% bias states according to Levenberg-Marquardt optimization.
%
% <a href="matlab:doc trainlm">trainlm</a> is often the fastest backpropagation algorithm in the toolbox,
% and is highly recommended as a first choice supervised algorithm,
% although it does require more memory than other algorithms.
%
% [NET,TR] = <a href="matlab:doc trainlm">trainlm</a>(NET,X,T) takes a network NET, input data X
% and target data T and returns the network after training it, and a
% a training record TR.
%
% [NET,TR] = <a href="matlab:doc trainlm">trainlm</a>(NET,X,T,Xi,Ai,EW) takes additional optional
% arguments suitable for training dynamic networks and training with
% error weights. Xi and Ai are the initial input and layer delays states
% respectively and EW defines error weights used to indicate
% the relative importance of each target value.
%
% Training occurs according to training parameters, with default values.
% Any or all of these can be overridden with parameter name/value argument
% pairs appended to the input argument list, or by appending a structure
% argument with fields having one or more of these names.
% show Epochs between displays
% showCommandLine 0 generate command line output
% showWindow 1 show training GUI
% epochs Maximum number of epochs to train
% goal 0 Performance goal
% max_fail 5 Maximum validation failures
% min_grad 1e- Minimum performance gradient
% mu 0. Initial Mu
% mu_dec 0.1 Mu decrease factor
% mu_inc Mu increase factor
% mu_max 1e Maximum Mu
% time inf Maximum time to train in seconds
%
% To make this the default training function for a network, and view
% and/or change parameter settings, use these two properties:
%
% net.<a href="matlab:doc nnproperty.net_trainFcn">trainFcn</a> = 'trainlm';
% net.<a href="matlab:doc nnproperty.net_trainParam">trainParam</a>
%
% See also trainscg, feedforwardnet, narxnet.
% Mark Beale, --, ODJ //
% Updated by Orlando De Jes鷖, Martin Hagan, Dynamic Training 7--
% Copyright - The MathWorks, Inc.
% $Revision: 1.1.6..2.2 $ $Date: // :: $
%% =======================================================
% BOILERPLATE_START
% This code is the same for all Training Functions.
persistent INFO;
if isempty(INFO), INFO = get_info; end
nnassert.minargs(nargin,1);
in1 = varargin{ 1};
if ischar(in1)
switch (in1)
case 'info'
out1 = INFO;
case 'check_param'
nnassert.minargs(nargin,2);
param = varargin{ 2};
err = nntest.param(INFO.parameters,param);
if isempty(err)
err = check_param(param);
end
if nargout > 0
out1 = err;
elseif ~isempty(err)
nnerr.throw('Type',err);
end
otherwise,
try
out1 = eval(['INFO.' in1]);
catch me, nnerr.throw(['Unrecognized first argument: ''' in1 ''''])
end
end
return
end
nnassert.minargs(nargin,2);
net = nn.hints(nntype.network('format',in1,'NET'));
oldTrainFcn = net.trainFcn;
oldTrainParam = net.trainParam;
if ~strcmp(net.trainFcn,mfilename)
net.trainFcn = mfilename;
net.trainParam = INFO.defaultParam;
end
[args,param] = nnparam.extract_param(varargin(2:end),net.trainParam);
err = nntest.param(INFO.parameters,param);
if ~isempty(err), nnerr.throw(nnerr.value(err,'NET.trainParam')); end
if INFO.isSupervised && isempty(net.performFcn) % TODO - fill in MSE
nnerr.throw('Training function is supervised but NET.performFcn is undefined.');
end
if INFO.usesGradient && isempty(net.derivFcn) % TODO - fill in
nnerr.throw('Training function uses derivatives but NET.derivFcn is undefined.');
end
if net.hint.zeroDelay, nnerr.throw('NET contains a zero-delay loop.'); end
[X,T,Xi,Ai,EW] = nnmisc.defaults(args,{ },{ },{ },{ },{ 1});
X = nntype.data('format',X,'Inputs X');
T = nntype.data('format',T,'Targets T');
Xi = nntype.data('format',Xi,'Input states Xi');
Ai = nntype.data('format',Ai,'Layer states Ai');
EW = nntype.nndata_pos('format',EW,'Error weights EW');
% Prepare Data
[net,data,tr,~,err] = nntraining.setup(net,mfilename,X,Xi,Ai,T,EW);
if ~isempty(err), nnerr.throw('Args',err), end
% Train
net = struct(net);
fcns = nn.subfcns(net);
[net,tr] = train_network(net,tr,data,fcns,param);
tr = nntraining.tr_clip(tr);
if isfield(tr,'perf')
tr.best_perf = tr.perf(tr.best_epoch+1);
end
if isfield(tr,'vperf')
tr.best_vperf = tr.vperf(tr.best_epoch+1);
end
if isfield(tr,'tperf')
tr.best_tperf = tr.tperf(tr.best_epoch+1);
end
net.trainFcn = oldTrainFcn;
net.trainParam = oldTrainParam;
out1 = network(net);
out2 = tr;
end
% BOILERPLATE_END
%% =======================================================
% TODO - MU => MU_START
% TODO - alternate parameter names (i.e. MU for MU_START)
function info = get_info()
info = nnfcnTraining(mfilename,'Levenberg-Marquardt',7.0,true,true,...
[ ...
nnetParamInfo('showWindow','Show Training Window Feedback','nntype.bool_scalar',true,...
'Display training window during training.'), ...
nnetParamInfo('showCommandLine','Show Command Line Feedback','nntype.bool_scalar',false,...
'Generate command line output during training.'), ...
nnetParamInfo('show','Command Line Frequency','nntype.strict_pos_int_inf_scalar',,...
'Frequency to update command line.'), ...
...
nnetParamInfo('epochs','Maximum Epochs','nntype.pos_int_scalar',,...
'Maximum number of training iterations before training is stopped.'), ...
nnetParamInfo('time','Maximum Training Time','nntype.pos_inf_scalar',inf,...
'Maximum time in seconds before training is stopped.'), ...
...
nnetParamInfo('goal','Performance Goal','nntype.pos_scalar',0,...
'Performance goal.'), ...
nnetParamInfo('min_grad','Minimum Gradient','nntype.pos_scalar',1e-5,...
'Minimum performance gradient before training is stopped.'), ...
nnetParamInfo('max_fail','Maximum Validation Checks','nntype.strict_pos_int_scalar',6,...
'Maximum number of validation checks before training is stopped.'), ...
...
nnetParamInfo('mu','Mu','nntype.pos_scalar',0.,...
'Mu.'), ...
nnetParamInfo('mu_dec','Mu Decrease Ratio','nntype.real_0_to_1',0.1,...
'Ratio to decrease mu.'), ...
nnetParamInfo('mu_inc','Mu Increase Ratio','nntype.over1',,...
'Ratio to increase mu.'), ...
nnetParamInfo('mu_max','Maximum mu','nntype.strict_pos_scalar',1e,...
'Maximum mu before training is stopped.'), ...
], ...
[ ...
nntraining.state_info('gradient','Gradient','continuous','log') ...
nntraining.state_info('mu','Mu','continuous','log') ...
nntraining.state_info('val_fail','Validation Checks','discrete','linear') ...
]);
end
function err = check_param(param)
err = '';
end
function [net,tr] = train_network(net,tr,data,fcns,param)
% Checks
if isempty(net.performFcn)
warning('nnet:trainlm:Performance',nnwarning.empty_performfcn_corrected);
net.performFcn = 'mse';
net.performParam = mse('defaultParam');
tr.performFcn = net.performFcn;
tr.performParam = net.performParam;
end
if isempty(strmatch(net.performFcn,{ 'sse','mse'},'exact'))
warning('nnet:trainlm:Performance',nnwarning.nonjacobian_performfcn_replaced);
net.performFcn = 'mse';
net.performParam = mse('defaultParam');
tr.performFcn = net.performFcn;
tr.performParam = net.performParam;
end
% Initialize
startTime = clock;
original_net = net;
[perf,vperf,tperf,je,jj,gradient] = nntraining.perfs_jejj(net,data,fcns);
[best,val_fail] = nntraining.validation_start(net,perf,vperf);
WB = getwb(net);
lengthWB = length(WB);
ii = sparse(1:lengthWB,1:lengthWB,ones(1,lengthWB));
mu = param.mu;
% Training Record
tr.best_epoch = 0;
tr.goal = param.goal;
tr.states = { 'epoch','time','perf','vperf','tperf','mu','gradient','val_fail'};
% Status
status = ...
[ ...
nntraining.status('Epoch','iterations','linear','discrete',0,param.epochs,0), ...
nntraining.status('Time','seconds','linear','discrete',0,param.time,0), ...
nntraining.status('Performance','','log','continuous',perf,param.goal,perf) ...
nntraining.status('Gradient','','log','continuous',gradient,param.min_grad,gradient) ...
nntraining.status('Mu','','log','continuous',mu,param.mu_max,mu) ...
nntraining.status('Validation Checks','','linear','discrete',0,param.max_fail,0) ...
];
nn_train_feedback('start',net,status);
% Train
for epoch = 0:param.epochs
% Stopping Criteria
current_time = etime(clock,startTime);
[userStop,userCancel] = nntraintool('check');
if userStop, tr.stop = 'User stop.'; net = best.net;
elseif userCancel, tr.stop = 'User cancel.'; net = original_net;
elseif (perf <= param.goal), tr.stop = 'Performance goal met.'; net = best.net;
elseif (epoch == param.epochs), tr.stop = 'Maximum epoch reached.'; net = best.net;
elseif (current_time >= param.time), tr.stop = 'Maximum time elapsed.'; net = best.net;
elseif (gradient <= param.min_grad), tr.stop = 'Minimum gradient reached.'; net = best.net;
elseif (mu >= param.mu_max), tr.stop = 'Maximum MU reached.'; net = best.net;
elseif (val_fail >= param.max_fail), tr.stop = 'Validation stop.'; net = best.net;
end
% Feedback
tr = nntraining.tr_update(tr,[epoch current_time perf vperf tperf mu gradient val_fail]);
nn_train_feedback('update',net,status,tr,data, ...
[epoch,current_time,best.perf,gradient,mu,val_fail]);
% Stop
if ~isempty(tr.stop), break, end
% Levenberg Marquardt
while (mu <= param.mu_max)
% CHECK FOR SINGULAR MATRIX
[msgstr,msgid] = lastwarn;
lastwarn('MATLAB:nothing','MATLAB:nothing')
warnstate = warning('off','all');
dWB = -(jj+ii*mu) \ je;
[~,msgid1] = lastwarn;
flag_inv = isequal(msgid1,'MATLAB:nothing');
if flag_inv, lastwarn(msgstr,msgid); end;
warning(warnstate)
WB2 = WB + dWB;
net2 = setwb(net,WB2);
perf2 = nntraining.train_perf(net2,data,fcns);
% TODO - possible speed enhancement
% - retain intermediate variables for Memory Reduction = 1
if (perf2 < perf) && flag_inv
WB = WB2; net = net2;
mu = max(mu*param.mu_dec,1e-);
break
end
mu = mu * param.mu_inc;
end
% Validation
[perf,vperf,tperf,je,jj,gradient] = nntraining.perfs_jejj(net,data,fcns);
[best,tr,val_fail] = nntraining.validation(best,tr,val_fail,net,perf,vperf,epoch);
end
end
什么是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是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。它采用可以编制程序的ico图标软件源码存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。”
PLC的特点
2.1可靠性高,抗干扰能力强
高可靠性是电气控制设备的关键性能。PLC由于采用现代大规模集成电路技术,采用严格的生产工艺制造,内部电路采取了先进的抗干扰技术,具有很高的可靠性。例如三菱公司生产的F系列PLC平均无故障时间高达万小时。一些使用冗余CPU的PLC的平均无故障工作时间则更长。从PLC的机外电路来说,使用PLC构成控制系统,和同等规模的继电接触器系统相比,电气接线及开关接点已减少到数百甚至数千分之一,故障也就大大降低。此外,PLC带有硬件故障自我检测功能,出现故障时可及时发出警报信息。在应用软件中,应用者还可以编入外围器件的故障自诊断程序,使系统中除PLC以外的电路及设备也获得故障自诊断保护。这样,整个系统具有极高的可靠性也就不奇怪了。
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模块连接位置传感器和执行机构,现在一般使用专用的运动控制模块。如可驱动步进电机或伺服电机的单轴或多轴位置控制模块。世界上各主要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成为控制系统的主角。
在asp中怎样通过中文名字的首字母来查询姓名列表
比较简单易实现的就是你自己直接添加一个字段为明星的首字母,这样通过查询这个字段就可以实现这个功能了,其他的都是很复杂庞大的工程。。。
其他参考代码
原理,使用Dictionary技术
1.添加索引
2.遍历词典
<%
Set d = CreateObject("Scripting.Dictionary")
d.add "a",-
d.add "ai",-
d.add "an",-
d.add "ang",-
d.add "ao",-
d.add "ba",-
d.add "bai",-
d.add "ban",-
d.add "bang",-
d.add "bao",-
d.add "bei",-
d.add "ben",-
d.add "beng",-
d.add "bi",-
d.add "bian",-
d.add "biao",-
d.add "bie",-
d.add "bin",-
d.add "bing",-
d.add "bo",-
d.add "bu",-
d.add "ca",-
d.add "cai",-
d.add "can",-
d.add "cang",-
d.add "cao",-
d.add "ce",-
d.add "ceng",-
d.add "cha",-
d.add "chai",-
d.add "chan",-
d.add "chang",-
d.add "chao",-
d.add "che",-
d.add "chen",-
d.add "cheng",-
d.add "chi",-
d.add "chong",-
d.add "chou",-
2024-11-20 07:06
2024-11-20 06:54
2024-11-20 06:43
2024-11-20 06:37
2024-11-20 04:47