流水车间调度系统说明书 - 图文

更新时间:2024-06-28 18:55:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

流水车间调度优化系统

设计说明书

版本号:v1.0

作者:××× 单位:××× 2014年5月4日

1

目 录

第1章 系统概述 ............................................................................................................................ 1

1.1 项目背景............................................................................................................................ 1 1.2 系统开发意义 .................................................................................................................... 1 1.3 系统开发目的 .................................................................................................................... 1 第2章 系统分析 ............................................................................................................................ 2

2.1系统功能分析 ..................................................................................................................... 2

2.1.1功能需求分析 .......................................................................................................... 2 2.1.2性能需求分析 .......................................................................................................... 2 2.2 系统功能结构 .................................................................................................................... 2 第3章 开发平台 ............................................................................................................................ 3

3.1 开发环境............................................................................................................................ 3 3.2 Visual Basic 6.0简介 ......................................................................................................... 3 3.3 SQL Server数据库编程.................................................................................................... 5 第4章 总体设计 ............................................................................................................................ 7

4.1 系统流程图........................................................................................................................ 7 4.2 系统功能划分 .................................................................................................................... 7 4.3 系统界面设计 .................................................................................................................... 8 第5章 数据库设计 ........................................................................................................................ 9

5.1 数据流图............................................................................................................................ 9 5.2 实体及E-R图 ................................................................................................................... 9 5.3 数据库表设计 .................................................................................................................. 11 5.4 数据库及表的建立与实现 .............................................................................................. 11 第6章 用户登陆模块设计........................................................................................................... 16

6.1 登陆模块功能概述 .......................................................................................................... 16 6.2 功能模块设计 .................................................................................................................. 16 6.3 编程实现及界面设计 ...................................................................................................... 16 第7章 作业信息管理模块设计................................................................................................... 19

7.1 作业信息管理模块功能概述 .......................................................................................... 19 7.2 功能模块设计 .................................................................................................................. 19 7.3 编程实现及界面设计 ...................................................................................................... 20 第8章 作业调度管理模块设计................................................................................................... 28

8.1 作业调度管理模块功能概述 .......................................................................................... 28 8.2 功能模块设计 .................................................................................................................. 28 8.3 编程实现及界面设计 ...................................................................................................... 29

8.3.1 作业拆解与排序 ................................................................................................... 29 8.3.2 作业分配与优化 ................................................................................................... 33

第9章 算法优化模块设计........................................................................................................... 36

9.1 算法优化模块功能概述 .................................................................................................. 36 9.2 算法设计.......................................................................................................................... 36 9.3 编程实现及界面设计 ...................................................................................................... 37 第10章 作业统计模块设计......................................................................................................... 48

2

10.1 统计模块功能概述 ........................................................................................................ 48 10.2 功能模块设计 ................................................................................................................ 48 10.3 编程实现及界面设计 .................................................................................................... 48 第11章 系统测试及打包发布 ..................................................................................................... 53

11.1 系统的调试与测试 ........................................................................................................ 53 11.2 打包发布 ........................................................................................................................ 53 总 结 .............................................................................................................................................. 56

3

第1章 系统概述

1.1 项目背景

随着科学技术的迅速发展和经济全球化,市场竞争日趋激烈。对企业来说,为了能够在竞争中立于不败之地,降低生产成本是不得不面临的问题,而确保生产调度较高的生产能力和效率也是当务之急。此外,有效的调度方法已经成为先进制造技术实践的基础和关键,所以对生产调度的研究具有重要的理论意义和极大的实用价值。

流水车间调度是生产调度中最频繁的一种调度。流水车间调度优化系统结合了SQL Server关键技术及Visual Basic 6.0集成环境的优点,实现了作业的计划、拆解、排序、分配、优化、统计等功能。系统可供调度管理人员进行作业调度的智能化管理。通过合理优化作业调度,可以有效地提高生产效率,节约生产成本,为企业创造更大的经济效益,同时极大地降低了工作人员的劳动强度,提高工作效能。

1.2 系统开发意义

通过对实际情况的研究,不难发现计算机调度信息管理技术是加快和提高生产调度管理的重要手段。随着调度管理技术的发展和应用,将会进一步提高生产调度资源的效率和更快地获取和修改信息的方式,也是先进制造技术实践的基础和关键。

调度管理系统的启动,将会给整个生产调度管理带来巨大的提高。这些变化不仅体现在调度管理方式和理念的转变,同时也体现了调度管理的现代化和信息化水平。工作人员的素质会随着管理方式的改变而提高,生产工作的自律性、积极性能得到较大限度的激发。

1.3 系统开发目的

经过近50年的发展,生产调度问题的研究方法经历了从简单到复杂、从单一到多元的过程。上个世纪末,生产调度管理工作仍是手工作业,有专人进行作业的调度管理工作,但效率低下、出错率高、安全性差。本世纪初,随着经济水平的发展,生产进入信息化时代,给作业调度管理提出了更高的要求,使用计算机进行生产调度的作业计划、作业拆解、作业排序及分配等管理,极大地节约人力和物力,提高生产调度的效率。除了以往的作业管理之外,还要细化出作业管理的参数、产品的定单维护、调度算法及设备负荷情况的查看等。这些操作对数据的正确性、安全性、操作的高效性、可靠性等提出了更高的要求。

流水车间调度优化系统的开发是解决上述问题的最佳方案,其主要目的是将一些先进的信息技术结合运用到流水车间调度信息管理和服务中,用这些技术来促进生产管理各部门的协作,提高生产调度管理乃至单位管理的效率。

1

第2章 系统分析

2.1系统功能分析

2.1.1功能需求分析

流水车间调度优化系统的总目标:在SQL Server 2008数据库和Visual Basic 6.0的开发平台上,利用现有的资源,开发一个体系结构完善、易扩充、易维护、具有良好人机交互界面的管理系统,实现流水车间调度的智能化管理,提供完善的功能,为操作人员提供便利的工作方式。

通过调研,系统需实现以下一些基本功能:

(1)作业信息管理(包括添加、查询、修改、删除信息); (2)作业拆解与排序; (3)作业分配与优化; (4)作业生产情况统计。

2.1.2性能需求分析

为了使系统功能齐全完备,操作简便,最大限度的提高软件质量,从而满足用户的实际需要,流水车间调度系统应具有以下性能。

(1)实用性

设计应以满足企业需求为主要目标,在此前提下适当考虑经济性。 (2)易操作性

要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。 (3)可靠性

开发的系统应通过实践检验,被证明是成熟可靠的。应注重稳定性,要求具有高平均无故障时间和低的平均故障率。提供容错设计,有故障检测和恢复手段。

(4)可扩展性

系统设计应充分考虑,便于今后的扩展。

2.2 系统功能结构

系统主要由用户登录模块、作业管理模块、作业调度模块、算法优化模块和统计模块构成。每个模块以对话框形式呈现给用户进行交互,完成其相应的功能。系统主要实现了用户登录管理(验证用户名与密码,登陆用户有调度管理人员和普通操作人员)、作业信息管理(包括作业查询、修改、添加、删除等)、作业拆解与排序、作业分配与优化、作业统计等功能,具体结构如图1所示。

用户登录模块作业管理模块算法优化模块作业调度模块统计模块车间平台数据库图1 系统结构图

2

第3章 开发平台

3.1 开发环境

硬件系统

CPU:Pentium 233以上 内存:512M以上

硬盘:至少50M的硬盘可用空间 显示器:VGA,显示分辨率为1024×768以上 软件环境

操作系统:Windows XP或更高版本

开发工具:Visual Basic 6.0、SQL Server 2008

3.2 Visual Basic 6.0简介

Visual Basic 6.0是一个应用程序开发工具,其主要作用是用来编写Windows应用程序。对于Visual Basic 6.0,不但具有Basic所拥有的编程语言简单易懂的特点,并且它还支持面向对象和事件驱动的编程技术,使用了一个比较精妙的办法将Windows中关于编程的复杂性封闭起来,具有所见即所得的可视化程序设计风格。

与各种各样的开发工具相比,Visual Basic(简称VB)拥有以下新颖特点: (1)拥有面向对象的可视化开发工具 对于VB,应用面向对象程序设计(Object-Oriented Programming, OOP)方法,将数据和程序组放在一起作为对象,并且任何一个对象都是可视化的。开发者可通过目前拥有的工具按照设计的需求,快捷地在屏幕上生成菜单、按钮、窗口等各种各样的对象,而且还可以给任何一个对象设立属性。之后的设计工作也只是设计对象完成动作所要求的程序,因此可大幅提升编程设计的效率。

(2)基于事件驱动的编程技术

事件驱动这种编程方法适用设计图形界面。对于图形界面的程序设计,事件控制着程序运行的走向,任何一个事件都可以决定某一段程序的运行,工作者只需编写相关动作代码。

(3)提供简单易懂的程序集成开发环境

对于VB提供的集成开发环境,使用者不但可以设计界面、编写和调试代码,还可以将程序打包成exe程序,使用简单且快捷。

(4)良好的结构化程序编程语言

VB拥有结构化的程序框架和丰富的数据类型,同时具有以下特征: ① 可处理各种字符串和数值; ② 拥有大量的图形命令函数,能够快捷的描绘任何图形; ③ 可以给出静态及动态的数据,使内存的分配回收更为简单; ④ 过程能够推导调出,使程序更简练; ⑤ 允许调查顺序和随机文件; ⑥ 提供丰富的图标类型库供程序调用。

因此,运用VB编程还是比较容易的,第一步进行界面设计,第二步编写相关代码,从而实现相应的功能。

对于VB来讲,窗体也是其中的对象,在VB窗体中有很多的特性,从而使软件开发界面的组建就像在提纲中找出一个合适的空间,并不是编写大段代码去组建控件,像这种用户能够切身观察到的设计叫做可视化的程序设计。

3

Object-Oriented(面向对象),简称OO,这是一种具有特别实用价值的软件开发方法,得到了广泛应用。如今它已成为计算机研究的一个关键方面及软件开发的重要方法。OO的研究方法是基于客观生活中的对象,其设计思想和理念与人类思维相一致,得出的结果一般也与客观现实相符合,能更容易被人理解。

Object-Oriented=Object(对象)+Classification(分类)+Inheritance(继承)+Communication with message(消息通信)

Edward Yourdon 与Peter Coad给出了上面的表达式来认知面向对象方法,其中每部分含义如下:

(1)对象:对象是数据和代码相互融合的结合体,如按钮、滚动条、窗体等。一般对象是由对象名、属性以及操作这三个方面构成。对象名标识一个对象的ID;对于属性既可以是数据也可以是另外的对象,任何一种对象都具有本身的属性值,用来表示该对象的情况;操作即方法,表示对象可以提供的功能,如窗口对象可以调用Hide(隐藏)方法,多个控件对象可以用Move(移动)方法,打印机对象可以用Print(打印)方法等。

(2)类:拥有同一种属性和操作的对象集合,类的任何对象都是该类的一个实例。 (3)封装性:一种消息隐藏的方法,使用者只能够观测到封装界面外的消息,而对象里面如何完成对使用者是隐藏的。即封装是让用户和程序员分开,对象的接口与实现分离。图2给出了对象的具体访问方法。

修改对象数据的唯一方法是调用它的接口(属性和方法)接口成员(公共)Balance(只读属性)Withdrawal(方法) Deposit(方法)Type(只读属性)??封装性像包在对象周围的坚硬外壳,保护对象本身。图2 对象的封装性

从所有对象以外的代码中隐含对象的数据数据项(专用)mdblBalancemingNumbermbyTypemstrCustomerName接口成员是对象内的过程,所以它们可以访问对象的数据

(4)继承:继承是类与类之间的一种基础关系,表现在类的层次关系里,不同的类共享相同的属性和操作,通过继承机制可对类分层,提供类型/子类型的关系。

(5)消息:即对象之间交流的方法,对象通过向其他对象传递信息,从而得到服务。 ADO(ActiveX数据对象)是Microsoft专门为OLEDB(对象链接和嵌入数据库)所设计的最先进、功能最完善的数据访问,也是一个易于使用的程序连接库。OLEDB能够为每一个数据源供给很高质量的访问,每一个数据源包括文字与图形、邮件与文件系统、自己定义的事务对象等。在非常重要的Internet的案例中ADO利用了极少的流量,而且在数据库中运用了极少的层数。所以,这种数据库访问技术适用于流量少、品质高的端口。

ODBC(开放式数据库互连)是微软公司开放服务结构(WOSA, Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

为了确定ODBC驱动管理系统要选择什么样的驱动程序及相应的驱动程序使用了哪种

4

数据库使用了连接字符串。连接字符串包含了一些参数,参数之间用分号隔开,这些参数被ODBC接口所定义,其作用是把与之相关的环境对象和值一起传送给ODBC API的SQL Driver Connect函数,通过该函数来实现具体数据库的连接。

流水车间调度优化系统中ODBC连接SQL Server数据库代码为: Dim con As new ADODB.Connection '建立与数据库的连接 con = \ 'ODBC连接字符串参数 con.open '打开连接

代码第1行利用ADO中的ADODB数据库组件创建一个Connnection类对象con;第2行初始化con对象,其中DSN表示ODBC数据源,可以在\控制面板\性能和维护\管理工具\数据源(ODBC)\中设置,uid表示以何种用户名登陆数据库,这里选择数据库提供的默认名\;最后一行调用Connection类的open方法打开指定数据库的连接。

3.3 SQL Server数据库编程

SQL(Structured Query Language)即结构化查询语言,其主要功能就是同各种数据库建立联系、进行沟通,例如用SQL语句更新数据库中的数据、从数据库中获取数据等。SQL被作为关系型数据库管理系统的标准语言,因此,绝大多数流行的关系型数据库管理系统,如Oracle、Sybase、Microsoft SQL Server、MySQL等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select、Insert、Update、Delete、Create以及Drop在内的标准SQL命令仍然可以被用来完成几乎所有的数据库操作。

下面简要介绍下数据库的相关知识与操作。 (1)数据库基本知识

这里介绍的数据库都是指关系数据库。关系数据库就是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。

不管表在数据库文件中的物理存储方式如何,它都可以看作一组行和列,与电子表格的行和列类似。在关系数据库中,行称为记录,列称为字段。

表中每一行是一个记录,它包含了特定对象的所有信息,而每个记录则包含了相同类型和数量的字段。

表:是一种按行与列排列的相关信息的逻辑组,类似于工作单表。

字段:数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,须为每个字段分配一个数据类型、最大长度和其它属性。字段可包含各种字符、数字甚至图形。

记录:所有字段相关的信息存放在表的行,被称为记录。一般来说,数据库表创建时任意两个记录都不能相同。

键:键就是表中的某个字段(或多个字段),可为快速检索而被索引。键可以是唯一的,也可以不唯一,取决于其是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。

关系:数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。

规范化:数据库设计者的任务就是组织数据,而组织数据的方法,应能消除不必要的重复,并为所有必要信息提供快速查找路径。为了达到这种目标而把信息分离到各种独立的表中的过程,叫作规范化。规范化使用许多指定的规则和不同级别的范式,一般数据库的规范化可通过将包含重复信息的表分成几个独立的表来消除重复。

(2)数据库的建立与访问

要建立数据库,首先需要确定要建立数据库的类型。在众多关系型数据库中,Microsoft SQL Server 2008数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使开发人员可以构建和管理高可用与高性能的数据应用程序,因此,在流水车间调度优化系统

5

中采用该数据库作为后台开发工具。

VB数据库应用程序有三个部分,用户程序是程序员开发的,即用VB来编写的部分;数据库引擎是数据库驱动程序,使用它程序员可以用统一的格式访问各种数据库,不管这个数据库是本地VB数据库还是所支持的其它任何格式的数据库,所使用的数据库编程技术都是相同的;数据库则是具体实现的部分,这里即SQL Server 2008。从这个结构可以看出用户与正在访问的特定数据库无关,因此在用VB编写数据库程序时,就可以脱离具体的数据库平台,实现程序能够访问指定的数据库。

另外,如果是简单的数据库应用,可以使用Data控件来执行大部分数据访问操作,而根本不用编写代码。与Data控件相捆绑的控件自动显示当前记录的一个或多个字段的数据,如VB的DataGrid控件。

(3)数据库查询

在SQL Server 2008中,查询窗口的设计分为两部分:查询条件和查询结果。查询条件是用户提出的查询要求,到底采用哪些查询条件,需要开发者根据用户和系统的要求进行设计,其具体实现过程大同小异;查询结果是指用户所需要的数据,它包括根据查询条件查询出来的记录,但并非表中每个字段里的数据都需要提供给用户。另外,在SQL Server数据库中,关键字是用索引实现的,在对表的记录集编程时,只需调用索引名即可。

例在本系统中要查询定单号为\、产品图号为\的定单交货日期是哪天,则可以用如下代码实现:

Dim rst as New ADODB.Recordset Dim sql as New String

sql=\Set rst = Nothing

rst. CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockPessimistic

上例中,定单号\、产品图号\即查询条件,交货日期即查询结果。执行上述SQL命令后,记录集变量rst指向数据库的字段索引rst(\即所要查询的结果。

此外,SQL Server 2008还提供了数据库表的创建、删除以及表记录的插入、删除、修改等功能,这些都可在VB中通过相应的SQL语句来实现,具体过程与查询操作大致相同,故不详述。

6

第4章 总体设计

4.1 系统流程图

系统首先从登陆对话框开始,用户输入用户名、密码信息后,系统会验证信息是否正确,若验证通过则会启动欢迎对话框,系统在后台加载资源,否则弹出登陆失败对话框。用户成功进入主界面后,可通过点击各种菜单选项调用相应模块来完成指定功能。详细的数据流程图如图3所示:

登陆返回错误信息登陆失败输入用户信息验证模块查询返回SQL Server 数据库登陆成功系统载入资源查询、添加、修改、删除作业结果回返SQL Server 数据库启动欢迎界面系统准备就绪作业管理模块主界面菜单选项菜单选项菜单选项菜单选项退出返回结果获取作业数据作业作业调度模块分配作业拆分信息作业排序作业分配算法优化模块查询历史统计结果加工信息作业加工数据SQL Server 数据库统计模块优化结果报表、图像

图3 系统详细数据流程图

4.2 系统功能划分

为了给用户一个清晰直观的系统认识,本系统功能模块框图如图4所示。

流水车间调度优化系统作业管理统计窗口帮助退出作业信息管理作业拆解与排序作业分配与优化水平平铺垂直平铺层叠排列图标关于本系统 图4 系统功能架构图

7

4.3 系统界面设计

根据4.2节系统功能图设计相应的系统界面,如图5(a)所示。主界面包含作业管理、统计、窗口、帮助、退出五个菜单,其中一些菜单包含子菜单,如图5(b)~(d)所示。

(a)主窗口

(b)“作业管理”菜单

(c)“窗口”菜单

(d)“帮助”菜单 图5 系统主界面

8

第5章 数据库设计

根据在总体设计阶段确定的系统数据流图及各模块功能,数据库设计阶段包含实体E-R图的设计及数据库表的设计,即在E-R图基础上设计相应的数据库表以实现数据存储功能。

5.1 数据流图

流水车间调度优化系统用户需先登录,进入主界面后可以进行定单信息的增添、查询、修改和删除。数据库中有了定单信息后,用户可以对某些定单进行排序、拆分、分配设备及优化。另外,用户可以将设备负荷详细信息导出报表生成文档以便查看,同时也可以对已经完成加工的作业进行统计,生成统计图方便查看作业完成情况,具体数据流图如图6所示。

用户登录验证通过作业管理添加查询修改删除作业调度统计统计结果查询历史加工情况历史加工数据统计图报表文档导出报表作业信息订单信息拆分排序分配优化信息录入

图6 数据流图

5.2 实体及E-R图

根据需求分析可列出本系统中的实体有:用户表、设备表、产品清单表、作业工序表、定单表、报表、每日计划表、设备负荷表和统计表。各实体的E-R图如下(表的字段斜体加下划线的表示主码)。

(1)用户表(用户名,密码,用户权限)

用户表用户名密码权限

图7 用户表

(2)设备表(设备号,设备名称,工序名称,占用时间)

设备表设备号设备名称工序名称占用时间

图8 设备表

9

(3)产品清单表(产品图号,零件号,产品名称,零件名称,拆分数量)

产品清单表产品图号产品名称零件号零件名称拆分数量

图9 产品清单表

(4)作业工序表(作业号,工序号,作业名称,工序名称)

作业工序表作业号工序名称作业名称工序号

图10 作业工序表

(5)定单表(定单号,产品图号,产品名称,产品数量,收货日期,交货日期,是否加入计划,备注)

定单表定单号备注是否加入计划产品名称产品数量收货日期交货日期产品图号

图11 定单表

(6)报表(定单号,设备名称,产品名称,零件名称,数量,总耗时,制表人,制表日期)

报表定单号设备名称产品名称零件名称总耗时数量制表日期制表人

图12 报表

(7)每日计划表(定单号,产品图号,设备号,作业号,数量,计划日期)

10

每日计划表定单号产品图号数量设备号作业号计划日期

图13 每日计划表

(8)设备负荷表(定单号,设备号,产品图号,作业号,作业数量,工序号,总耗时,启动点,停机点)

设备负荷表定单号停机点设备号产品图号作业号作业数量工序号总耗时启动点

图14 机器/设备负荷表

(9)统计表(日期,年,月,日,总数)

统计表日期年月图15 统计表

总数日

5.3 数据库表设计

流水车间平台数据库主要包含9张表,分别是用户表、设备表、产品清单表、作业工序表、定单表、报表、每日计划表、机器/设备负荷表和统计表。其中用户表、设备表、产品清单表和作业工序表为基本表,定单表为输入表,报表、机器/设备负荷表和统计为输出表,每日计划表为中间表。各表的具体字段定义如表1至表9所示。

表1 用户表-字段名表 宽度 20 20 1 11

表名:account 字段名 username passwd power 数据类型 nvarchar nvarchar char 说明 用户名 用户密码 权限(管理员/普通用户) 表2 设备表-字段名表 宽度 20 20 50 8 说明 设备号 表名:t_machine 字段名 deviceno devicename processname timeoccupy

数据类型 nvarchar nvarchar nvarchar float 设备名称 工序名称 占用时间 表名:t_billofmaterial 表3 产品清单表-字段名表 宽度 20 20 20 20 4 说明 字段名 drawingno productname partno partname groups 字段名 jobno jobname processno processname 字段名 ordercode drawingno productname quantity acceptdate senddate added note 数据类型 nvarchar nvarchar nvarchar nvarchar int 产品图号 产品名称 零件号 零件名称 拆分数量 表名:t_jobprocess 表4 作业工序表-字段名表 宽度 20 50 4 20 说明 作业号 作业名称 工序号 工序名称 数据类型 nvarchar nvarchar int nvarchar 表5 定单表-字段名表 宽度 20 20 20 4 15 15 2 10 表6 报表-字段名表 宽度 20 20 20 20 4 4 10 15 说明 表名:t_order 数据类型 nvarchar nvarchar nvarchar int nchar nchar nchar nvarchar 定单号 产品图号 产品名称 产品数量 收货日期 交货日期 是否加入计划 备注 说明 定单号 设备名称 产品名称 零件名称 数量 总耗时 制表人 制表时间

表名:t_daytaskplan 表名:t_report 字段名 ordercode devicename productname partname quantity totaltime maker makedate

数据类型 nvarchar nvarchar nvarchar nvarchar int int nvarchar nchar

表7 每日计划表-字段名表

12

字段名 ordercode drawingno quantity deviceno jobno plandate 数据类型 nvarchar nvarchar int nvarchar nvarchar nchar 宽度 20 20 4 20 20 15 说明 定单号 产品图号 数量 设备号 作业号 计划日期 表名:t_machineload 表8 设备负荷表-字段名表 宽度 20 20 20 20 4 4 4 4 4 说明 定单号 设备号 产品图号 作业号 作业数量 工序号 总耗时 启动点 停机点 字段名 ordercode deviceno drawingno jobno jobs processno totaltime start stop 字段名 plandate year month day totalnum 数据类型 nvarchar nvarchar nvarchar nvarchar int int int int int 表9 统计表-字段名表 宽度 15 4 2 2 4 说明 日期 年 月 日 总数 表名:t_statis 数据类型 nchar int smallint smallint int 5.4 数据库及表的建立与实现

本系统选用的是SQL Server 2008数据库软件,则建立系统数据库及表的具体步骤如下: (1)单击数据库控制台根目录\本机数据库服务器名)→\数据库\,在\数据库\上右键\新建数据库\菜单命令,在弹出对话框中输入\车间平台\,确定后,系统会在当前目录下添加用户命名的数据库,如图16所示;

13

图16 新建“车间平台”数据库

(2)在展开的\车间平台\数据库下右键\表\项,选择新建表,弹出新建表设计界面,按照5.3节设计的数据库表的字段信息逐列添加,并在完成后设置表的主键信息,如图17所示(以account表为例)。

图17 新表设计界面

单击保存按钮,输入新表名称,如\,即可完成一张表的设计;

(3)重复步骤(2)即可依次添加上述另外8张表,从而完成全部表的创建过程,在此不再详细赘述,结果如图18所示(表的前缀均为dbo.)。

14

图18 系统全部表界面

15

第6章 用户登陆模块设计

流水车间调度优化系统中的用户登录模块是系统的入口模块,主要完成用户身份验证的任务。

6.1 登陆模块功能概述

登录模块主要实现用户身份的验证,验证通过则进入系统主界面,否则提示错误,此时用户需按照提示重新输入信息,再次验证。不同用户可以设置不同权限,作为管理员用户权限最大,这样对系统安全起到一定的保护作用。

6.2 功能模块设计

首先用户输入用户名和密码信息,系统获取数据后连接数据库,查询数据库中的用户表进行身份验证,如果用户输入信息与数据库中信息匹配则验证通过,否则系统提示用户名不存在或密码错误信息。登陆流程图如图19所示。

开始登陆输入用户名与密码否用户名正确否是否密码正确否是系统显示欢迎界面否系统准备就绪是显示主界面结束

图19 用户登录模块流程图

6.3 编程实现及界面设计

主要代码:

Private Sub Form_Load()

txtUserName.Text = \张三\ txtPassword.Text = \End Sub

Private Sub CmdCancel_Click()

If con.State <> 0 Then con.Close

16

End End Sub

Private Sub cmdOK_Click()

Dim sql As String, rs As New ADODB.Recordset '测试用户名是否正确

If Trim$(txtUserName) = \

MsgBox \用户名不能为空!\ txtUserName.SetFocus Exit Sub End If

On Error Resume Next

sql = \ Set rs = Nothing

rs.CursorLocation = adUseClient

rs.Open sql, con, adOpenKeyset, adLockPessimistic If rs.RecordCount = 0 Then

MsgBox \用户名不存在!\ Else

'测试密码是否正确

If txtPassword.Text = Trim$(rs(\ '普通用户模式

If Trim$(rs(\ CurrentUser = Trim$(txtUserName) Unload Me

MsgBox \欢迎您,\!\ frmSplash.Show Else

MsgBox \密码错误!\ txtPassword.Text = \ txtPassword.SetFocus End If End If

rs.Close '关闭与数据库的连接 End Sub

Private Sub txtPassword_Click() txtPassword.SelStart = 0

txtPassword.SelLength = Len(txtPassword.Text) End Sub

Private Sub txtUserName_Click() txtUserName.SelStart = 0

txtUserName.SelLength = Len(txtPassword.Text) End Sub

系统运行后,首先出现登陆界面,如图20所示。

17

图20 用户登录界面

用户通过验证后,系统启动欢迎界面,其代码为: Private Sub Form_Load()

lblVersion.Caption = lblVersion.Caption & App.Major & \App.Revision End Sub

Private Sub Timer1_Timer()

Dim pgValue As Integer, i As Integer pgValue = ProgressBar1.Value

If pgValue < ProgressBar1.Max And MainForm.StatusBar1.Panels.Item(2).Text = \ ProgressBar1.Value = pgValue + 1 Else

Unload Me

MainForm.Show End If End Sub

欢迎界面如图21所示。

图21 欢迎界面

系统加载资源完毕后就会进入主界面,说明用户已成功登陆系统,此时可以选择相关菜单进行作业处理。

18

第7章 作业信息管理模块设计

作业信息管理模块是流水车间调度优化系统中的一个基础模块,主要实现定单信息的添加、查询、修改和删除等功能。

7.1 作业信息管理模块功能概述

作业信息管理主要包括作业的查询、修改、添加与删除,用户单击相应按钮即操作数据库中相关表,实现定单的录入与维护。

(1)添加定单信息

当一批新定单来临时,操作员需将其逐条录入到后台数据库,完成添加操作。 (2)查询定单信息

若操作员想查看某条或某些定单详细信息,可输入部分字段或全部字段信息进行模糊或精确查询。

(3)修改定单信息

若某条定单信息输入有误或者客户更改了定单某些信息,首先需要查询到原始输入的定单记录,然后对其信息进行修改。

(4)删除定单信息

因客户需求变化或其他要求,需要删除定单表中的某些信息,只需要先查询出相应定单记录,然后将其选中删除即可。

7.2 功能模块设计

作业信息管理模块界面主要由定单信息、定单操作、定单表构成。针对用户的不同操作,实现不同的功能,即添加、查询、修改、删除。具体流程图如图22(a)~(d)所示。

开始输入定单信息数据库存在该定单记录否是插入该条记录显示该定单结束(a)添加定单

19

开始选择定单号选择产品图号选择交货日期数据库查找该记录是否存在否是显示该定单结束 (b)查询定单

开始输入定单信息数据库查找该记录是否存在是更新该定单否结束

(c)更新定单

开始选择定单数据库查找该记录是否存在是删除该定单否结束(d)删除定单 图22 定单操作信息流程图

7.3 编程实现及界面设计

主要代码:

20

Dim sql As String, click As Boolean Dim rs As New ADODB.Recordset Dim rst As New ADODB.Recordset

Public Function testEmpty() As Boolean If Trim(txtorder) = \

MsgBox \定单号不能为空!\ testEmpty = True Exit Function End If

If Trim(combodrawingno) = \

MsgBox \产品图号不能为空!\ testEmpty = True Exit Function End If

If Trim(txtamount) = \

MsgBox \数量不能为空!\ testEmpty = True Exit Function End If End Function

Public Function testInput() As Boolean Dim ctrl As Control testInput = False

For Each ctrl In Me.Controls

If (TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox) Then If ctrl.Text <> \ testInput = True Exit For End If End If Next ctrl End Function

Public Function clear()

On Error Resume Next Dim ctrl As Control

For Each ctrl In Me.Controls ctrl.Text = \ Next ctrl End Function

Private Sub cmd_add_Click()

21

If testEmpty = True Then Exit Sub click = False

On Error GoTo errhealer Set rst = Nothing

sql = \* from t_order where ordercode='\& Trim(txtorder) & \and drawingno='\ rst.CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockPessimistic If rst.RecordCount <> 0 Then

MsgBox \此定单已经输入,请重新操作!\ Exit Sub End If

If MsgBox(\确认数据正确吗?\

If DateDiff(\ MsgBox \日期无效!\ Exit Sub End If

rs.AddNew

rs(\

rs(\ rs(\ rs(\ rs(\ rs(\ rs(\否\

rs(\ rs.Update

MsgBox \添加定单信息成功!\ Call clear End If Exit Sub errhealer:

MsgBox Err.Description, vbCritical rs.CancelUpdate Err.clear End Sub

Private Sub cmd_renew_Click() On Error GoTo errhealer

If testEmpty = True Then Exit Sub

If MsgBox(\确认数据正确吗?\

If (Trim(rs(\<> Trim(txtorder)) Or (Trim(rs(\<> Trim(combodrawingno)) Then

Set rst = Nothing

22

sql = \and drawingno='\

rst.CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockPessimistic If rst.RecordCount <> 0 Then

MsgBox \此定单已经输入,请重新操作!\ Exit Sub End If Else

rs(\

rs(\ End If

rs(\ rs(\ rs(\ rs(\ rs(\否\

rs(\ rs.Update

MsgBox \修改成功!\ Call clear Else

rs.CancelUpdate End If Exit Sub errhealer:

MsgBox Err.Description, vbCritical rs.CancelUpdate Err.clear End Sub

Private Sub cmd_delete_Click() On Error GoTo errhealer

If testEmpty = True Then Exit Sub

If MsgBox(\确认删除该条纪录吗?\ click = False rs.Delete

MsgBox \删除成功!\ DoEvents Call clear End If Exit Sub errhealer:

MsgBox Err.Description, vbCritical

23

rs.CancelUpdate Err.clear End Sub

Private Sub cmd_query_Click() On Error Resume Next

Dim buf As String

sql = \ buf = Trim(txtorder) If buf <> \

sql = sql & \ ordercode= '\ buf = Trim(combodrawingno) If buf <> \

sql = sql & \ End If Else

buf = Trim(combodrawingno) If buf <> \

sql = sql & \ Else

buf = CStr(DTSend.Month) & \& CStr(DTSend.Day) & \& CStr(DTSend.Year)

sql = sql & \ End If End If

Set rst = Nothing

rst.CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockPessimistic If rst.RecordCount <> 0 Then

Set DataGrid1.DataSource = rst DataGrid1.Refresh

Call initial(DataGrid1, \定单表\ Call fillgrid(DataGrid1) Else

MsgBox \对不起,找不到相应的记录!\ End If End Sub

Private Sub cmd_exit_Click()

If rs.State <> adStateClosed Then Set rs = Nothing If rst.State <> adStateClosed Then Set rst = Nothing Unload Me End Sub

24

Private Sub cmd_show_Click() Set rs = Nothing

rs.CursorLocation = adUseClient

rs.Open \ If rs.RecordCount <> 0 Then

Set DataGrid1.DataSource = rs DataGrid1.Refresh

Call initial(DataGrid1, \定单表\ Call fillgrid(DataGrid1) Else

MsgBox \当前暂无定单!\ End If End Sub

Private Sub form_unload(cancel As Integer) Unload Me End Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim lr As Integer

'若没有点击DataGrid控件而引起rs的bookmark变化,则退出 If Not click Then Exit Sub If Not IsNull(LastRow) Then lr = Val(LastRow) - 1

If lr <> DataGrid1.Row And lr > -1 Then 'MsgBox \ txtorder = rs(\

combodrawingno = rs(\ txtproductname = rs(\ txtamount = rs(\

DTRecv.Value = rs(\ DTSend.Value = rs(\ cmbnote = rs(\ End If End If End Sub

Private Sub DataGrid1_Click() click = True

If rs.RecordCount <> 0 And testInput = False Then txtorder = rs(\

combodrawingno = rs(\ txtproductname = rs(\ txtamount = rs(\

DTRecv.Value = rs(\ DTSend.Value = rs(\

25

cmbnote = rs(\ End If End Sub

Private Sub CmdClear_Click() '清除控件数据 Call clear End Sub

Private Sub Form_Load() On Error GoTo errhandle Dim i As Integer

DTRecv.Value = Date DTSend.Value = Date

'Call ResizeInit(Me) '初始化控件尺寸与位置 Set rs = Nothing

rs.CursorLocation = adUseClient

rs.Open \ Set DataGrid1.DataSource = rs DataGrid1.Refresh

Call initial(DataGrid1, \定单表\ Call fillgrid(DataGrid1) Set rst = Nothing

sql = \ rst.CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockOptimistic If rst.RecordCount <> 0 Then rst.MoveFirst

For i = 0 To rst.RecordCount - 1

combodrawingno.AddItem Trim$(rst(\ rst.MoveNext Next End If

cmbnote.AddItem \紧急\ Exit Sub errhandle:

MsgBox Err.Description, vbCritical End Sub

Private Sub txtamount_Change() If txtamount = \ If IsNumeric(txtamount.Text) Then If txtamount.Text < 1 Then

MsgBox \数量不能为0或负值!\ txtamount = \

26

End If Else

MsgBox \请输入一个正数!\ txtamount = \ End If End Sub

Private Sub combodrawingno_Click() Set rst = Nothing

sql = \productname from t_billofmaterial where drawingno='\& Trim(combodrawingno) & \

rst.CursorLocation = adUseClient

rst.Open sql, con, adOpenKeyset, adLockOptimistic If rst.RecordCount <> 0 Then

txtproductname = Trim$(rst(\ Else

MsgBox \没有与此图号对应的产品!\ End If End Sub

单击“作业管理”菜单下的“作业信息管理”,弹出图23所示对话框。用户可根据需要选择相应操作。

图23 作业信息管理界面

27

第8章 作业调度管理模块设计

作业调度管理模块是流水车间调度优化系统的核心模块,主要完成对定单表中作业拆解、排序及设备分配功能。

8.1 作业调度管理模块功能概述

(1)作业拆零

用户可以按不同的加工规则(如紧急任务、当天交货日期等)或定单号查询,从而对查询的作业进行拆零。

(2)作业排序

对已经拆零的作业可以按不同的调度规则(如工序数量、加工时长等)进行排序。 (3)设备分配

对欲加工的作业需进行设备分配。

8.2 功能模块设计

(1)作业拆零

作业拆零流程图如图24所示。

开始选择查询方式按当天交货日期按订单号按紧急任务搜索数据库记录是否存在是作业拆零否显示拆零结果结束图24 作业拆零流程图

(2)作业排序

作业排序流程图如图25所示。

28

开始查询是否存在要加工零件是选择排序方式按总加工时间升/降序按零件数量 升/降序按加工时间标准差升/降序否在数据库上建立相应聚簇索引显示排序结果结束图25 作业排序流程图

(3)作业分配

作业分配流程图如图26所示。

开始查询是否存在要加工零件是查询是否存在可用设备是将作业分配到设备上否结束

图26 作业分配流程图

8.3 编程实现及界面设计

8.3.1 作业拆解与排序

主要代码:

'将定单作业计划拆解为具体的零件计划 Private Sub cmdDivide_Click() On Error GoTo errhealer

29

Dim i As Integer, partamount As Integer, a() As Single Dim rsm As New ADODB.Recordset '原材料表 Dim rsj As New ADODB.Recordset '作业工序表 Dim del As New ADODB.Connection If rs.RecordCount = 0 Then

cmdDivide.Enabled = False Exit Sub End If

Screen.MousePointer = vbHourglass '首先清空零件计划表旧数据 del.Open CStr(con)

del.Execute \ from t_genpartplan \ del.Close

Set rsp = Nothing

rsp.CursorLocation = adUseClient

rsp.Open \ rs.MoveFirst Do Until rs.EOF

sql = \partno,groups from t_billofmaterial where drawingno='\& Trim$(rs(\

Set rsm = Nothing

rsm.CursorLocation = adUseClient

rsm.Open sql, con, adOpenKeyset, adLockPessimistic If rsm.RecordCount <> 0 Then rsm.MoveFirst Do Until rsm.EOF

partamount = CInt(rs(\

sql = \ Set rsj = Nothing

rsj.CursorLocation = adUseClient

rsj.Open sql, con, adOpenKeyset, adLockPessimistic If rsj.RecordCount <> 0 Then rsj.MoveFirst rsp.AddNew

rsp(\ rsp(\ rsp(\ rsp(\

rsp(\ rsp(\ rsp(\ rs(\是\

ReDim a(rsj.RecordCount)

For i = 0 To rsj.RecordCount - 1

sql = \* from t_machine where processname='\& Trim(rsj(\

30

Set rsd = Nothing

rsd.CursorLocation = adUseClient

rsd.Open sql, con, adOpenKeyset, adLockPessimistic If rsd.RecordCount <> 0 Then rsd.MoveFirst a(i) = CSng(rsd(\ rsj.MoveNext Next i

rsp(\ rsp(\ rsp.Update rsm.MoveNext Loop

rs.MoveNext Loop

Set DataGrid2.DataSource = rsp Call fillgrid(DataGrid2)

Call initial(DataGrid2, \零件计划表\ DataGrid2.Caption = \零件计划表\ DataGrid2.Refresh

Screen.MousePointer = vbDefault SSTab1.Tab = 1

MsgBox \拆零成功!\ Exit Sub errhealer:

MsgBox Err.Description, vbCritical rsp.CancelUpdate Err.clear End Sub

'对生成的零件计划进行初排序 Private Sub cmdDdpx_Click() On Error GoTo errhealer

Dim t_sql As String

Dim dropindex As New ADODB.Connection If cmbDdgz.Text = \

MsgBox \规则不能为空!\ cmbDdgz.SetFocus Exit Sub End If

t_sql = \t_genpartplan.part_index\

dropindex.Open \ dropindex.Execute t_sql dropindex.Close

Select Case cmbDdgz.ListIndex

31

Case 0

sql = \CLUSTERED INDEX part_index ON t_genpartplan(sumtime desc)\ Case 1

sql = \CLUSTERED INDEX part_index ON t_genpartplan(sumtime asc)\ Case 2

sql = \CLUSTERED INDEX part_index ON t_genpartplan(deviate desc)\ Case 3

sql = \CLUSTERED INDEX part_index ON t_genpartplan(deviate asc)\ Case 4

sql = \CLUSTERED INDEX part_index ON t_genpartplan(planquantity desc)\ Case 5

sql = \CLUSTERED INDEX part_index ON t_genpartplan(planquantity asc)\ Case 6

sql = \CLUSTERED INDEX part_index ON t_genpartplan(procnumber desc)\ Case 7

sql = \CLUSTERED INDEX part_index ON t_genpartplan(procnumber asc)\ End Select

Set rsp = Nothing

rsp.CursorLocation = adUseClient

rsp.Open sql, con, adOpenKeyset, adLockPessimistic Set rsp = Nothing

rsp.CursorLocation = adUseClient

rsp.Open \ Set DataGrid2.DataSource = rsp Call fillgrid(DataGrid2)

Call initial(DataGrid2, \零件计划表\ DataGrid2.Refresh Exit Sub errhealer:

MsgBox Err.Description, vbCritical Err.clear End Sub

单击“作业拆解与排序”菜单,可以按照加工规则或定单号查询,例如:按紧急任务查询,弹出图27所示对话框。

32

图27 作业拆解与排序窗体

单击“作业拆零”按钮,系统将自动实现对作业的拆解工作,结果如图28所示。

图28 作业拆解成功界面

8.3.2 作业分配与优化

主要代码:

'将零件分配到设备上

Private Sub cmdAssign_Click() On Error GoTo errhealer

Dim rsd As New ADODB.Recordset '设备描述表 Dim rsp As New ADODB.Recordset '零件计划表

33

Dim del As New ADODB.Connection Dim i As Integer

Screen.MousePointer = vbHourglass del.Open \

del.Execute \ del.Close

Set rsl = Nothing

rsl.CursorLocation = adUseClient

rsl.Open \ If rsl.RecordCount <> 0 Then rsl.MoveFirst Set rsp = Nothing

rsp.CursorLocation = adUseClient

rsp.Open \ If rsp.RecordCount = 0 Then

MsgBox \暂无零件可分配!\ Exit Sub End If

rsp.MoveFirst Do Until rsp.EOF sql = \* from t_machine,t_jobprocess where t_machine.processname=t_jobprocess.processname\

\ Set rsd = Nothing

rsd.CursorLocation = adUseClient

rsd.Open sql, con, adOpenDynamic, adLockOptimistic If rsd.RecordCount <> 0 Then rsd.MoveFirst Do Until rsd.EOF rsl.AddNew

rsl(\ rsl(\ rsl(\ rsl(\ rsl(\ rsl(\ rsl(\= CSng(rsd(\* CInt(rsp(\

rsl.Update rsd.MoveNext Loop

rsp.MoveNext Loop

sql = \ Set rsl = Nothing

rsl.CursorLocation = adUseClient

34

rsl.Open sql, con, adOpenKeyset, adLockPessimistic Set DataGrid1.DataSource = rsl Call fillgrid(DataGrid1)

Call initial(DataGrid1, \设备负荷表\ DataGrid1.Refresh

MsgBox \分配成功!\ Screen.MousePointer = vbDefault Exit Sub errhealer:

MsgBox Err.Description, vbCritical rsl.CancelUpdate Err.clear End Sub

单击“作业分配与优化”菜单,单击“设备分派”按钮,结果图29所示(已成功将作业分配到相应设备上)。

图29 设备分配成功界面

35

第9章 算法优化模块设计

9.1 算法优化模块功能概述

当作业全部被分配到设备上,就可对每台设备上的作业进行优化排列以降低设备总负荷时间。

优化操作采用一种新颖的遗传算法,包括种群编码、初始化、选择、交叉、变异、解码、更新等几个阶段。每次优化完成后将所得结果与父代数据相比较,根据\优胜劣汰”规则生成子代以完成一次进化。算法经过指定的次数后停止,输出全局最优解及适应值,即每台加工设备的最佳作业顺序和对应总负荷时间。

9.2 算法设计

新颖的算法设计流程图如图30所示。

开始是否存在零件信息是否存在空闲设备输入种群参数值种群编码初始化种群选择操作满足交叉概率是否交叉操作否满足变异概率是否否变异操作种群解码是否优于父代种群是否更新种群满足停止条件是结束

图30 遗传算法程序流图

36

9.3 编程实现及界面设计

算法主要源代码如下: '遗传优化算法

Public Function IGA()

Dim i As Integer, j As Integer, k As Integer, iter As Integer Dim imax As Single, f0 As Double, bestfit As Single '初始化

Call initialize '生成初始种群 Call popsize(ss)

bestfit = 0 '初始化最优适值 iter = 1 '第1代开始 Do Until iter > dd

'计算种群的适值 Call translate(p())

'计算自适应变异概率

f0 = 1 - 1# * dd / (dd + 1 - k) f0 = Exp(f0)

pm = pm * (10 ^ f0) For i = 1 To ss - 1 Step 2 '选择操作 Call elitesel(i) '交叉操作

Call crossover(i) '变异操作

Call mutation(i) Next i

For i = 1 To ss

'对每个染色体解码 Call ft(i, pg()) '计算其适应度

imax = mach(1, min(1)).stop For j = 2 To mm

If imax < mach(j, min(j)).stop Then imax = mach(j, min(j)).stop Next j

f(i) = 1# / imax

'选出适值最大的染色体 If bestfit < f(i) Then bestfit = f(i)

'保存到最优解中 For j = 1 To mm For k = 1 To hh

bestsol(j, k).gx = mach(j, k).gx

37

本文来源:https://www.bwwdw.com/article/0hg3.html

Top