离散型企业智能作业控制方法

文档序号:6380360阅读:375来源:国知局
专利名称:离散型企业智能作业控制方法
技术领域
本发明属于智能作业控制技术,特别是一种离散型企业智能作业控制方法。
背景技术
现代企业必须提升生产控制水平,才能提高生产率,确保履约率。提升企业的生产效率有四种方式引进先进的生产设备、改进加工方法、提高作业人员的生产水平和提升生产控制水平。我国很多企业引入ERP系统,还有一些企业自行研发企业生产管理系统。它们都是采用自上而下的管理方式。在制定生产计划,组织生产以及产成品、半成品入库方面,实现了管理流程信息化。
在离散型企业内部,面对多种具有不固定级级数的从属关系的产品和具有一定先后顺序的装配部件,多采用把产品作为一种项目,把产品里的部件,子部件,最终器件、零件、部件同级化处理,人工拆分为项目的子项目平等对待的方法。人工拆分需要化大量时间,拆分的结果专门针对特定的模型,不具备通用性。单品种大批大量生产方式经常采用流水线方式来达到均衡的生产目的。其特点是事先设计好生产节拍和生产线。对多品种小批量的生产方式,采用传统的流水线生产方式,生产能力不能有效控制,生产节拍经常变化,生产线频繁搬迁需要化大量的人力物力。目前许多企业生产现场大多处于非完全控制状态。生产现场的盲目性,随意性非常大,生产控制手段匮乏,目视管理缺失,信息不能很好地公开,与生产准时化要求相距甚远,质量过程控制不能很好地保证,生产潜在的问题不能及时发现,工作效率不能有效地提闻。我国的一些企业对生产管理多采用现场安排、手工记,录方式。重复劳动多,生产数据没有积累。生产计划滞后,生产安排随意性大,生产进度不确定性因素多,信息断层。发达国家和世界级企业,特别注重基于时间研究基础上的科学管理,注意到作业时间的研究。对多品种小批量的生产方式,随着产品技术含量不断增加,作业改进永无止境,通常采用的理想化的测量数据需要大量的人力和物力的投入。作业过程中偶然因素时有发生,测量结果会相差很大。对以盈利和履约为目的的离散型企业,专门的时间测量在生产控制中更具有示范性,可操作性不强。

发明内容
本发明的目的提供一种离散型企业智能作业控制方法,能够提升企业快速响应能力,提高产品质量和生产率,确保履约率。实现本发明目的的技术方案为一种离散型企业智能作业控制方法,其特征在于对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树;按相似性分成钳装、装擦、电装、电调、总校、联调、装箱、装外八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟,计算生产能力初定各工序单元工位数;在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素,控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找部件装配的最佳路径;该最佳路径以甘特图方式实时显示控制现场作业;作业开工勾选调用作业指导书进行作业和作业进程返馈,从而实现离散型企业智能的作业控制。本发明与现有技术相比,其显著优点为(I)构建产品结构树。产品的从属关系级数不固定,子部件零部件的数量也不固定。针对产品不固定级数从属关系的内在规律作专门研究,找出具备这类不固定级数从属关系特性的产品的通用规律,采用不固定嵌套循环层数和数组的方法进行多种具有不固定子部件级数的产品结构树显示,以便快速读懂产品结构和产品框架,实现产品同步化。(2)计算生产能力,并调配正常上班时间各工序单元工位数和加班时间各工序单元工位数。针对多品种小批量生产方式节奏快,批量小,路线存在区别的特点,将装配工艺根据相似性进行分类,分为钳装、装擦、电装、电调、总校、联调、装箱、装外八个工序单元,计 算各工序单元的生产能力,调配正常上班时间各工序单元工位数和加班时间各工序单元工位数。作业指导书根据八种装配工序单元分为钳装、装擦、电装、电调、总校、联调、装箱、装外八类,通过改变多能工密码类型的方式同步自动控制该多能工显馈终端的作业指导书的类型。用技术手段保证了削峰填谷,消除生产瓶颈,达到均衡生产的目的,实现生产均衡化。(3)在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种实战因素情况下,自动寻找具有不固定级数从属关系的产品的部件装配最佳路径。生产中最大的浪费是等待的浪费。通过自动寻找部件装配的最佳路径,能最大程度消除过量生产、等待时间、运输、库存、过程、动作、产品缺陷等浪费,缩短产品制造周期,提高生产效率,适应现代企业多品种小批量的生产需求,提升离散型企业的快速响应能力,提高全员生产率,实现响应快速化。(4)以甘特图方式实时显示最佳路径。以甘特图方式显示最佳路径是有技术支撑的一种目视管理方式,是看板和网络的完美接合。它以视觉信号显示为手段,以信息公开为原则,是实现生产自动化、准时化的有力保证,能切实提高质量过程控制,发挥激励和协调作用,产生良好的心理和生理效应,直观地显示生产潜在的问题。还能充分发挥网络信息传输快速、及时和协同作战的优势。有利于工作效率的提高,实现信息目视化。(5)作业开工勾选调用作业指导书进行作业和作业进程返馈。在作业开工勾选后,作业人员显馈终端出现作业指导书。作业进程返馈确认作业完成。用作业指导代替纸质装配工艺和随意操作;用科学的数据积累代替理想化的时间测量和随意估算。将作业的时间数据实时积累,同时与自动寻找到的部件装配的最佳路径相关连,可以将生产率的提高落到实处,实现数据实战化。下面结合附图对本发明作进一步详细描述。


图I是本发明离散型企业智能作业控制方法的结构图。图中实线表示正向产生,虚线表示反向产生;实框线表示采集的信息或生成的最终信息,虚框线表示生成的中间信肩、O图2是实现离散型企业智能作业控制方法的硬件配置图。本发明的方法采用C/S结构,通过组建局域网运行;数据存放在服务器端,客户端根据作用分为采集终端、控制终端、显馈终端。采集终端的作用是采集实现本发明方法所需的数据,控制终端的作用是调整和控制本发明方法的数据,显馈终端的作用是显示最佳路径和反馈作业进程。采集终端、控制终端、显馈终端均通过网线和服务器进行数 据交换,并将数据存放在服务器中。
具体实施例方式结合图I和图2,本发明离散型企业智能作业控制方法,首先对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树;并按相似性分成钳装、装擦、电装、电调、总校、联调、装箱、装外八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟,计算生产能力初定各工序单元工位数;在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素,控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找部件装配的最佳路径;该最佳路径以甘特图方式实时显示控制现场作业;作业开工勾选调用作业指导书进行作业和作业进程返馈,从而实现离散型企业智能的作业控制。具体内容如下。一、构建产品结构树⑴注释I)本发明中,如果产品的A部件从属于B部件,称B部件和A部件之间就存在一级从属关系,A部件为B部件的一级子部件,B部件为A部件的父部件;如果A部件属于B部件的一级子部件,那么B部件和A部件之间就存在二级从属关系,A部件为B部件的二级子部件;本发明研究的产品对象的从属关系的级数是不相同,不固定的,本发明中将这类具有不相同或不固定的从属子部件的产品称为具有不固定子部件级数的产品;2)本发明中,如果A循环放在B循环里,称B循环和A循环组成二层循环,A循环为内层循环,B循环称为外层循环;如果A循环放在B循环里,B循环又放在C循环,称C循环、B循环、A循环组成三层循环;对于不固定子部件级数的产品,设置与之对应的循环的层数具有不固定性和不确定性,称为不固定嵌套循环层数;3)本发明中所说的产品结构树,指用如同计算机资源管理器的文件目录一样,以树形视图的方式来表达部件具有从属关系的产品明细表,其中产品的每个零部件、器件在树形视图中显示时称为列表项,树形视图中表达每个零部件、器件的名称的文字称为列表项的显示文本;4)树形视图只能通过编辑才能增加和删除数据项,一层、二层或三层等固定层树形视图的构建方法已经成熟,本发明研究的是对不固定子部件级数的产品构建不固定层的树形视图的方法;5)本发明中与具有从属关系的产品的父部件、子部件相对应的树形视图表达父节点和子节点的显示文本称为父项和子项;6)产品明细表含产品代号、部件代号、部件名称、单台数、关重性、所属产品、所属部件、配套工序和备注九个字段;(2 )产品明细表数据导入产品明细表反映了产品从属关系,借助TrueTable软件,将DWG格式文件生成文本文件,将文本文件导入软件的产品明细表;(3)利用导入的产品明细表通过对不固定子部件级数的产品采用不固定嵌套循环层数和数组的方法构建产品结构树tv_pst,步骤如下I)将产品明细表按产品代号cpdh、部件代号ljdh、所属产品zee、所属部件zeb字段升序排序;2)测试产品明细表的记录数,记作变量li_row ;3)判断产品明细表有没有记录,如果li_row=0,表示产品明细表没有记录,退出本步骤,如果li_row>0,表示产品明细表有记录;读取第一条记录的产品代号cpdh,部件代号ljdh,所属产品zee,所属部件zeb,树形视图列表项子项显示文本赋值; 4)设置变量内层循环层数 int i,数组 string zee[20], zeb[20], li_row[20];5)将产品明细表按zee,zeb字段过滤,得到所有子部件;6)赋值i=l,测试所有子部件的记录数,记作li_row[i];7)判断子部件有没有记录,如果li_row[i]=0,表示没有子部件,那么添加树形视图列表项,此列表项前没有子项不加“ + ”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录部件的产品代号cpdh,部件代号ljdh,所属产品zee,所属部件zeb,树形视图列表项显示文本赋值;重复步骤5)、6)、7);如果li_row[i]>0,表示第一条记录部件有子部件,那么添加树形视图列表项;此列表项前有子项加“ + ”号;读取子部件的第一条记录的产品代号cpdh,部件代号ljdh,所属产品ZCC [i],所属部件zeb [i],树形视图列表项子项显示文本赋值;8)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件;9)测试所有子部件的记录数,记作li_row[i+l];10)判断所有子部件有没有记录,如果li_row[i+l]=0,表示其没有子部件,那么添加树形视图列表项;此列表项前没有子项不加“ + ”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录的产品代号cpdh,部件代号ljdh,所属产品zee [i],所属部件zeb [i];树形视图列表项显示文本赋值,重复步骤8)、9)、10);如果li_row[i+l]>0,表示有子部件,那么添加树形视图列表项;此列表项前有子项加“ + ”号;赋值i=i+l ;读取其子部件的第一条记录的产品代号cpdh,部件代号ljdh,所属产品ZCC [i],所属部件zeb [i],树形视图列表项子项显示文本赋值;11)重复步骤 8)、9)、10);12)当光标指向i级子部件的结尾时,回到父项,设置i=i _ I ;判断光标回到是父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项从第I条到第li_row[i]条记录之间的一条记录时,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i - I ;13)直到i=l,用这种方法就构建了产品目录构。二、计算生产能力初定各工序单元工位数计算生产能力初定各工序单元工位数对不固定子部件级数的产品采用不固定嵌套循环层数和数组的方法寻找到产品所有的装配部件,根据产品所有的装配部件的作业时长计算产品的生产能力;确定各工序单元工位数量。(I)注释I)本发明中装配的部件有两层含义一种是指将部件的一级子部件、零件、器件通过特定的工序装成父部件,本发明中称为装配部件;装成装配部件的每一道工序所需的时间都可以通过时间测量和经验积累确定,通过数据采集方式得到;装配部件装成的每一道工序所需的时间可以通过作业勾选得到的数据进行更新;另一种是指部件的全部子部件的所有级子部件逐级装配的全部过程,本发明中称为总装配部件;2)生产能力计算表包含序号、产品代号、钳装、装擦、电装、电调、总校、联调、装箱、装外、产品工时i^一个字段;3)工序单元工位表包含工序名称和工位数两个字段;4)生产计划表包含产品代号、部件代号、部件名称、批次号、数量、配套日期、完成 日期、完成情况、优先级和备注字段;生产计划表可以由文本文件导入;5)装配流程表包含产品代号、部件代号、部件名称、工序号、工序名称、作业时长、非作业时长和备注字段;作业时间(记作tj)是对工件和作业人员都累计的时间,非作业时长(记作te)是只对工件累计,对作业人员不累计的时间;装配流程表可以由文本文件导A ;6)离散型企业所有产品的装配工序按相似性进行分类,定义每工序单元的工序名称,根据产品装配工艺特点,将装配工序分为钳装、装擦、电装、电调、总校、联调、装箱、装外八个工序单元;(2)对具有从属关系的产品,根据导入的生产计划表、装配流程表计算生产能力的步骤如下I)选择需要计算生产能力的截止时间,过滤这段时间内生产计划表的产品计划,测试过滤后生产计划表有没有记录,如果没有记录,计算结束;如果有记录,记录数记作Ii_row,进行生产能力计算,生成生产能力计算表;2)生产计划表按产品代号、部件代号、批次号字段升序排序;3)依次读入已过滤的生产计划表的不同的产品代号,作为生产能力计算表的各记录项,记录读完后,增加计划工时、达额工时、能力工时、工位数四个记录汇总项;4)设置表示循环层数变量 int i,数组 string zee[20], zeb[20], long lii_row[20];读取生产计划表第一条记录的产品代号、部件代号、计划数量ljsll ;5)查找对应于装配流程表各工序单元的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据与生产能力计算表对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;6)将产品明细表按产品代号、部件代号字段过滤,得到所有子部件;7)赋值i=l,测试子部件的记录数,记作lii_row[i];8)判断有没有子部件,如果lii_row[i]=0,表示没有子部件,那么生产计划表中的光标指向下一条记录,读取下一条记录的产品代号、部件代号、计划数量ljsll,重复步骤5)、6)、7)、8);如果lii_row[i]>0,表示有子部件,读取其子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zee [i]、所属部件zcb[i]、所属数量(Ijsl), ljsll=ljsll*ljsl ;9)以产品代号、部件代号为条件查找装配流程表对应部件各工序单元的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据与生产能力计算表中对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;10)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件; 11)测试子部件的记录数,记作lii_row[i+l];12)判断有没有子部件,如果lii_row[i+l]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录,读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量(Ijsl) , ljsll=ljsll*ljsl ;重复步骤 9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;赋值i=i+l ;读取子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zeb [i]、所属数量(Ijsl),ljsll=ljsll*ljsl ;13)重复步骤 9)、10)、11)、12);14)当光标指向i级子部件级的结尾时,回到父项,设置i=i _ I ;判断光标是回到父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第I条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i -1,直到i=l ;15)将生产能力计算表中计算得到的各条产品记录中的各个工序单元横向汇总求和,设置给该记录的产品工时字段;16)将生产能力计算表中计算得到的各条产品记录中的各个工序单元及产品工时进行纵向汇总求和,得到的数据设置给计划工时记录相对应的各字段;17)将生产能力计算表中计划工时各工序单元的数值除以作业天数,再除以每天作业的分钟数,就到得生产能力计算表中各工序单元数安排的近似值;18)将生产能力计算表中各工序单元的计划工时和产品工时与达额率相乘,得到的数据设置给达额工时记录相对应的各字段;19)将工作时长与各工序单元工位数相乘得到能力工时,得到的数据设置给达额工时记录相对应的各字段;(3)根据生产能力计算表中工位数量安排的近似值填写工序单元工位表中工位数字段。三、自动寻找具有不固定级数从属关系的产品的部件装配最佳路径
考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素的表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找具有不固定级数从属关系的产品的部件装配最佳路径。(I)注释I)本发明中在表示最佳路径的部件进度表前,为了减少生成过程中的难度,先生成工序时间表;2)缺件补齐时间表包含序号、产品代号、部件代号、部件名称、批次号、数量、补齐日期和备注八个字段;缺件补齐时间表由文本文件导入;3)加班表包含工序名称、加班种类、工位数、加班日期和备注五个字段;加班表由文本文件导入;4)工序时间表包含次序号、顺序号、工序名称、起始时间、有效性六个字段;5)部件进度表包含批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、次序号、顺序号、列号、序号、优先级、开始时间、结束时间、作业时长、非作业时长、有效性、转向工序号、转向工序名、转向顺序号字段;(2)由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达等方法生成工序时间表的步骤如下I)清除工序时间表原来的数据;2)用户输入截止日期em_2,今天的第二天与截止日期之间的日期称为显示区间,记作变量XX ;3)如果截止日期的年份等于今天today O的年份,显示区间的天数xx为截止日期的号数,减去今天today O的号数,加上从今天today O的月份到截止日期月份的前一个月期间每个月最后一天的号数的累加和;4)如果截止日期的年份等于今天today O的年份加I,显示区间的天数xx为截止日期的号数,减去今天todayO的号数,加上从今天today O的月份到今天todayO当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数的累加和;5)如果截止日期的年份大于今天today O的年份加I,显示区间的天数xx为截止日期的号数,减去今天todayO的号数,加上从今天today O的月份到今天todayO当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数,加上从今天today O的次年一月到截止日期前一年十二月期间每个月最后一天的号数的累加和;6)取每个月最后一天的方法为月份设为变量li_month,如果li_month=12,那么最后一天的号数为31 ;如果li_month〈12,那么下个月月份为本月加I,即li_month+l,每个月的最后一天就是下个月I号的前一天;7)以显示区间的天数为第一层循环的次数,以工序单元工位表的工序名称字段为第二层循环的次数,以工序单元工位表的工位数字段为第三层循环次数进入循环,依次读数、赋值、设置直至完成三层循环,工序时间表完成设置;8)在步骤7)的循环中,依次读数、赋值、设置直至完成三层循环的方法如下·
读取工序单元工位表中每条记录的工序名称,设置给工序时间表的工序名称字段;读取工序单元工位表中每条记录的工位数,设置给工序时间表的顺序号字段;工序时间表的次序号用两位数n-m表示,η表示今天today O后第几天数,η从I到xx ;m表示时间段,用I、2、3表示;I表示上午班8:00-11:30,1表示下午班12 30-16:00,3表示晚班17:00-20:30 ;每班次上班时间分别为上午班时间08:00 ;下午班时间12:30 ;晚班时间17:00 ;工序时间表的起始时间为日期时间型数据,含日期和时间;取今天todayO后的第η天日期,判断第η天是不是星期天或星期六;如果是,那 么工序单元工位表中的工位数不参与循环;工序时间表的有效性均设为O ;读取加班表中的记录;将工序时间表按顺序号字段降序排列;查找工序时间表中对应同时段并且同工序名称的记录的顺序号;如果查找到,则插入新的相应记录,记录的顺序号从查找到的顺序号以后排;如果查找不到,则插入新的相应记录,记录的顺序号从I开始排,直到循环结束;9)工序时间表生成后,按工序名称、起始时间、次序号字段升序,顺序号字段降序排序;(3)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号。保留部件进度表有效性字段为表示已开工的值3、表示异常的值4、表示完工的值5的记录,清除其他记录。部件进度表有效性为3、4或5且开始时间不小于今天today O的第二天的记录优先作绑定处理,绑定工序时间表对应的顺序号,步骤如下I)有效性O表示项目确定;有效性I表示开始时间确定;有效性2表示结束时间确定;有效性3表示已作开工“作业勾选” ;4表示已填报作业异常;有效性5表示已作完成“作业勾选”;2)保留有效性为3,或有效性为4或有效性为5的记录,清除部件进度表的其它数据;3)整理保留的有效性为3、或4、或5的记录,将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段升序排序,设置批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录序号从I开始重新设置;将部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号相同,列号不相同的记录列号从I开始重新设置;(4)对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段的内容如下I)生产计划表按批次号、产品代号、部件代号、开始时间字段升序排序;
2)生产计划表按完成情况不等于‘完成’条件进行过滤;3)测试生产计划表记录数,记作li_row,如果li_row=0,退出本步骤;如果li_row>0,表示生产计划表有记录;4)读取生产计划表第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、批次号cpph、数量ljsll、优先级yxji字段的数值;5)以产品代号为cpdh、部件代号为Ijdh过滤条件对装配流程表过滤,测试部件对应于装配流程表的记录数,记作g_rownumber ;如果g_rownumber=0,表示装配流程表没有记录,转到下一节的内容;如果g_rownumber>0,表示装配流程表有记录,以g_rownumber为二层循环次数,以Ijsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号都相同的记录,如果有,记作xx ;那么插入Ijsll条记录,记录的列号从xx到(xx+ljsll),记录的序号和有效性的值为O,记录的批次号cpph、所属产品zccp、所属 部件zcbj、产品代号cpdh、部件代号Ijdh、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,插入Ijsll条记录,记录的列号从I到ljsll、记录的序号和有效性的值为O,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号Ijdh、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束,这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、有效性相应字段;6)将产品明细表按产品代号cpdh,部件代号Ijdh字段过滤,得到产品明细表中的所有子部件;7)设置变量循环层数 i,数组 string zee[20], zeb[20] , long lii_row[20],赋值 i=l ;8)测试其记录数,记作lii_row[i],判断有没有子部件如果lii_row[i]=0,表示没有子部件,那么生产计划表中的光标指向下一条记录,读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、批次号cpph、数量ljsll、优先级yxji、完成日期wcrq ;重复步骤 5)、6)、7)、8);如果lii_row[i]>0,表示有子部件,读取子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zee [i]、所属部件zcb[i]、所属数量Ijsl,赋值Ijsll=Ijsl木Ijsll ;9)以产品代号cpdh、部件代号Ijdh为过滤条件对装配流程表过滤,测试装配流程表记录数,记作g_rownumber ;如果g_rownumber=0,表示装配流程表没有记录,转到下一节;如果g_rownumber>0,表示装配流程表有记录,表示装配流程表有记录,以g_rownumber为二层循环次数,以Ijsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录;如果有,记作xx,插入Ijsll条记录,记录的列号从xx到xx+ljsll,记录的序号和有效性的值为O,记录的批次号cpph、所属产品、所属部件、产品代号cpdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,插入Ijsll条记录,记录的列号从I到ljsll,记录的序号和有效性的值为O,记录的批次号cpph、所属产品、所属部件、产品代号CPdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束;这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、优先级、有效性相应字段;10)将产品明细表按ZCC[i],ZCb[i]字段过滤,得到所有子部件;11)测试子部件的记录数,记作lii_row[i+l];12)判断有没有子部件,如果lii_row[i+l]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录;读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量Ijsl,赋值Ijsll=Ijsl*ljsll ;重复步骤9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;赋值i=i+l ;读取子部件每一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc,所属产品zee [i],所属部件zcb [i], 所属数量 ljsl,赋值 ljsll=ljsl*ljsll ;13)重复步骤 9)、10)、11)、12);14)当光标指向i级的结尾时,回到父项,设置i=i - I ;判断光标是回到父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第I条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i - 1,直至i=l ;15)部件进度表按批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号字段升序排序,删除批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号都相同的记录中有效性为O的记录;(5)运用一个子部件对应多个父部件,一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序的步骤如下优先确定有效性为3、4或5的记录的下道工序,由部件进度表有效性为3、4或5的记录的非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下I)测试部件进度表有效性为3、4或5的记录数,如果记录数为0,退出本步骤;如果记录数不为0,作以下处理;2)将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号、序号字段升序排序,读取部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号与上一条记录相同,则跳过;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号不相同,则将上一条记录作如下处理;3)赋值wcrq的分钟记为mw ;小时数记为hw,非作业时长记为zysc ;4)设置记录的本班次上班时间,如果m=l,那么hsl=8, msl=0 ;如果m=2,那么hsl=12, msl=30 ;如果 m=3,那么 hsl=17, msl=0,设置 nl=n ;5)如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc= (hw_hsl)*60+(mw_msl)+zysc ;
6)如果tysc〈=210且(mw + zysc)〈60,那么ksrq的分钟数为mw+zysc,小时数为hw ;7)如果 tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小时数为 hw +int ((mw + zysc)/60),分钟数为 mw=mod ((mw + zysc) , 60);8)m=m+l,读取记录的下班次数据;如果m=4,那么m=l, n=n+l ;读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2 ;记录下班次的上班时间的小时数和分钟数分别为hs 和 ms ;如果 m=l,赋值 hs=8, ms=0 ;如果 m=2,赋值 hs=12, ms=30 ;如果 m=3,赋值 hs=17,ms=0 ;如果读不到工序时间表的记录,那么回到本步骤8)开始处循环,直到读到记录,XX=(n_nl) *1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n_nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ;9)如果tysc>210且tysc〈=xx,那么ksrq的小时数为hs2,分钟数为ms2 ;如果tysc>xx 且 tysc〈=yy,那么非作业时长 zysc=zysc_((n_nl)*1440+ (hs2_hw)*60+(ms2_mw)) ;ksrq 的小时数为 hs2 +int ((ms2 + zysc ) /60),分钟数为 mod((ms2 +zysc),60);如果tysc>yy,那么设置 hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步骤 9)开始处循环,直到tysc>xx不成立;10)判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;11)如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为I jsl,说明子部件与父部件的关系为Ijsl条子部件对应I条父部件;读取工序号为1,序号为O的同批次号的父部件的所有子部件,其记录数记作XXI,再读取工序号为1,序号为O的同批次号的父部件,其记录数记作XX2,两者相除的结果记作XX3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;12)如果该部件的工序号为I的父部件的记录的开始时间不为空,那么记作ksrql,取ksrq与ksrql的最大值为ksrq,那么该部件的父部件的工序号为I的记录的开始时间设置为ksrq ;同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;13)如果父部件的子部件对应了 xx3次父部件,则将该父部件的有效性改为I ;14)循环处理每条记录,循环结束后按同样的方法处理最后一条记录;15)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序;依此方法依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。(6)根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法,生成部件进度表开始时间、结束时间、顺序号、转向工序号、转向工序名、转向顺序的步骤如下I)部件进度表按工序号为I且有效性为O条件过滤,确定部件进度表对应记录的有效性为I且初定部件进度表有效性为I的记录的开始时间,方法如下测试部件进度表记录数,记作g_rownumber,如果g_rownumber=0,表示部件进度表没有可操作的记录,程序结束;如果g_rownumber>0,表示部件进度表有可操作的记录,读取部件进度表第一条记录的产品代号记作变量cpdh、部件代号记作Ijdh ;查找部件进度表中所属产品等于cpdh,所属部件等于ljdh,有效性为O的记录,如果查到,说明有子部件,跳出本节内容;如果查不到,表示没有子部件,将部件进度表有效性设置为1,设置部件进度表中该记录的开始时间的日期为今天today O后I天,时间为8点;依次读取部件进度表的下一条记录的产品代号记作变量cpdh、部件代号记作
ljdh,重复上述内容;......经过g_rownumber次循环,取值、过滤、判断,就确定了部件进度
表中每条记录的有效性是否为I,并初步确定有效性字段为I的记录的开始时间;2)初定缺件补齐时间表对应部件进度表中的记录的初始时间,方法如下测试缺件补齐时间表的记录数为g_rownumber,如果g_rownumber>0,表示缺件补齐时间表有记录;以g_rownumber为循环次数作循环,读取缺件补齐时间表中的第一条记录的补齐日期、产品代号、部件代号,在产品明细表中查找父部件,读取父部件的所属产品、所属部件、工序名称字段数据,将作为条件,查找部件进度表中的对应记录,读取部件进度表对应记录的开始时间;如果缺件补齐时间表中的补齐日期的第二天与时间08 00合成,生成的日期时间大于部件进度表对应记录的开始时间,那么将该缺件补齐时间表中的补齐日期的第二天与时间08 00合成生成的日期时间设置给该缺件所属部件在部件进度表中对应记录的开始时间;3)工序时间表按有效性为O的过滤条件进行过滤,部件进度表按有效性I的过滤条件进行过滤;测试部件进度表的记录数记作g_rownumber,测试工序时间表的记录数记作g_rownumberl ;如果都大于O,那么读取部件进度表的第一条记录;用DO·· LOOP WHILEcondition循环语句做以下步骤4)、5)、6)、7)、8)的处理;4)运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法,确定有效性为I的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下部件进度表按开始时间、优先级、工序名称、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序;工序时间表按次序号、起始时间、工序名称、顺序号字段升序排序;确定有效性为I的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下读取部件进度表第一条记录的工序名称赋值给变量gxmc、开始时间赋值给ksrq ;计算ksrq为今天today O后的第几天,值赋给η,根据ksrq的小时数变量hk判断作业时间段;如果hk>=8且hk〈12,那么是上午班,m=l,hs=8,ms=0 ;如果hk>=12且hk〈=16,那么是下午班,m=2, hs=12, ms=30 ;hk>=17 且 hk〈=20,那么是晚班,m=3, hs=17, ms=0 ;按n-m格式合成次序号,工序时间表按工序名称为gxmc、有效性为O、次序号为(n-m)过滤条件进行过滤,测试工序时间表的记录数li_row ;如果记录数li_row大于O,读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的第一条记录的顺序号赋值给变量11,起始时间给变量qsrq,取qsrq和ksrq最大值赋给ksrq,设置部件进度表本条记录的开始时间为ksrq,次序号为(n-m),顺序号为yy ;如果测试工序时间表的记录数li_row不大于O,那么m=m+l ;如果m=4,那么m=l,n=n+l,回到本步骤4)开始处循环,直到记录数大于O,即找到空余时间段;5)根据部件进度表开始时间和作业时长,用间断时间相加的方法确定结束时间datetime wcrq的方法如下读取部件进度表的作业时长为zysc ; 设部件进度表第一条记录的结束时间wcrq的分钟记作变量int mw,小时记作变量int hw,其结束时间与上班时间的时长记作变量tysc,那么tysc= (hk_hs) *60+(mk-ms)+zysc,设置mw = mk + zysc ;半天的工作时间 3· 5 小时为 210 分钟; 如果tysc〈210且mw〈60,那么结束时间wcrq的分钟数为mw = mk + zysc,小时数为hw=hk,设置其有效性为2,设置其完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ;如果tysc〈210且mw>=60,那么结束时间wcrq的小时数为hw= hk +int ((mk +zysc ) /60),分钟数为mw=mod ((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n_m,顺序号为yy的记录的起始时间wcrq ;如果tysc=210,那么结束时间 wcrq 的小时数为 hw= hk +int ((mk + zysc ) /60),分钟数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n_m,顺序号为yy的记录的有效性为I ;如果tysc>210,那么作以下处理6)设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m的该记录的有效性为1,同时需将部件进度表对应记录拆分成两部分记录;部件进度表对应记录拆分成的第一部分记录的开始时间为原开始时间不变,hsl、ms I分别表示下班时间的小时数和分钟数;如果m=l,那么hsl=ll, msl=30 ;如果m=2,那么hsl=16,msl=00 ;如果m=3,那么hsl=20,msl=30 ;部件进度表对应记录拆分成的第一部分记录的结束时间的日期设置为今天todayO后η天,时间的小时为hsl,时间的分钟为msl ;部件进度表对应记录拆分成的第一部分记录的有效性为2 ;部件进度表该记录第一部分记录的作业时长为(hsl-hk)*60+(msl _ mk),部件进度表该记录第一部分记录的时长为0.00,设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的有效性为 I, zysc=zysc_(hsl-hk)氺60-(ms1-mk);m=m+l,如果m=4,那么m=l, n=n+l,工序时间表按工序名称为gxmc、有效性为O、次序号为(n-m)过滤条件进行过滤;测试工序时间表的记录数li_row,如果记录数li_row大于0,插入新的记录行做为部件进度表对应记录第二部分记录,批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、优先级、列号、非作业时长与原记录保持不变,其有效性值为2,作业时长为zysc ;读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,将qsrq设置给部件进度表的开始时间,设置其次序号为(n-m),顺序号为yy ;如果工序时间表记录数li.row不大于0,那么回到本步骤6)开始处循环,直到记录数大于0,即找到空余时间段;确定第二部分结束时间datetime wcrq,设其结束时间wcrq的分钟记作变量intmw,小时记作变量int hw,其结束时间与上班时间的时长记作变量tysc,设qsrq的分钟数为 mk,小时数为 hk,那么七5^。=(111^-118)*60+(1111^-1118)+25^(3,设置11 ¥ = mk + zysc ;半天的工作时间3. 5小时为210分钟;如果tysc〈210且mw〈60,那么其结束时间wcrq的分钟数为mw = mk + zysc,小时数为hw=hk,设置其结束时间为wcrq,设置其有效性为2 ;设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ;如果tysc〈210且mw>=60,那么部件进度表记录的结束时间wcrq的小时数为hw= hk +int ((mk + zysc ) /60),分钟数为 mw=mod((mk + zysc), 60);设置其结束时间为wcrq,设置其有效性为2,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ;如果tysc=210,那么其结束时间wcrq的分钟数为hw= hk +int ((mk + zysc)/60) ’小时数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的有效性为I ;如果tysc>210,回到步骤6)即本步骤开始处循环,直至tysc>=210不成立;这样就设置部件进度表记录的结束时间wcrq、有效性2 ;确定了新插入记录的次序号、顺序号、序号等字段;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m、顺序号为yy的记录的起始时间wcrq或有效性I ;7)由部件进度表非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下赋值wcrq的分钟记为mw ;小时数记为hw,非作业时长记为zysc ;设置记录的本班次上班时间,如果m=l,那么hs 1=8,ms 1=0 ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,设置 nl=n ;如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hsl)*60+(mw-msl)+zysc,如果tysc〈=210 且(mw + zysc)〈60,那么 ksrq 的分钟数为 mw+zysc,小时数为 hw ;如果tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小时数为 hw +int ((mw + zysc)/60),分钟数为 mw=mod ((mw + zysc), 60);m=m+l,读取记录的下班次数据;如果m=4,那么m=l, n=n+l,读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2 ;记录下班次的上班时间的小时数和分钟数分别为hs和 ms ;如果 m=l,赋值 hs=8,ms=0 ;如果 m=2,赋值 hs=12,ms=30 ;如果 m=3,赋值 hs=17,ms=0 ;如果读不到工序时间表的记录,那么回到本节开始处循环,至到读到记录,XX= (n-nl)*1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ;如果tysc>210且tysc〈=xx,那么ksrq的小时数为hs2,分钟数为ms2 ;如果tysc>xx 且 tysc<=yy,那么非作业时长 zysc=zysc- ((n-nl) *1440+ (hs2_hw) *60+ (ms2_mw)) ;ksrq 的小时数为 hs2 +int ((ms2 + zysc ) /60),分钟数为 mod((ms2 + zysc), 60);如果tysc>yy,那么设置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步骤7)开始处循环,直到tysc>xx不成立;8)运用多对多关系的对应等方法找出部件进度表下道工序或父部件第一道装配工序,将开始时间和有效性赋值判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为I jsl,说明子部件与父部件的关系为Ijsl条子部件对应I条父部件;读取工序号为1,序号为O的同批次号的父部件的所有子部件,其记录数记作xxl,再读取工序号为1,序号为O的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;如果该部件的工序号为I的父部件的记录的开始时间不为空,那么记作ksrql,取ksrq与ksrql的最大值为ksrq,那么该部件的父部件的工序号为I的记录的开始时间设置为ksrq,同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;如果父部件的子部件对应了 xx3次父部件,则将该父部件的有效性改为I ;9)用DO…LOOP WHILE condition 循环语句,进行步骤4)、5)、6)、7)、8);按这种方法一直下去,当部件进度表正在确定的所有部件均没有父部件,且其对应的所有装配工序的开始时间和结束时间都确定后,即部件进度表的开始时间、结束时间、顺序号都生成后,或者工序时间表的所有记录的有效性都为I后,循环结束;10)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序,依此规则依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。四、显示最佳路径以甘特图方式显示(I)注释I)显示最佳路径的甘特图表包含天数、班次、顺序号和S10、S20、S30、S40、S50、S60、S70、S80、S90、S100、S110、S120、S130、S140、S150、S160、S170、S180、S190、S200、S210共21个表示每十分钟间隔的时间段的字段;2)设置显示最佳路径的甘特图表单元格字体的背景色为空值为rgb( 255,O,O),非空值为 rgb( O, 255,O);3)选择显示最佳路径的甘特图表显示的截止日期,考虑显示的甘特图表的清晰度要求,最佳路径的甘特图表显示的时间间隔选择十分钟,上午班、下午班、晚班的作业时长均按210分钟计算;4)显示最佳路径的甘特图表按工序单元的工序名称分成钳装、装擦、电装、电调、总校、联调、装箱、装外八个;部件进度表分别按八个工序单元的工序名称字段过滤,分别得到甘特图表菜单的八个子菜单,表示八个工序单元的甘特图表;(2)以电装工序单元为例,由部件进度表显示最佳路径的甘特图表的步骤如下I)部件进度表按次序号、顺序号、开始时间、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序;2)部件进度表按工序名称字段过滤条件进行过滤;3)测试部件进度表的记录数,如果等于0,表示部件进度表按上述条件过滤后没有记录,退出本步骤; 4)如果部件进度表的记录数大于0,设置循环语句依次读取从部件进度表的每一条记录;5)读取部件进度表的第一条记录的次序号,用函数找出在次序表中按从左到右的位置,记作I」[5];取次序号从左第I个到第(I」[5]-I)个字符串,转换成Integer类型值,赋值给甘特图表的天数字段,从第(I」[5] +1)个到最左边字符串,转换成Integer类型值,赋值给甘特图表班次字段;设班次字段用变量m表示;则111的值为1、2或3 ;如果m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;读取部件进度表第一条记录的顺序号赋值给甘特图表的顺序号字段;读取部件进度表的第一条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq ;读取部件进度表的第一条记录的产品代号赋值给变量cpdh,部件代号赋值给变量Ijdh ;判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈10,同时(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >0则查找甘特图表本条记录SlO字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给SlO字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈20,同时(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S20字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈30,同时(hour (wcrq)-hsl) *60+ (Minute (wcrq) -msl) >20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S30字段;……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同时(hour(wcrq)-hsl) *60+ (Minute (wcrq) -msl) >200则查找甘特图表本条记录S210字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S210字段;6)读取部件进度表的第二条记录的次序号赋值给字符型变量zcc,用函数找出 在ZCC中按从左到右的位置,记作I」;取ZCC从左第I个到第(I」[5]-1)个字符串,
转换成Integer类型值赋值给数值型变量η ;从第(l_i [5] +1)个到最左边字符串,转换成Integer类型值赋值给数值型变量m,读取部件进度表第二条记录的顺序号设置给数值型变量I」;查找甘特图表中天数等于n,班次等于m,顺序号等于I」的记录,如果查找到,表明甘特图表有符合条件的记录,记作li_row ;如果查不到,表明甘特图表没有符合条件的记录,在甘特图表插入新的记录,记录号为li_row,插入的甘特图表的新记录的天数字段赋值为n,班次字段赋值为m,顺序号字段赋值为I」;m 的值为 1、2 或 3 ;如果 m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;读取部件进度表的第二条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq ;读取部件进度表的第二条记录的产品代号赋值给变量cpdh,部件代号赋值给变量Ijdh ;
判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈10,同时(hour(wcrq)-hsl) *60+(Minute (wcrq)-msl) >0则查找甘特图表本条记录SlO字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给SlO字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈20,同时(hour (wcrq)-hsl) *60+(Minute (wcrq)-msl) >10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S20字段;如果不等式(hour(ksrq)-hsl) *60+(Minute (ksrq)-msl)〈30,同时(hour (wcrq)-hsl) *60+ (Minute (wcrq) -msl) >20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S30字段;……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同时(hour(wcrq)-hsl) *60+ (Minute (wcrq) -msl) >200则查找甘特图表本条记录S210字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S210字段;7)依次读取部件进度表的第三条到最后一条记录,用步骤6)的方法完成甘特图表数据的赋值;五、作业进程返馈过程如下( I)注释I)作业情况表包括序号、产品代号、部件代号、部件名称、批次号、工序号、工序名称、开始时间、结束时间、作业人员、作业时长、备注等字段;作业情况表在作业人员勾选时程序自动将不同时间获取的信息为相应字段赋值;2)异常反馈表包含序号、产品代号、部件代号、部件名称、批次号、工序号、工序名称、异常现象、异常类别、解决措施、原因分析、填报人员、解决人员、填报日期、预完日期和备注字段;异常反馈表由技术人员填报;3)作业指导书包含产品代号、部件代号、部件名称、工序号、工序名称、作业号、作业内容、设备、工装、辅助材料和备注字段;作业指导书由技术人员填报;(2)用todayO和time O可以获取本机当时的日期和当时的时间;为了防止作业人员本人通过修改本机时间达到修改作业时长的目的,程序采用自动读取服务器时间做为系统时间的方法,增加开始时间、结束时间等时间数据的客观性;自动获取作业时间的具体步骤如下I)为读取服务器时间设置一个游标declare get_date cursor for selectgetdate ();2)打开游标open get_date;3)设置给变量 tt_d :fetch get_date into : tt_d ;4)关闭游标close get_date;(3)作业“开工勾选”的步骤是I)当作业人员开始作业时,在显馈终端的一体机上,用本人设置的密码登录,显示甘特图窗口; 2)在甘特图窗口,双击甘特图表,在上方部件进度表经过过滤的相关记录的记录行双击进行“开工勾选”;3)程序自动获取勾选时服务器的时间,设置给部件进度表对应记录的开始时间字段;设置部件进度表该记录的有效性字段的值为3 ;4)同时作业情况表插入一条记录,将作业情况表插入的记录的批次号、产品代号、部件代号、部件名称、工序号、工序名称、开始时间、作业人员字段赋值;(4)作业完成后,作业人员需进行作业“完工勾选”;作业“完成勾选”的步骤是I)当作业人员完成作业后,在显馈终端一体机上在用本人设置的密码登录的作业指导书窗口,单击“完工勾选”按钮进行“完工勾选”,作业指导书窗口退出;2)进行作业“完工勾选”时,读取服务器时间设置给部件进度表对应记录的结束时间;填报实际作业时长设置给部件进度表的作业时长字段;3)设置部件进度表中该记录的有效性字段的值为5 ;4)根据产品代号、部件代号、批次号、工序号、作业人员信息查找对应记录、找到后,将获取的服务器时间赋值给结束时间;5)如果作业没有完成,不需要进行“完工勾选”,想退出作业指导书窗口,单击“退出”按钮;(5)作业发生异常时,作业人员需进行作业“异常反馈”;作业“异常反馈”的步骤是I)对已作“开工勾选”的作业对象,在作业过程中,单击作业指导书窗口“异常反馈”按钮;2)当作业发生异常时单击“异常反馈”按钮,进入“异常反馈”窗口 ;3)部件进度表中该记录的有效性为4 ;作业人员填报作业发生的异常现象;同时填写因异常导致的作业时长延长的时间;4)技术人员到现场解决异常后,填写异常原因和解决措施;5)部件进度表数据刷新时,按新的作业时长调整数据;实施例一、图I是智能作业控制方法结构图;产品结构树的构建方法在编制生产计划、部件流程等过程中涉及;根据生产计划、装配流程、各工序单元工位安排等数据进行具有从属关系的产品的生产能力的计算,根据生产能力计算过程中工位数安排的近似值安排各工序单元工位数;录入或导入产品明细表、装配流程表、生产计划表、缺件补齐时间表数据;调整产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数;根据产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十一种因素,运用本方法自动完成部件进度的计算;根据部件进度生成甘特图,用甘特图部件进度;二、在图2智能作业控制方法硬件配置图所示的配置,组建局域网;一台服务器放在专门机房的机架上,通过一台48端口交换机和网线与客户端相连;客户端设计7台采集 终端、I台控制终端、38台显馈终端;7台米集终端和I台控制终端米用普通台式机,38台显馈终端采用一体机。服务器和交换机一同放在中心机房的机架上;服务器存放客户端数据,交换机将服务器和采集终端、控制终端、显馈终端连接;采集终端采集产品明细表、装配流程表、作业指导书等技术数据和生产计划表、缺件补齐时间表、加班表等管理数据;控制终端用于通过密码类型控制各工序单元工位安排和生产计划表中产品的优先级;显馈终端显示甘特图、作业指导书和进行作业“开工勾选”、“完工勾选”和“异常反馈”。在图2智能作业控制方法硬件配置图控制终端台式机上通过修改生产计划表的优先级字段的数值大小改变产品优先级,通过生产能力计算结果来改变各工序单元工位数的安排,通过改变密码表的密码类型来同步改变工位显馈终端显示的信息。在图2智能作业控制方法硬件配置图采集终端台式机,管理人员录入和查询加班表、生产计划表、缺件补齐时间表;技术人员导入产品明细表、装配流程表和作业指导书等技术数据。在图2智能作业控制方法硬件配置图显馈终端的一体机显示最佳路径甘特图;显示最佳路径甘特图界面分两部分,下部分为最佳路径甘特图,它用21个字段表示间隔10分钟,时长半天210分钟的甘特图表,表示有作业的空间的背景色设置与表示没有作业的空间的背景色不同;上部分是部件进度表;通过双击甘特图表中记录的任意一行,部件进度表得到符合条件的相关记录。在图2智能作业控制方法终端图上的显馈终端的一体机上,正常作业需要进行作业“开工勾选”和作业“完工勾选”;退出时程序自动填报作业情况表,并修改反馈部件进度表的开始时间等信息;同时调用数字装配工艺;发生异常作业时填报异常情况反馈表,同时修改部件进度表中的完成时间和作业时长信息。在图2智能作业控制方法终端图上的显馈终端的一体机上,显示作业内容。
权利要求
1.一种离散型企业智能作业控制方法,其特征在于对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树;按相似性分成八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟,计算生产能力初定各工序单元工位数;在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素,控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找部件装配的最佳路径;该最佳路径以甘特图方式实时显示控制现场作业;作业开工勾选调用作业指导书进行作业和作业进程返馈,从而实现离散型企业智能的作业控制。
2.根据权利要求I所述的离散型企业智能作业控制方法,其特征在于对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树的过程如下 1)将产品明细表按产品代号cpdh、部件代号ljdh、所属产品zee、所属部件zcb字段升序排序; 2)测试产品明细表的记录数,记作变量li_row; 3)判断产品明细表有没有记录,如果li_row=0,表示产品明细表没有记录,退出本步骤,如果li_row>0,表示产品明细表有记录;读取第一条记录的产品代号cpdh,部件代号ljdh,所属产品zee,所属部件zcb,树形视图列表项子项显示文本赋值; 4)设置变量内层循环层数int i,数组 string zee[20], zcb[20], li_row[20]; 5)将产品明细表按zee,zcb字段过滤,得到所有子部件; 6)赋值i=l,测试所有子部件的记录数,记作li_row[i]; 7)判断子部件有没有记录,如果li_row[i]=0,表示没有子部件,那么添加树形视图列表项,此列表项前没有子项不加“ + ”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录部件的产品代号cpdh,部件代号ljdh,所属产品zee,所属部件zcb,树形视图列表项显示文本赋值;重复步骤5)、6)、7); 如果li_row[i]>0,表示第一条记录部件有子部件,那么添加树形视图列表项;此列表项前有子项加“ + ”号;读取子部件的第一条记录的产品代号cpdh,部件代号ljdh,所属产品ZCC [i],所属部件zcb [i],树形视图列表项子项显示文本赋值; 8)将产品明细表按ZCC[i],ZCb[i]字段过滤,得到所有子部件; 9)测试所有子部件的记录数,记作li_row[i+l]; 10)判断所有子部件有没有记录,如果li_row[i+l]=0,表示其没有子部件,那么添加树形视图列表项;此列表项前没有子项不加“ + ”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录的产品代号cpdh,部件代号ljdh,所属产品zee [i],所属部件zcb [i];树形视图列表项显示文本赋值,重复步骤8)、9)、10); 如果li_row[i+l]>0,表示有子部件,那么添加树形视图列表项;此列表项前有子项加“ + ”号;赋值i=i+l ;读取其子部件的第一条记录的产品代号cpdh,部件代号I jdh,所属产品ZCC [i],所属部件zcb [i],树形视图列表项子项显示文本赋值; 11)重复步骤8)、9)、10); 12)当光标指向i级子部件的结尾时,回到父项,设置i=i- I ;判断光标回到是父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项从第I条到第li_row[i]条记录之间的一条记录时,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i - I ; 13)直到i=l,用这种方法就构建了产品目录树。
3.根据权利要求I所述的离散型企业智能作业控制方法,其特征在于计算生产能力初定各工序单元工位数对不固定子部件级数的产品采用不固定嵌套循环层数和数组的方法寻找到产品所有的装配部件,根据产品所有的装配部件的作业时长计算产品的生产能力;确定各工序单元工位数量的过程如下 1)选择需要计算生产能力的截止时间,过滤这段时间内生产计划表的产品计划,测试过滤后生产计划表有没有记录,如果没有记录,计算结束;如果有记录,记录数记作ii_row,进行生产能力计算,生成生产能力计算表; 2)生产计划表按产品代号、部件代号、批次号字段升序排序;将产品的装配工序按相似性进行分类,定义各工序单元的工序名称,本发明中根据产品装配工艺相似性的特点,将装配工序定义为钳装、装擦、电装、电调、总校、联调、装箱、装外八个工序单元; 3)依次读入已过滤的生产计划表的不同的产品代号,作为生产能力计算表的各记录项,记录读完后,增加计划工时、达额工时、能力工时、各工序单元工位数四个记录汇总项; 4)设置表示循环层数变量int i,数组 string zee[20] ,zcb[20], long lii_row[20];读取生产计划表第一条记录的产品代号、部件代号、计划数量Ijsll ; 5)查找对应于装配流程表各工序单元的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据与生产能力计算表对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段; 6)将产品明细表按产品代号、部件代号字段过滤,得到所有子部件; 7)赋值i=l,测试子部件的记录数,记作lii_row[i]; 8)判断有没有子部件,如果lii_row[i]=0,表示没有子部件,那么生产计划表中的光标指向下一条记录,读取下一条记录的产品代号、部件代号、计划数量I jsll,重复步骤5)、6)、7)、8); 如果lii_row[i]>0,表示有子部件,读取其子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量(Ijsl),ljsll=ljsll*ljsl ; 9)以产品代号、部件代号为条件查找装配流程表对应部件各工序单元的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据与生产能力计算表中对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量Ijsll与对应部件对应工序单元的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;10)将产品明细表按ZCC[i],zcb[i]字段过滤,得到所有子部件; 11)测试子部件的记录数,记作lii_row[i+l]; 12)判断有没有子部件,如果lii_row[i+l]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录,读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量(Ijsl) , ljsll=ljsll*ljsl ;重复步骤 9)、10)、11)、12); 如果lii_row[i+l]>0,表示有子部件;赋值i=i+l ;读取子部件的第一条记录的产品代号cpdh、部件代号I jdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量(Ijsl),ljsll=ljsll*ljsl ; 13)重复步骤9)、10)、11)、12); 14)当光标指向i级子部件级的结尾时,回到父项,设置i=i- I ;判断光标是回到父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第I条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i - 1,直到 i=l ; 15)将生产能力计算表中计算得到的各条产品记录中的各个工序单元横向汇总求和,设置给该记录的产品工时字段; 16)将生产能力计算表中计算得到的各条产品记录中的各个工序单元及产品工时进行纵向汇总求和,得到的数据设置给计划工时记录相对应的各字段; 17)将生产能力计算表中计划工时各工序单元的数值除以作业天数,再除以每天作业的分钟数,就到得生产能力计算表中工位数量安排的近似值; 18)将生产能力计算表中各工序单元的计划工时和产品工时与达额率相乘,得到的数据设置给达额工时记录相对应的各字段; 19)将工作时长与各工序单元工位数相乘得到能力工时,得到的数据设置给达额工时记录相对应的各字段。
4.根据权利要求I所述的离散型企业智能作业控制方法,其特征在于考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素的表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找具有不固定级数从属关系的产品的部件装配最佳路径,过程如下 (I)由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达等方法生成工序时间表,步骤如下 1)清除工序时间表原来的数据; 2)用户输入截止日期em_2,今天的第二天与截止日期之间的日期称为显示区间,记作变量XX ; 3)如果截止日期的年份等于今天todayO的年份,显示区间的天数XX为截止日期的号数,减去今天todayO的号数,加上从今天today O的月份到截止日期月份的前一个月期间每个月最后一天的号数的累加和; 4)如果截止日期的年份等于今天todayO的年份加1,显示区间的天数XX为截止日期的号数,减去今天today O的号数,加上从今天today O的月份到今天today O当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数的累加和; 5)如果截止日期的年份大于今天todayO的年份加1,显示区间的天数XX为截止日期的号数,减去今天today O的号数,加上从今天today O的月份到今天today O当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数,加上从今天today O的次年一月到截止日期前一年十二月期间每个月最后一天的号数的累加和; 6)取每个月最后一天的方法为月份设为变量li_month,如果li_month=12,那么最后一天的号数为31 ;如果li_month〈12,那么下个月月份为本月加I,即li_month+l,每个月的最后一天就是下个月I号的前一天; 7)以显示区间的天数为第一层循环的次数,以工序单元工位表的工序名称字段为第二层循环的次数,以工序单元工位表的工位数字段为第三层循环次数进入循环,依次读数、赋值、设置直至完成三层循环,工序时间表完成设置; 8)在步骤7)的循环中,依次读数、赋值、设置直至完成三层循环的方法如下 读取工序单元工位表中每条记录的工序名称,设置给工序时间表的工序名称字段; 读取工序单元工位表中每条记录的工位数,设置给工序时间表的顺序号字段; 工序时间表的次序号用两位数n-m表示,η表示今天today O后第几天数,η从I到χχ ;m表示时间段,用1、2、3表示;1表示上午班8:00-11:30,1表示下午班12 :30_16:00, 3表示晚班17:00-20:30 ;每班次上班时间分别为上午班时间08:00 ;下午班时间12:30 ;晚班时间 17:00 ; 工序时间表的起始时间为日期时间型数据,含日期和时间; 取今天today O后的第η天日期,判断第η天是不是星期天或星期六;如果是,那么工序单元工位表中的工位数不参与循环; 工序时间表的有效性均设为O ; 读取加班表中的记录;将工序时间表按顺序号字段降序排列;查找工序时间表中对应同时段并且同工序名称的记录的顺序号;如果查找到,则插入新的相应记录,记录的顺序号从查找到的顺序号以后排;如果查找不到,则插入新的相应记录,记录的顺序号从I开始排,直到循环结束; 9)工序时间表生成后,按工序名称、起始时间、次序号字段升序,顺序号字段降序排序。
(2)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号,步骤如下 1)有效性O表示项目确定;有效性I表示开始时间确定;有效性2表示结束时间确定;有效性3表示已作开工“作业勾选” ;4表示已填报作业异常;有效性5表示已作完成“作业勾选”; 2)保留有效性为3,或有效性为4或有效性为5的记录,清除部件进度表的其它数据; 3)整理保留的有效性为3、或4、或5的记录,将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段升序排序,设置批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录序号从I开始重新设置;将部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号相同,列号不相同的记录列号从I开始重新设置。
(3)对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段,步骤如下 1)生产计划表按批次号、产品代号、部件代号、开始时间字段升序排序; 2)生产计划表按完成情况不等于‘完成’条件进行过滤; 3)测试生产计划表记录数,记作li_row,如果li_row=0,退出本步骤;如果li_row>0,表示生产计划表有记录; 4)读取生产计划表第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、批次号cpph、数量ljsll、优先级yxji字段的数值; 5)以产品代号为cpdh、部件代号为Ijdh过滤条件对装配流程表过滤,测试部件对应于装配流程表的记录数,记作g_rownumber ;如果g_rownumber=0,表示装配流程表没有记录,转到下一节的内容;如果g_rownumber>0,表示装配流程表有记录,以g_rownumber为二层循环次数,以Ijsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号都相同的记录,如果有,记作χχ ;那么插入Ijsll条记录,记录的列号从χχ到(xx+1 jsll),记录的序号和有效性的值为O,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号Ijdh、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,插入Ijsll条记录,记录的列号从I到ljsll、记录的序号和有效性的值为O,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号Ijdh、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束,这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、有效性相应字段; 6)将产品明细表 按产品代号cpdh,部件代号Ijdh字段过滤,得到产品明细表中的所有子部件; 7)设置变量循环层数i,数组 string zee [20], zcb [20] ,long lii_row[20],赋值i=l ; 8)测试其记录数,记作lii_row[i],判断有没有子部件如果lii_rOW[i]=0,表示没有子部件,那么生产计划表中的光标指向下一条记录,读取下一条记录的产品代号cpdh、部件代号I jdh、部件名称ljmc、批次号cpph、数量I jsll、优先级yxji、完成日期wcrq ;重复步骤5)、6)、7)、8); 如果lii_row[i]>0,表示有子部件,读取子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量Ijsl,赋值ljsll=ljsl*ljsll ; 9)以产品代号cpdh、部件代号Ijdh为过滤条件对装配流程表过滤,测试装配流程表记录数,记作g_rownumber ;如果g_rownumber=0,表示装配流程表没有记录,转到下一节;如果g_rownumber>0,表示装配流程表有记录,表示装配流程表有记录,以g_rownumber为二层循环次数,以Ijsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录;如果有,记作XX,插入Ijsll条记录,记录的列号从XX到xx+ljsll,记录的序号和有效性的值为O,记录的批次号cpph、所属产品、所属部件、产品代号cpdh、部件代号I j dh、部件名称I jmc、工序号gxh、工序名称gxmc、列号、序号、优先级yx j i、有效性字段赋值;如果没有,插入Ijsll条记录,记录的列号从I到ljsll,记录的序号和有效性的值为O,记录的批次号cpph、所属产品、所属部件、产品代号cpdh、部件代号I jdh、部件名称I jmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束;这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、优先级、有效性相应字段; 10)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件; 11)测试子部件的记录数,记作lii_row[i+l]; 12)判断有没有子部件,如果lii_row[i+l]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录;读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i]、所属数量Ijsl,赋值Ijsll=Ijsl*ljsll ;重复步骤9)、10)、11)、12);如果lii_row[i+l]>0,表示有子部件;赋值i=i+l ;读取子部件每一条记录的产品代号cpdh、部件代号I jdh、部件名称ljmc,所属产品zee [i],所属部件zcb [i],所属数量 ljsl,赋值 ljsll=ljsl*ljsll ; 13)重复步骤9)、10)、11)、12); 14)当光标指向i级的结尾时,回到父项,设置i=i- I ;判断光标是回到父项的从第I条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第I条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i - 1,直至i=l ; 15)部件进度表按批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号字段升序排序,删除批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号都相同的记录中有效性为O的记录。
(4)运用一个子部件对应多个父部件,一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序的步骤如下 优先确定有效性为3、4或5的记录的下道工序,由部件进度表有效性为3、4或5的记录的非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下 1)测试部件进度表有效性为3、4或5的记录数,如果记录数为0,退出本步骤;如果记 录数不为0,作以下处理; 2)将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号、序号字段升序排序,读取部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号与上一条记录相同,则跳过;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号不相同,则将上一条记录作如下处理; 3)赋值wcrq的分钟记为mw;小时数记为hw,非作业时长记为zysc ; 4)设置记录的本班次上班时间,如果m=l,那么hsl=8,ms I =O ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,设置 nl=n ; 5)如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hsl)*60+(mw-msl)+zysc ; 6)如果tysc〈=210且(mw+ zysc)〈60,那么ksrq的分钟数为mw+zysc,小时数为hw ;7)如果tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小时数为 hw +int ((mw + zysc)/60),分钟数为 mw=mod ((mw + zysc), 60); 8)m=m+l,读取记录的下班次数据;如果m=4,那么m=l,n=n+l ;读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2 ;记录下班次的上班时间的小时数和分钟数分别为hs和ms ;如果 m=l,赋值 hs=8, ms=0 ;如果 m=2,赋值 hs=12, ms=30 ;如果 m=3,赋值 hs=17,ms=0 ;如果读不到工序时间表的记录,那么回到本步骤8)开始处循环,直到读到记录,χχ= (n-nl)*1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ; 9)如果tysc>210且tysc〈=xx,那么ksrq的小时数为hs2,分钟数为ms2; 如果 tysc>xx 且 tysc<=yy,那么非作业时长 zysc=zysc- ((n-nl) *1440+ (hs2_hw) *60+ (ms2-mw)) ;ksrq 的小时数为 hs2 +int ((ms2 + zysc ) /60),分钟数为 mod((ms2 +zysc),60); 如果tysc>yy,那么设置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步骤9)开始处循环,直到tysc>xx不成立; 10)判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向; 11)如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为I jsl,说明子部件与父部件的关系为Ijsl条子部件对应I条父部件;读取工序号为1,序号为O的同批次号的父部件的所有子部件,其记录数记作xxl,再读取工序号为1,序号为O的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性; 12)如果该部件的工序号为I的父部件的记录的开始时间不为空,那么记作ksrql,取ksrq与ksrql的最大值为ksrq,那么该部件的父部件的工序号为I的记录的开始时间设置为ksrq;同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向; 13)如果父部件的子部件对应了xx3次父部件,则将该父部件的有效性改为I ; 14)循环处理每条记录,循环结束后按同样的方法处理最后一条记录;15)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序;依此方法依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
(5)根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法,生成部件进度表开始时间、结束时间、顺序号、转向工序号、转向工序名、转向顺序号的步骤如下 1)部件进度表按工序号为I且有效性为O条件过滤,确定部件进度表对应记录的有效 性为I且初定部件进度表有效性为I的记录的开始时间,方法如下 测试部件进度表记录数,记作g_rownumber,如果g_rownumber=0,表示部件进度表没有可操作的记录,程序结束;如果g_rownumber>0,表示部件进度表有可操作的记录,读取部件进度表第一条记录的产品代号记作变量cpdh、部件代号记作Ijdh ; 查找部件进度表中所属产品等于cpdh,所属部件等于I jdh,有效性为O的记录,如果查至IJ,说明有子部件,跳出本节内容;如果查不到,表示没有子部件,将部件进度表有效性设置为1,设置部件进度表中该记录的开始时间的日期为今天todayO后I天,时间为8点; 依次读取部件进度表的下一条记录的产品代号记作变量cpdh、部件代号记作ljdh,重复上述内容;......经过g_rownumber次循环,取值、过滤、判断,就确定了部件进度表中每条记录的有效性是否为1,并初步确定有效性字段为I的记录的开始时间; 2)初定缺件补齐时间表对应部件进度表中的记录的初始时间,方法如下 测试缺件补齐时间表的记录数为g_rownumber,如果g_rownumber>0,表示缺件补齐时间表有记录;以g_rownumber为循环次数作循环,读取缺件补齐时间表中的第一条记录的补齐日期、产品代号、部件代号,在产品明细表中查找父部件,读取父部件的所属产品、所属部件、工序名称字段数据,将作为条件,查找部件进度表中的对应记录,读取部件进度表对应记录的开始时间;如果缺件补齐时间表中的补齐日期的第二天与时间08 00合成,生成的日期时间大于部件进度表对应记录的开始时间,那么将该缺件补齐时间表中的补齐日期的第二天与时间08 00合成生成的日期时间设置给该缺件所属部件在部件进度表中对应记录的开始时间; 3)工序时间表按有效性为O的过滤条件进行过滤,部件进度表按有效性I的过滤条件进行过滤;测试部件进度表的记录数记作g_rownumber,测试工序时间表的记录数记作g_rownumberl ;如果都大于O,那么读取部件进度表的第一条记录;用DO·· LOOP WHILEcondition循环语句做以下步骤4)、5)、6)、7)、8)的处理; 4)运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法,确定有效性为I的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下 部件进度表按开始时间、优先级、工序名称、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序; 工序时间表按次序号、起始时间、工序名称、顺序号字段升序排序; 确定有效性为I的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下读取部件进度表第一条记录的工序名称赋值给变量gxmc、开始时间赋值给ksrq ; 计算ksrq为今天today O后的第几天,值赋给η,根据ksrq的小时数变量hk判断作业时间段;如果hk>=8且hk〈12,那么是上午班,m=l,hs=8,ms=0 ;如果hk>=12且hk〈=16,那么是下午班,m=2, hs=12, ms=30 ;hk>=17 且 hk〈=20,那么是晚班,m=3, hs=17, ms=0 ; 按n-m格式合成次序号,工序时间表按工序名称为gxmc、有效性为0、次序号为(n-m)过滤条件进行过滤,测试工序时间表的记录数Ii_row ;如果记录数li_row大于O,读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,取qsrq和ksrq最大值赋给ksrq,设置部件进度表本条记录的开始时间为ksrq,次序号为(n-m),顺序号为yy ;如果测试工序时间表的记录数li_row不大于O,那么m=m+l ;如果m=4,那么m=l,n=n+l,回到本步骤4)开始处循环,直到记录数大于O,即找到空余时间段; 5)根据部件进度表开始时间和作业时长,用间断时间相加的方法确定结束时间datetime wcrq的方法如下 读取部件进度表的作业时长为zysc ; 设部件进度表第一条记录的结束时间wcrq的分钟记作变量int mw,小时记作变量inthw,其结束时间与上班时间的时长记作变量tysc,那么tysc=(hk_hs) *60+ (mk-ms) +zysc,设置mw = mk + zysc ;半天的工作时间3. 5小时为210分钟; 如果tysc〈210且mw〈60,那么结束时间wcrq的分钟数为mw = mk + zysc,小时数为hw=hk,设置其有效性为2,设置其完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ; 如果tysc〈210且mw>=60,那么结束时间wcrq的小时数为hw= hk +int ((mk + zysc)/60) ’分钟数为mw=mod ((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n_m,顺序号为yy的记录的起始时间wcrq ; 如果tysc=210,那么结束时间wcrq的小时数为hw= hk +int ((mk + zysc )/60),分钟数为mw=mod((mk + zysc), 60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的有效性为I ; 如果tysc>210,那么作以下处理 6)设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m的该记录的有效性为1,同时需将部件进度表对应记录拆分成两部分记录; 部件进度表对应记录拆分成的第一部分记录的开始时间为原开始时间不变,hsl、ms I分别表示下班时间的小时数和分钟数;如果m=l,那么hsl=ll, msl=30 ;如果m=2,那么hsl=16,msl=00 ;如果m=3,那么hsl=20,msl=30 ;部件进度表对应记录拆分成的第一部分记录的结束时间的日期设置为今天todayO后η天,时间的小时为hsl,时间的分钟为msl ;部件进度表对应记录拆分成的第一部分记录的有效性为2 ;部件进度表该记录第一部分记录的作业时长为(hsl-hk)*60+(msl _ mk),部件进度表该记录第一部分记录的时长为0.00, 设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的有效性为 I, zysc=zysc_(hsl-hk)氺60-(ms1-mk);m=m+l,如果m=4,那么m=l, n=n+l,工序时间表按工序名称为gxmc、有效性为O、次序号为(n-m)过滤条件进行过滤;测试工序时间表的记录数li_row,如果记录数li_row大于O,插入新的记录行做为部件进度表对应记录第二部分记录,批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、优先级、列号、非作业时长与原记录保持不变,其有效性值为2,作业时长为zysc ;读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,将qsrq设置给部件进度表的开始时间,设置其次序号为(n-m),顺序号为yy ;如果工序时间表记录数li_row不大于O,那么回到本步骤6)开始处循环,直到记录数大于O,即找到空余时间段; 确定第二部分结束时间datetime wcrq,设其结束时间wcrq的分钟记作变量int mw,小时记作变量int hw,其结束时间与上班时间的时长记作变量tysc,设qsrq的分钟数为mk,小时数为 hk,那么 tysc= (hk_hs) *60+(mk-ms)+zysc,设置 mw = mk + zysc ;半天的工作时间3. 5小时为210分钟; 如果tysc〈210且mw〈60,那么其结束时间wcrq的分钟数为mw = mk + zysc,小时数为hw=hk,设置其结束时间为wcrq,设置其有效性为2 ;设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ; 如果tysc〈210且mw>=60,那么部件进度表记录的结束时间wcrq的小时数为hw= hk+int ((mk + zysc ) /60),分钟数为mw=mod ((mk + zysc), 60);设置其结束时间为 wcrq,设置其有效性为2,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的起始时间wcrq ; 如果tysc=210,那么其结束时间wcrq的分钟数为hw= hk +int ((mk + zysc ) /60),小时数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m,顺序号为yy的记录的有效性为I ; 如果tysc>210,回到步骤6)即本步骤开始处循环,直至tysc>=210不成立;这样就设置部件进度表记录的结束时间wcrq、有效性2 ;确定了新插入记录的次序号、顺序号、序号等字段;设置工序时间表工序名称为gxmc、有效性为O、次序号为n-m、顺序号为yy的记录的起始时间wcrq或有效性I ; 7)由部件进度表非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下 赋值wcrq的分钟记为mw ;小时数记为hw,非作业时长记为zysc ; 设置记录的本班次上班时间,如果m=l,那么hsl=8, ms 1=0 ;如果m=2,那么hsl=12,msl=30 ;如果 m=3,那么 hsl=17, msl=0,设置 nl=n ; 如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc= (hw-hsl)*60+(mw-msl)+zysc, 如果tysc〈=210且(mw + zysc)〈60,那么ksrq的分钟数为mw+zysc,小时数为hw ; 如果 tysc〈=210 且(mw+ zysc) >=60,那么 ksrq 的小时数为 hw +int ((mw + zysc)/60),分钟数为 mw=mod ((mw + zysc), 60);·8)m=m+l,读取记录的下班次数据;如果m=4,那么m=l,n=n+l,读取工序时间表工序名称为gxmc、有效性为O、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2 ;记录下班次的上班时间的小时数和分钟数分别为hs和ms ;如果 m=l,赋值 hs=8, ms=0 ;如果 m=2,赋值 hs=12, ms=30 ;如果 m=3,赋值 hs=17,ms=0 ;如果读不到工序时间表的记录,那么回到步骤8)开始处循环,至到读到记录,χχ= (n-nl) *1440+ (hs2_hsl) *60+ (ms2_msl),yy= (n-nl) *1440+ (hs-hsl) *60+ (ms-msl) +210 ; 如果tysc>210且tysc〈=xx,那么ksrq的小时数为hs2,分钟数为ms2 ;如果tysc>xx且tysc<=yy,那么非作业时长 zysc=zysc_ ((n-nl) *1440+ (hs2_hw) *60+ (ms2_mw)) ;ksrq 的小时数为 hs2 +int ((ms2 + zysc ) /60),分钟数为 mod((ms2 + zysc), 60);如果 tysc>yy,那么设置hsl=hs, msl=ms, hw=hs2, mw=ms2,回到本步骤7)开始处循环,直到tysc>xx不成立; 9)运用多对多关系的对应等方法找出部件进度表下道工序或父部件第一道装配工序,将开始时间和有效性赋值 判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向; 如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为I jsl,说明子部件与父部件的关系为Ijsl条子部件对应I条父部件;读取工序号为1,序号为O的同批次号的父部件的所有子部件,其记录数记作xxl,再读取工序号为1,序号为O的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性; 如果该部件的工序号为I的父部件的记录的开始时间不为空,那么记作ksrql,取ksrq与ksrql的最大值为ksrq,那么该部件的父部件的工序号为I的记录的开始时间设置为ksrq,同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向; 如果父部件的子部件对应了 xx3次父部件,则将该父部件的有效性改为I ; 10)用DO…LOOPWHILE condition循环语句,进行步骤4)、5)、6)、7)、8);按这种方法一直下去,当部件进度表正在确定的所有部件均没有父部件,且其对应的所有装配工序的开始时间和结束时间都确定后,即部件进度表的开始时间、结束时间、顺序号都生成后,或者工序时间表的所有记录的有效性都为I后,循环结束; 11)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序,依此规则依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
5.根据权利要求I所述的离散型企业智能作业控制方法,其特征在于运用天数、班次、边界时间等字段的生成方法和三层循环中变量和数据的关联方法,将部件装配的最佳路径以背景色不同的甘特图方式实时显示控制工位作业的时间,方法如下 I)部件进度表按次序号、顺序号、开始时间、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序; 2)部件进度表按工序名称字段过滤条件进行过滤; 3)测试部件进度表的记录数,如果等于O,表示部件进度表按上述条件过滤后没有记录,退出本步骤; 4)如果部件进度表的记录数大于O,设置循环语句依次读取从部件进度表的每一条记录; 5)读取部件进度表的第一条记录的次序号,用函数找出在次序表中按从左到右的位置,记作I」[5];取次序号从左第I个到第(I」[5]-I)个字符串,转换成Integer类型值,赋值给甘特图表的天数字段,从第(I」[5] +1)个到最左边字符串,转换成Integer类型值,赋值给甘特图表班次字段;设班次字段用变量m表示;则111的值为1、2或3 ;如果m=l, 那么 hsl=8, ms I =O ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ; 读取部件进度表第一条记录的顺序号赋值给甘特图表的顺序号字段; 读取部件进度表的第一条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq ; 读取部件进度表的第一条记录的产品代号赋值给变量cpdh,部件代号赋值给变量Ijdh ; 判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <10,同时(hour (wcrq) -hsl)*60+ (Minute (wcrq) -msl) >0则查找甘特图表本条记录SlO字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 SlO 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <20,同时(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 S20 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <30,同时(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 S30 字段; ……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同时(hour (wcrq)-hsI)*60+ (Minute (wcrq) -msl) >200则查找甘特图表本条记录S210字段是否有数据,如果没有,将变量string (cpdh+,-,+ljdh)赋值给S210字段; 6)读取部件进度表的第二条记录的次序号赋值给字符型变量zcc,用函数找出在zee中按从左到右的位置,记作I」;取zcc从左第I个到第(I」[5]-I)个字符串,转换成Integer类型值赋值给数值型变量η ;从第(I」[5]+1)个到最左边字符串,转换成Integer类型值赋值给数值型变量m,读取部件进度表第二条记录的顺序号设置给数值型变量I」;查找甘特图表中天数等于n,班次等于m,顺序号等于I」的记录,如果查找到,表明甘特图表有符合条件的记录,记作li_row ;如果查不到,表明甘特图表没有符合条件的记录,在甘特图表插入新的记录,记录号为li_row,插入的甘特图表的新记录的天数字段赋值为n,班次字段赋值为m,顺序号字段赋值为I」;m 的值为 1、2 或 3 ;如果 m=l,那么 hsl=8, ms 1=0 ;如果 m=2,那么 hsl=12, msl=30 ;m=3,那么 hsl=17, ms 1=0 ;读取部件进度表的第二条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq ;读取部件进度表的第二条记录的产品代号赋值给变量cpdh,部件代号赋值给变量Ijdh ; 判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <10,同时(hour (wcrq) -hsl)*60+ (Minute (wcrq) -msl) >0则查找甘特图表本条记录SlO字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 SlO 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <20,同时(hour (wcrq) -hsl)*60+(Minute (wcrq)-msl) >10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 S20 字段;如果不等式(hour (ksrq) -hsl) *60+ (Minute (ksrq) -msl) <30,同时(hour (wcrq) -hsl) *60+(Minute (wcrq)-msl) >20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量 string (cpdh+,-,+ljdh)赋值给 S30 字段; ……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour (ksrq)-hsl) *60+(Minute (ksrq)-msl)〈210,同时(hour (wcrq)-hsI) *60+ (Minute (wcrq) -msl) >200则查找甘特图表本条记录S210字段是否有数据,如果没 有,将变量string (cpdh+,-,+ljdh)赋值给S210字段; 7)依次读取部件进度表的第三条到最后一条记录,用步骤6)的方法完成甘特图表数据的赋值。
6.根据权利要求I所述的离散型企业智能作业控制方法,其特征在于作业开工勾选调用作业指导书进行作业和作业进程返馈,方法如下 (O自动获取作业时间的具体步骤如下 1)为读取服务器时间设置一个游标declareget_date cursor for selectgetdate (); 2)打开游标openget_date ; 3)设置给变量tt_d :fetch get_date into : tt_d ; 4)关闭游标closeget_date。
(2)作业“开工勾选”的步骤是 1)当作业人员开始作业时,在显馈终端的一体机上,用本人设置的密码登录,显示甘特图窗口 ; 2)在甘特图窗口,双击甘特图表,在上方部件进度表经过过滤的相关记录的记录行双击进行“开工勾选”; 3)程序自动获取勾选时服务器的时间,设置给部件进度表对应记录的开始时间字段;设置部件进度表该记录的有效性字段的值为3 ; 4)同时作业情况表插入一条记录,将作业情况表插入的记录的批次号、产品代号、部件代号、部件名称、工序号、工序名称、开始时间、作业人员字段赋值。
(3)作业完成后,作业人员需进行作业“完工勾选”;作业“完成勾选”的步骤是 I)当作业人员完成作业后,在显馈终端一体机上在用本人设置的密码登录的作业指导书窗口,单击“完工勾选”按钮进行“完工勾选”,作业指导书窗口退出;2)进行作业“完工勾选”时,读取服务器时间设置给部件进度表对应记录的结束时间;填报实际作业时长设置给部件进度表的作业时长字段; 3)设置部件进度表中该记录的有效性字段的值为5; 4)根据产品代号、部件代号、批次号、工序号、作业人员信息查找对应记录、找到后,将获取的服务器时间赋值给结束时间; 5)如果作业没有完成,不需要进行“完工勾选”,想退出作业指导书窗口,单击“退出”按钮。(4)作业发生异常时,作业人员需进行作业“异常反馈”;作业“异常反馈”的步骤是 1)对已作“开工勾选”的作业对象,在作业过程中,单击作业指导书窗口“异常反馈”按钮; 2)当作业发生异常时单击“异常反馈”按钮,进入“异常反馈”窗口; 3)部件进度表中该记录的有效性为4;作业人员填报作业发生的异常现象;同时填写因异常导致的作业时长延长的时间; 4)技术人员到现场解决异常后,填写异常原因和解决措施; 5)部件进度表数据刷新时,按新的作业时长调整数据。
全文摘要
本发明公开了一种离散型企业智能作业控制方法,首先对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树,并计算生产能力初定各工序单元工位数;在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素自动寻找部件装配的最佳路径,该最佳路径以甘特图方式实时显示控制现场作业,作业开工勾选调用作业指导书进行作业和作业进程返馈,从而实现离散型企业智能的作业控制。本发明能够提升企业快速响应能力,提高产品质量和生产率,确保履约率。
文档编号G06Q10/06GK102930397SQ20121043313
公开日2013年2月13日 申请日期2012年11月1日 优先权日2012年11月1日
发明者陈友春, 许清, 王龙莹, 陈国胜, 胡文花, 唐晓冬, 聂永海, 张云龙, 吴庆, 曹磊, 郭晓丹, 马宁, 程晓敏, 付羽翀, 赵晓宝, 季冬, 孙士亮 申请人:北方信息控制集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1