版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Simul8:高级模型构建技巧1Simul8高级特性介绍1.1动态系统建模动态系统建模是Simul8中的一项高级功能,它允许用户创建随时间变化的模型,以模拟和分析复杂系统的动态行为。在动态系统建模中,系统状态随时间的推移而变化,这可以是由于内部过程(如库存水平的变化)或外部事件(如客户到达)引起的。1.1.1原理动态系统建模的核心在于状态变量和事件的定义。状态变量表示系统在某一时刻的状态,如生产线上的产品数量、银行中的客户等待时间等。事件则定义了状态变量如何以及何时发生变化,例如,当一个产品完成加工时,生产线上的产品数量减少;当一个客户到达银行时,等待队列的长度增加。1.1.2内容在Simul8中,动态系统建模通常涉及以下步骤:定义状态变量:确定模型中需要跟踪的关键状态变量。定义事件:设置事件,这些事件会改变状态变量的值。设置时间参数:定义模型的运行时间,以及事件发生的频率或时间间隔。运行模拟:执行模拟,观察系统状态随时间的变化。分析结果:使用Simul8的内置工具进行数据分析,理解系统动态行为的模式和趋势。1.1.3示例假设我们正在建模一个简单的库存系统,其中产品的需求是随机的,而补货周期固定。我们可以定义以下状态变量和事件:状态变量:库存水平。事件:需求事件:随机发生,减少库存。补货事件:每7天发生一次,增加库存。在Simul8中,我们可以通过设置需求事件的频率分布(例如,正态分布)和补货事件的周期来实现这一模型。然后,运行模拟,观察库存水平的变化,并分析在不同需求水平下,库存是否能够满足需求,以及补货周期是否合理。1.2随机变量与分布在模拟中,随机变量与分布的使用是模拟真实世界不确定性的重要手段。Simul8提供了多种随机分布,允许用户根据实际情况选择最合适的分布类型。1.2.1原理随机变量在模拟中代表了不确定的量,其值由特定的随机分布决定。随机分布描述了随机变量可能取值的概率,常见的分布包括正态分布、泊松分布、均匀分布等。1.2.2内容Simul8中,随机变量与分布的应用包括:需求预测:使用泊松分布模拟客户到达的频率。加工时间:使用正态分布模拟产品的加工时间。故障率:使用指数分布模拟设备的故障间隔时间。1.2.3示例假设我们正在模拟一个制造过程,其中产品的加工时间是不确定的,可以使用正态分布来模拟这一不确定性。在Simul8中,我们可以设置加工时间的平均值和标准差,以反映实际加工时间的分布情况。例如,如果平均加工时间为10分钟,标准差为2分钟,我们可以设置正态分布的参数为μ=10,σ=2。这样,每次模拟运行时,加工时间将随机生成,但大部分时间将集中在8到12分钟之间。1.3高级统计分析Simul8的高级统计分析功能提供了深入理解模拟结果的工具,包括假设检验、回归分析、方差分析等,帮助用户从数据中提取有价值的信息。1.3.1原理高级统计分析基于统计学原理,通过数学模型和算法来分析和解释数据。这些分析方法可以帮助用户识别模型中的关键因素,评估不同策略的效果,以及优化系统性能。1.3.2内容Simul8的高级统计分析包括:假设检验:用于验证模型结果是否与预期一致,例如,检验生产线的平均产出是否达到目标值。回归分析:分析模型参数与结果之间的关系,例如,研究加工时间与产品数量之间的相关性。方差分析(ANOVA):比较不同策略或配置下的模型结果,确定哪种策略最有效。1.3.3示例假设我们正在分析不同生产线配置对产出的影响。我们可以使用方差分析(ANOVA)来比较不同配置下的平均产出。在Simul8中,我们首先运行多个模拟,每个模拟对应一种生产线配置。然后,使用内置的ANOVA工具,输入每个配置下的产出数据,分析工具将计算不同配置之间的显著性差异,帮助我们确定哪种配置最能提高产出效率。例如,配置A的产出数据可能为[100,105,110,115,120],配置B的产出数据为[90,95,100,105,110]。通过ANOVA分析,我们可以得出配置A的产出显著高于配置B的结论,从而在实际生产中选择配置A。以上内容详细介绍了Simul8中的动态系统建模、随机变量与分布以及高级统计分析的原理和应用,通过具体示例展示了如何在Simul8中实现这些高级功能,以帮助用户更深入地理解和优化复杂系统。2模型优化与分析2.1参数敏感性分析参数敏感性分析是评估模型参数变化对模型输出影响程度的一种方法。在Simul8中,通过改变模型中的参数,如服务时间、到达率等,观察这些变化如何影响模型的性能指标,如等待时间、利用率等。这有助于识别哪些参数对模型结果有重大影响,从而在优化模型时优先考虑这些参数。2.1.1原理参数敏感性分析基于以下原理:模型参数的不确定性:在实际应用中,模型参数可能不是固定的,而是存在一定的不确定性。通过敏感性分析,可以评估这些不确定性对模型结果的影响。参数与输出的关系:通过改变参数值,观察输出的变化,可以建立参数与输出之间的关系,识别关键参数。优化决策:敏感性分析的结果可以用于指导模型的优化,帮助决策者理解参数调整的潜在效果。2.1.2内容在进行参数敏感性分析时,通常包括以下步骤:定义参数范围:确定要分析的参数及其可能的变化范围。设计实验:使用设计实验方法,如全因子设计、响应面设计等,来系统地改变参数值。运行模型:对于每组参数值,运行模型并记录输出结果。分析结果:使用统计方法分析输出结果,识别参数敏感性。2.1.3示例假设我们有一个简单的排队模型,其中包含一个服务台,服务时间服从均值为5分钟的指数分布。我们想分析服务时间的均值变化对平均等待时间的影响。#Simul8敏感性分析示例代码
importsimpy
importnumpyasnp
importpandasaspd
defservice_time(env,mean_service_time):
"""服务时间分布"""
returnnp.random.exponential(mean_service_time)
defcustomer(env,name,counter,mean_service_time):
"""顾客行为"""
print(f'{name}到达时间:{env.now}')
withcounter.request()asreq:
yieldreq
print(f'{name}开始服务时间:{env.now}')
yieldenv.timeout(service_time(env,mean_service_time))
print(f'{name}结束服务时间:{env.now}')
defsetup(env,num_customers,counter,mean_service_time):
"""模型设置"""
foriinrange(num_customers):
cess(customer(env,f'顾客{i}',counter,mean_service_time))
yieldenv.timeout(np.random.uniform(0,2))
#实验设计
mean_service_times=[4,5,6]#服务时间均值变化范围
results=[]
#运行模型
formean_service_timeinmean_service_times:
env=simpy.Environment()
counter=simpy.Resource(env,capacity=1)
cess(setup(env,100,counter,mean_service_time))
env.run(until=200)
#计算平均等待时间
wait_times=[env.now-customer[1]forcustomerincounter.queue]
avg_wait_time=np.mean(wait_times)
results.append({'服务时间均值':mean_service_time,'平均等待时间':avg_wait_time})
#分析结果
df=pd.DataFrame(results)
print(df)通过运行上述代码,我们可以得到不同服务时间均值下的平均等待时间,从而分析服务时间均值对等待时间的敏感性。2.2优化算法应用在Simul8中,优化算法被用于寻找模型参数的最佳组合,以达到特定的优化目标,如最小化成本、最大化效率等。Simul8提供了多种优化算法,包括遗传算法、模拟退火、粒子群优化等,这些算法可以自动调整模型参数,直到找到最优解。2.2.1原理优化算法基于迭代搜索原理,通过不断调整参数值,评估模型性能,逐步逼近最优解。算法的选择取决于问题的复杂性和优化目标的性质。2.2.2内容应用优化算法时,需要定义以下内容:优化目标:明确模型需要优化的性能指标。参数空间:定义所有可调整参数的范围。算法选择:根据问题特性选择合适的优化算法。结果评估:分析优化后的模型性能,确保达到预期目标。2.2.3示例假设我们有一个生产模型,目标是最小化生产成本。模型中有两个可调整参数:生产线速度和工人数量。我们使用遗传算法来寻找这两个参数的最佳组合。#使用遗传算法优化生产模型示例代码
importrandom
fromdeapimportbase,creator,tools,algorithms
#定义优化问题
creator.create("FitnessMin",base.Fitness,weights=(-1.0,))
creator.create("Individual",list,fitness=creator.FitnessMin)
#参数空间
LINE_SPEED_MIN,LINE_SPEED_MAX=1,10
WORKER_NUM_MIN,WORKER_NUM_MAX=1,20
#初始化种群
toolbox=base.Toolbox()
toolbox.register("attr_line_speed",random.randint,LINE_SPEED_MIN,LINE_SPEED_MAX)
toolbox.register("attr_worker_num",random.randint,WORKER_NUM_MIN,WORKER_NUM_MAX)
toolbox.register("individual",tools.initCycle,creator.Individual,
(toolbox.attr_line_speed,toolbox.attr_worker_num),n=1)
toolbox.register("population",tools.initRepeat,list,toolbox.individual)
#评估函数
defevaluate(individual):
"""评估个体的适应度"""
line_speed,worker_num=individual
#这里应该运行Simul8模型并返回成本
#假设成本计算如下
cost=1000/line_speed+100*worker_num
returncost,
#遗传算法操作
toolbox.register("mate",tools.cxTwoPoint)
toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)
toolbox.register("select",tools.selTournament,tournsize=3)
toolbox.register("evaluate",evaluate)
#运行遗传算法
pop=toolbox.population(n=50)
hof=tools.HallOfFame(1)
stats=tools.Statistics(lambdaind:ind.fitness.values)
stats.register("avg",np.mean)
stats.register("std",np.std)
stats.register("min",np.min)
stats.register("max",np.max)
pop,logbook=algorithms.eaSimple(pop,toolbox,cxpb=0.5,mutpb=0.2,ngen=10,
stats=stats,halloffame=hof,verbose=True)
#输出最优解
print("最优解:",hof[0])通过运行上述代码,我们可以找到生产线速度和工人数量的最佳组合,以最小化生产成本。2.3多目标优化策略在Simul8中,多目标优化是指同时优化多个性能指标,如同时最小化成本和等待时间。这通常需要使用多目标优化算法,如NSGA-II,来找到一组参数值,这些值在所有目标之间达到最佳平衡。2.3.1原理多目标优化基于Pareto最优原理,即在不恶化某个目标的情况下,无法改善另一个目标。NSGA-II算法通过维护一个Pareto前沿,逐步探索参数空间,找到一组Pareto最优解。2.3.2内容进行多目标优化时,需要:定义目标:明确所有需要优化的性能指标。参数空间:定义所有可调整参数的范围。算法选择:选择多目标优化算法,如NSGA-II。结果分析:分析Pareto前沿,选择满足多目标平衡的解决方案。2.3.3示例假设我们有一个物流模型,目标是同时最小化运输成本和运输时间。我们使用NSGA-II算法来找到这两个目标之间的Pareto最优解。#使用NSGA-II进行多目标优化示例代码
importrandom
fromdeapimportbase,creator,tools,algorithms
#定义优化问题
creator.create("FitnessMulti",base.Fitness,weights=(-1.0,-1.0))
creator.create("Individual",list,fitness=creator.FitnessMulti)
#参数空间
COST_MIN,COST_MAX=1,10
TIME_MIN,TIME_MAX=1,20
#初始化种群
toolbox=base.Toolbox()
toolbox.register("attr_cost",random.randint,COST_MIN,COST_MAX)
toolbox.register("attr_time",random.randint,TIME_MIN,TIME_MAX)
toolbox.register("individual",tools.initCycle,creator.Individual,
(toolbox.attr_cost,toolbox.attr_time),n=1)
toolbox.register("population",tools.initRepeat,list,toolbox.individual)
#评估函数
defevaluate(individual):
"""评估个体的适应度"""
cost,time=individual
#这里应该运行Simul8模型并返回成本和时间
#假设成本和时间计算如下
cost_fitness=1000/cost
time_fitness=100*time
returncost_fitness,time_fitness
#NSGA-II算法操作
toolbox.register("mate",tools.cxTwoPoint)
toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)
toolbox.register("select",tools.selNSGA2)
toolbox.register("evaluate",evaluate)
#运行NSGA-II算法
pop=toolbox.population(n=50)
hof=tools.ParetoFront()
stats=tools.Statistics(lambdaind:ind.fitness.values)
stats.register("avg",np.mean,axis=0)
stats.register("std",np.std,axis=0)
stats.register("min",np.min,axis=0)
stats.register("max",np.max,axis=0)
pop,logbook=algorithms.eaMuPlusLambda(pop,toolbox,mu=len(pop),lambda_=len(pop),
cxpb=0.5,mutpb=0.2,ngen=10,
stats=stats,halloffame=hof,verbose=True)
#输出Pareto前沿
forindividualinhof:
print("成本:",individual[0],"时间:",individual[1])通过运行上述代码,我们可以找到运输成本和运输时间之间的Pareto最优解,从而在成本和时间之间达到最佳平衡。3高级仿真技巧3.1并行仿真运行并行仿真运行是提高仿真模型执行效率的关键技术。在Simul8中,通过并行化可以同时在多个处理器或计算机上运行仿真,从而显著减少仿真时间。并行仿真尤其适用于大型复杂模型,其中包含多个独立的子系统或场景。3.1.1原理并行仿真的核心在于将模型分解为多个可以独立运行的部分,然后在不同的处理器上同时执行这些部分。Simul8通过其并行仿真引擎实现这一功能,该引擎能够自动检测模型中的并行性,并在多核处理器或网络中的多台计算机上分配仿真任务。3.1.2内容模型分解:识别模型中可以并行执行的部分,如独立的生产线、仓库或服务流程。资源分配:根据处理器的可用性和模型的复杂度,合理分配仿真任务。结果整合:并行运行结束后,将各个部分的结果整合,生成完整的仿真报告。3.1.3示例虽然Simul8不直接支持代码编辑,但我们可以描述一个场景,假设你有一个包含两条独立生产线的模型,每条生产线都有自己的输入、处理和输出。在并行仿真中,你可以设置Simul8将这两条生产线分别在不同的处理器上运行,以加速仿真过程。-**生产线1**:在处理器1上运行,处理产品A的生产。
-**生产线2**:在处理器2上运行,处理产品B的生产。通过并行仿真,即使在复杂的模型中,也能实现快速的仿真结果获取。3.2仿真结果可视化仿真结果的可视化是理解和分析仿真数据的重要手段。Simul8提供了丰富的工具和选项,用于将仿真结果转换为直观的图表、图形和动画,帮助用户更深入地洞察模型的行为和性能。3.2.1原理Simul8的可视化工具基于模型的仿真数据,自动或手动生成图表和动画。这些工具可以展示模型在仿真过程中的动态变化,如资源利用率、队列长度、产品流等。3.2.2内容动态图表:实时显示仿真过程中的关键指标,如生产线的效率、库存水平等。3D动画:提供模型的三维视图,直观展示产品在生产线上的流动。报告生成:自动生成包含图表和关键指标的报告,便于分享和讨论。3.2.3示例假设你正在分析一个包含多个工作站的生产线模型。你可以使用Simul8的动态图表功能,创建一个展示每个工作站利用率的图表。以下是创建图表的步骤:选择数据源:从仿真结果中选择“工作站利用率”作为图表的数据源。定义时间范围:设置图表显示整个仿真周期或特定时间段的数据。选择图表类型:选择“折线图”以直观显示利用率随时间的变化。-**工作站1**:利用率平均为80%,在高峰时段达到95%。
-**工作站2**:利用率平均为70%,在低谷时段降至50%。通过这样的可视化,你可以快速识别生产线中的瓶颈和低效环节,为优化提供依据。3.3模型验证与确认模型验证与确认是确保仿真模型准确反映真实系统的关键步骤。在Simul8中,这一过程包括模型的校准、验证和确认,以确保模型的可靠性和有效性。3.3.1原理模型验证涉及检查模型的逻辑和结构是否正确,而确认则关注模型的输出是否与实际系统的行为相匹配。Simul8提供了多种工具和方法,帮助用户进行模型的验证和确认。3.3.2内容逻辑验证:检查模型的逻辑和规则是否正确,确保模型的行为符合预期。数据校准:使用实际系统数据调整模型参数,以提高模型的准确性。结果确认:将模型的仿真结果与实际系统数据进行比较,确认模型的有效性。3.3.3示例假设你正在验证一个仓库模型,该模型旨在优化库存管理和订单处理流程。为了验证模型,你可以进行以下步骤:逻辑检查:确保模型中的所有规则,如库存补充策略、订单处理流程,都与实际操作一致。参数校准:使用历史订单数据和库存记录,调整模型中的参数,如订单到达率、库存补充周期等。结果比较:运行仿真,将模型预测的库存水平和订单处理时间与实际数据进行比较,确认模型的准确性。-**实际库存水平**:平均为1000单位。
-**模型预测库存水平**:经过校准后,平均为1010单位,误差在可接受范围内。通过模型验证与确认,你可以确信模型能够准确地反映真实系统,从而基于模型做出可靠的决策。4案例研究与应用4.1制造业仿真案例在制造业中,Simul8仿真软件被广泛应用于生产线设计、流程优化和产能规划。下面通过一个具体的案例来探讨Simul8在制造业中的应用。4.1.1案例背景假设一家汽车制造厂需要优化其装配线的效率,以减少生产周期时间和提高产量。该工厂的装配线由多个工作站组成,每个工作站负责不同的装配任务。Simul8可以用来模拟装配线的运行,分析瓶颈,测试不同的改进方案。4.1.2模型构建定义实体和资源:首先,定义汽车为实体,工作站为资源。每个工作站的加工时间、故障率和维修时间都需要在模型中设定。设置流程:实体(汽车)从生产线的起点开始,依次经过各个工作站,直到生产线的终点。每个工作站的处理逻辑需要在模型中详细设定。分析与优化:运行模型,收集数据,分析哪些工作站是瓶颈。然后,通过增加资源、调整工作站顺序或改进工作站效率来测试不同的优化方案。4.1.3示例代码#以下代码示例使用Python的SimPy库来模拟一个简化的装配线
importsimpy
defcar_assembly(env,name,processing_times):
print(f'{name}开始装配at{env.now}')
fori,timeinenumerate(processing_times):
withworkstation.request()asreq:
yieldreq
print(f'{name}在工作站{i+1}开始装配at{env.now}')
yieldenv.timeout(time)
print(f'{name}在工作站{i+1}完成装配at{env.now}')
print(f'{name}完成装配at{env.now}')
env=simpy.Environment()
workstation=simpy.Resource(env,capacity=1)
#创建实体(汽车)
car1=cess(car_assembly(env,'Car1',[2,3,2]))
car2=cess(car_assembly(env,'Car2',[1,4,1]))
#运行仿真
env.run(until=10)4.1.4解释此代码使用SimPy库来模拟一个包含三个工作站的汽车装配线。car_assembly函数定义了汽车在装配线上的流程,包括在每个工作站的等待和处理时间。通过运行仿真,我们可以观察到汽车在不同工作站的处理时间,从而识别瓶颈。4.2服务行业模型构建服务行业,如银行、医院和零售业,同样可以从仿真模型中受益,以提高客户满意度和运营效率。4.2.1案例背景一家银行希望优化其客户等待时间,通过调整柜员数量和自助服务机的布局来实现。4.2.2模型构建定义实体和资源:客户为实体,柜员和自助服务机为资源。需要设定客户到达的频率、柜员的处理速度和自助服务机的使用率。设置流程:实体(客户)到达银行后,根据需求选择自助服务或排队等待柜员服务。柜员服务完成后,客户离开银行。分析与优化:运行模型,分析客户等待时间,测试增加柜员或优化自助服务机布局的效果。4.2.3示例代码importsimpy
defcustomer(env,name,teller,atm):
print(f'{name}到达银行at{env.now}')
ifenv.now<5:#假设前5分钟客户倾向于使用柜员服务
withteller.request()asreq:
yieldreq
print(f'{name}开始柜员服务at{env.now}')
yieldenv.timeout(5)#柜员服务时间
print(f'{name}完成柜员服务at{env.now}')
else:
yieldatm.request()#使用自助服务机
print(f'{name}使用自助服务机at{env.now}')
yieldenv.timeout(2)#自助服务时间
print(f'{name}完成自助服务at{env.now}')
env=simpy.Environment()
teller=simpy.Resource(env,capacity=2)#两个柜员
atm=simpy.Resource(env,capacity=3)#三个自助服务机
#创建实体(客户)
foriinrange(10):
cess(customer(env,f'Customer{i}',teller,atm))
env.timeout(1)#客户到达间隔
env.run(until=20)4.2.4解释此代码模拟了银行的运营,其中客户可以选择柜员服务或自助服务。通过调整柜员和自助服务机的数量,我们可以观察到客户等待时间的变化,从而优化服务流程。4.3物流系统优化实例物流系统涉及复杂的运输和仓储管理,仿真模型可以帮助企业优化库存、减少运输成本和提高配送效率。4.3.1案例背景一家物流公司需要优化其仓库的库存水平和配送路线,以减少成本并提高客户满意度。4.3.2模型构建定义实体和资源:货物为实体,仓库和运输车辆为资源。需要设定货物的到达频率、仓库的存储容量和运输车辆的配送速度。设置流程:实体(货物)到达仓库后,根据需求进行存储或立即配送。配送时,需要考虑最优路线和车辆调度。分析与优化:运行模型,分析库存水平和配送成本,测试不同的库存策略和配送路线优化方案。4.3.3示例代码importsimpy
defdelivery(env,name,warehouse,vehicles):
print(f'{name}到达仓库at{env.now}')
yieldwarehouse.put(1)#存储货物
print(f'{name}存储完成at{env.now}')
#等待直到有车辆可用
vehicle=yieldvehicles.get()
print(f'{name}开始配送at{env.now}')
yieldenv.timeout(2)#配送时间
print(f'{name}配送完成at{env.now}')
#返回车辆到资源池
vehicles.put(vehicle)
env=simpy.Environment()
warehouse=simpy.Container(env,init=0,capacity=100)#仓库容量
vehicles=simpy.Container(env,init=5,capacity=10)#车辆资源池
#创建实体(货物)
foriinrange(20):
cess(delivery(env,f'Goods{i}',warehouse,vehicles))
env.timeout(1)#货物到达间隔
env.run(until=30)4.3.4解释此代码模拟了物流公司的仓库和配送流程。通过调整仓库的存储策略和车辆的调度,我们可以优化物流系统的整体性能,减少成本并提高效率。通过以上案例,我们可以看到Simul8仿真软件在不同行业中的应用潜力,以及如何通过构建模型、分析数据和测试优化方案来解决实际问题。5Simul8高级工具使用5.1脚本编程基础在Simul8中,脚本编程是增强模型灵活性和功能的关键。通过脚本,用户可以自定义实体的行为、逻辑处理以及数据收集方式,实现更复杂的模拟需求。5.1.1基本语法Simul8的脚本语言基于VisualBasic,因此熟悉VB的用户可以快速上手。以下是一个简单的脚本示例,用于在实体进入工作站时记录时间戳:'当实体进入工作站时执行
SubOnEnter()
'记录当前时间
DimcurrentTimeAsDouble
currentTime=Now()
'将时间戳添加到实体的属性中
Me.SetAttribute("Timestamp",currentTime)
EndSub5.1.2属性与方法Simul8脚本中,实体、工作站、资源等都有各自的属性和方法。例如,Me关键字通常用于引用当前实体,而Now()函数则返回当前的模拟时间。'获取实体的属性值
DimattributeValueAsDouble
attributeValue=Me.GetAttribute("Timestamp")
'设置工作站的属性
Workstation.SetAttribute("Utilization",0.8)5.2高级脚本技巧5.2.1条件分支与循环在Simul8脚本中,可以使用If语句和For循环来实现更复杂的逻辑控制。'根据实体类型决定处理方式
IfMe.GetType()="TypeA"Then
'处理TypeA实体
Me.SetAttribute("Processed",True)
ElseIfMe.GetType()="TypeB"Then
'处理TypeB实体
Me.SetAttribute("Processed",False)
EndIf
'循环处理实体队列
Fori=1ToQueue.Count
DimentityAsEntity
entity=Queue.GetEntity(i)
'执行实体处理逻辑
entity.SetAttribute("Processed",True)
Next5.2.2函数与过程自定义函数和过程可以封装重复的逻辑,提高脚本的可读性和可维护性。'定义一个计算实体等待时间的函数
FunctionCalculateWaitTime()AsDouble
DimentryTimeAsDouble
entryTime=Me.GetAttribute("EntryTime")
CalculateWaitTime=Now()-entryTime
EndFunction
'在实体进入工作站时调用函数
SubOnEnter()
Me.SetAttribute("EntryTime",Now())
EndSub
'在实体离开工作站时计算等待时间
SubOnLeave()
DimwaitTimeAsDouble
waitTime=CalculateWaitTime()
'记录等待时间
Me.SetAttribute("WaitTime",waitTime)
EndSub5.3插件与扩
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粉扑收纳架市场发展前景分析及供需格局研究预测报告
- 口琴产业链招商引资的调研报告
- 天然气输送结构的建造行业相关项目经营管理报告
- 剪贴集产品供应链分析
- 大学或学院教育行业市场调研分析报告
- 宝石分级行业营销策略方案
- 厕所除臭剂产品供应链分析
- 石油专用泥浆泵项目运营指导方案
- 缝纫用剪刀项目运营指导方案
- 电动轨道照明设备项目运营指导方案
- 防火墙通用技术规范
- 水污染控制工程第9章2PPT课件.ppt
- 钢栈桥设计与施工要点
- 商检知识要点
- 重庆市妇幼保健院进修人员申请表
- 鼻腔、鼻窦内翻性乳头状瘤的放射治疗
- 人教版小学英语主要句型汇总
- 人教2019新教材化学必修一课后习题整理
- 关于进一步规范机动车和驾驶员牌证工本费等收费项目和
- 英语教师行动研究案例
- 中国铁塔股份有限公司室内分布系统施工及验收规范
评论
0/150
提交评论