CN102982405A - 自动寻找具有从属关系产品的部件装配最佳路径的方法 - Google Patents
自动寻找具有从属关系产品的部件装配最佳路径的方法 Download PDFInfo
- Publication number
- CN102982405A CN102982405A CN201210433117XA CN201210433117A CN102982405A CN 102982405 A CN102982405 A CN 102982405A CN 201210433117X A CN201210433117X A CN 201210433117XA CN 201210433117 A CN201210433117 A CN 201210433117A CN 102982405 A CN102982405 A CN 102982405A
- Authority
- CN
- China
- Prior art keywords
- record
- parts
- time
- validity
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- General Factory Administration (AREA)
Abstract
本发明公开了一种自动寻找具有从属关系产品的部件装配最佳路径的方法,将多品种小批量生产方式的离散型企业,按相似性分成十个生产单元,每个单元又安排可控制数量的工位,半天按210分钟计算,根据包含各种因素的信息的多种表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点;最佳时间点用包含开始时间、结束时间和表示每个单元工位顺序的顺序号三个字段的部件进度表来表达。本发明自动寻找具有不固定级数从属关系的产品的部件装配最佳路径,能最大程度消除过量生产、等待时间、运输、库存、过程、动作、产品缺陷等浪费,缩短产品制造周期,提高生产效率。
Description
技术领域
本发明属于智能作业控制技术,特别是一种自动寻找具有从属关系产品的部件装配最佳路径的方法。
背景技术
现代企业必须提升生产控制水平,才能提高生产率,确保履约率。在离散型企业内部,面对多种具有不固定级级数的从属关系的产品和具有一定先后顺序的装配部件,多采用把产品作为一种项目,把产品里的部件,子部件,最终器件、零件、部件同级化处理,人工拆分为项目的子项目平等对待的方法。人工拆分需要化大量时间,拆分的结果专门针对特定的模型,不具备通用性,不利于具正意义上的分类和汇总。
目前许多企业生产现场大多处于非完全控制状态。生产现场的盲目性,随意性非常大,生产控制手段匮乏,目视管理缺失,信息不能很好地公开,与生产准时化要求相距甚远,质量过程控制不能很好地保证,生产潜在的问题不能及时发现,工作效率不能有效地提高。
我国的一些企业对生产管理多采用现场安排、手工记录方式。重复劳动多,生产数据没有积累。生产计划滞后,生产安排随意性大,生产进度不确定性因素多,信息断层。
发明内容
本发明的目的提供一种自动寻找具有从属关系产品的部件装配最佳路径的方法。
实现本发明目的的技术方案为:一种自动寻找具有从属关系产品的部件装配最佳路径的方法,将多品种小批量生产方式的离散型企业,按相似性分成钳装、装擦、电装、电调、总校、联调、装箱、装外八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟计算,根据包含各种因素的信息的多种表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点;最佳时间点用包含开始时间、结束时间和表示每个单元工位顺序的顺序号三个字段的部件进度表来表达,具体步骤如下:
(1)由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达三种方法生成工序时间表;
(2)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号;
(3)对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段;
(4)运用一个子部件对应多个父部件,一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序号;
(5)根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法。
本发明与现有技术相比,其显著优点为:在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元的工位数和加班时间各工序工序单元的工位数十种实战因素情况下,自动寻找具有不固定级数从属关系的产品的部件装配最佳路径。生产中最大的浪费是等待的浪费,通过自动寻找部件装配的最佳路径,能最大程度消除过量生产、等待时间、运输、库存、过程、动作、产品缺陷等浪费,缩短产品制造周期,提高生产效率,适应现代企业多品种小批量的生产需求,提升离散型企业的快速响应能力,提高全员生产率,实现响应快速化。
下面结合附图对本发明作进一步详细描述。
附图说明
图1是自动寻找具有从属关系产品的部件装配最佳路径的方法结构图。
图2是自动寻找具有从属关系产品的部件装配最佳路径的方法硬件配置图。
具体实施方式
结合图1和图2,本发明自动寻找具有从属关系产品的部件装配最佳路径的方法是离散型企业智能作业控制技术的核心内容之一,下面对包括自动寻找具有从属关系产品的部件装配最佳路径的方法在内的离散型企业智能作业控制技术进行整体说明和描述,首先对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组构建产品结构树;并按相似性分成钳装、装擦、电装、电调、总校、联调、装箱、装外八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟,计算生产能力初定各工序单元工位数;在考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素,控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找部件装配的最佳路径;该最佳路径以甘特图方式实时显示控制现场作业;作业开工勾选调用作业指导书进行作业和作业进程返馈,从而实现离散型企业智能的作业控制 。具体内容如下。
一、构建产品结构树
(1)注释
1)本发明中,如果产品的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,步骤如下。
1)将产品明细表按产品代号cpdh、部件代号ljdh、所属产品zcc、所属部件zcb字段升序排序;
2)测试产品明细表的记录数,记作变量li_row;
3)判断产品明细表有没有记录,如果li_row=0,表示产品明细表没有记录,退出本步骤,如果li_row>0,表示产品明细表有记录;读取第一条记录的产品代号cpdh,部件代号ljdh,所属产品zcc,所属部件zcb,树形视图列表项子项显示文本赋值;
4)设置变量内层循环层数int i,数组string zcc[20],zcb[20],li_row[20];
5)将产品明细表按zcc,zcb字段过滤,得到所有子部件;
6)赋值i=1,测试所有子部件的记录数,记作li_row[i];
7)判断子部件有没有记录,如果li_row[i]=0,表示没有子部件,那么添加树形视图列表项,此列表项前没有子项不加“+”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录部件的产品代号cpdh,部件代号ljdh,所属产品zcc,所属部件zcb,树形视图列表项显示文本赋值;重复步骤5)、6)、7);
如果li_row[i]>0,表示第一条记录部件有子部件,那么添加树形视图列表项;此列表项前有子项加“+”号;读取子部件的第一条记录的产品代号cpdh,部件代号ljdh,所属产品zcc[i],所属部件zcb[i],树形视图列表项子项显示文本赋值;
8)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件;
9)测试所有子部件的记录数,记作li_row[i+1];
10)判断所有子部件有没有记录,如果li_row[i+1]=0,表示其没有子部件,那么添加树形视图列表项;此列表项前没有子项不加“+”号;恢复父项过滤条件,光标指向其下一条记录,读取下一条记录的产品代号cpdh,部件代号ljdh,所属产品zcc[i],所属部件zcb[i];树形视图列表项显示文本赋值,重复步骤8)、9)、10);
如果li_row[i+1]>0,表示有子部件,那么添加树形视图列表项;此列表项前有子项加“+”号;赋值i=i+1;读取其子部件的第一条记录的产品代号cpdh,部件代号ljdh,所属产品zcc[i],所属部件zcb[i],树形视图列表项子项显示文本赋值;
11) 重复步骤8)、9)、10);
12)当光标指向i级子部件的结尾时,回到父项,设置i=i–1;判断光标回到是父项的从第1条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项从第1条到第li_row[i]条记录之间的一条记录时,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i–1;
13) 直到i=1,用这种方法就构建了产品目录构。
二、对不固定子部件级数的产品采用不固定嵌套循环层数和数组的方法寻找到产品所有的装配部件,通过产品所有的装配部件的作业时长计算产品的生产能力。
(1)注释
1)本发明中装配的部件有两层含义:一种是指将部件的一级子部件、零件、器件通过特定的工序装成父部件,本发明中称为装配部件;装成装配部件的每一道工序所需的时间都可以通过时间测量和经验积累确定,通过数据采集方式得到;装配部件装成的每一道工序所需的时间可以通过作业勾选得到的数据进行更新;另一种是指部件的全部子部件的所有级子部件逐级装配的全部过程,本发明中称为总装配部件。
2)生产能力计算表包含序号、产品代号、钳装、装擦、电装、电调、总校、联调、装箱、装外、产品工时十一个字段;
3) 工序单元工位表包含工序名称和工位数两个字段;
4)生产计划表包含产品代号、部件代号、部件名称、批次号、数量、配套日期、完成日期、完成情况、优先级和备注字段;生产计划表可以由文本文件导入;
5)装配流程表包含产品代号、部件代号、部件名称、工序号、工序名称、作业时长、非作业时长和备注字段。作业时间(记作tj)是对工件和工位都累计的时间,非作业时长(记作te)是只对工件累计,对工位不累计的时间;装配流程表可以由文本文件导入;
6) 离散型企业所有产品的装配工序进行成组分类,定义每组的工序名称,根据产品装配工艺相似性的特点,将装配工序定义为钳装、装擦、电装、电调、总校、联调、装箱、装外八类;
(2)计算生产能力初定各工序单元工位数:对不固定子部件级数的产品采用不固定嵌套循环层数和数组的方法寻找到产品所有的装配部件,根据产品所有的装配部件的作业时长计算产品的生产能力;确定各工序单元工位数量的步骤如下:
1)选择需要计算生产能力的截止时间,过滤这段时间内生产计划表的产品计划,测试过滤后生产计划表有没有记录,如果没有记录,计算结束;如果有记录,记录数记作li_row,进行生产能力计算,生成生产能力计算表;
2) 生产计划表按产品代号、部件代号、批次号字段升序排序;
3) 依次读入已过滤的生产计划表的不同的产品代号,作为生产能力计算表的各记录项,记录读完后,增加计划工时、达额工时、能力工时、工位数四个记录汇总项;
4)设置表示循环层数变量int i,数组string zcc[20],zcb[20],long lii_row[20];读取生产计划表第一条记录的产品代号、部件代号、计划数量ljsll;
5)查找对应于装配流程表各工序的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量ljsll与对应部件对应工序的作业时长相乘的数据与生产能力计算表对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量ljsll与对应部件对应工序的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;
6)将产品明细表按产品代号、部件代号字段过滤,得到所有子部件;
7)赋值i=1,测试子部件的记录数,记作lii_row[i];
8)判断有没有子部件,如果lii_row[i]=0,表示没有子部件,那么生产计划表中的光标指向下一条记录,读取下一条记录的产品代号、部件代号、计划数量ljsll,重复步骤5)、6)、7)、8);
如果lii_row[i]>0,表示有子部件,读取其子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i] 、所属数量(ljsl), ljsl1=ljsl1*ljsl;
9)以产品代号、部件代号为条件查找装配流程表对应部件各工序单元的作业时长,如果读不到数据或读的数据为空,那么作业时长值为0,将计划数量ljsll与对应部件对应工序单元的作业时长相乘的数据与生产能力计算表中对应生产计划表中产品代号的原数据相加,将结果设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;如果生产能力计算表中对应生产计划表中产品代号的原数据为空,则将计划数量ljsll与对应部件对应工序单元的作业时长相乘的数据设置给生产能力计算表中对应生产计划表中产品代号的记录的相应字段;
10)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件;
11)测试子部件的记录数,记作lii_row[i+1];
12)判断有没有子部件,如果lii_row[i+1]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录,读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i] 、所属数量(ljsl) ,ljsl1=ljsl1*ljsl;重复步骤9)、10)、11)、12);
如果lii_row[i+1]>0,表示有子部件;赋值i=i+1;读取子部件的第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i] 、所属数量(ljsl),ljsl1=ljsl1*ljsl;
13) 重复步骤9)、10)、11)、12);
14) 当光标指向i级子部件级的结尾时,回到父项,设置i=i–1;判断光标是回到父项的从第1条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第1条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i – 1,直到i=1;
15) 将生产能力计算表中计算得到的各条产品记录中的各个工序横向汇总求和,设置给该记录的产品工时字段;
16)将生产能力计算表中计算得到的各条产品记录中的各个工序及产品工时进行纵向汇总求和,得到的数据设置给计划工时记录相对应的各字段;
17) 将生产能力计算表中计划工时各工序的数值除以作业天数,再除以每天作业的分钟数,就到得生产能力计算表中工位数安排的近似值;
18) 将生产能力计算表中各工序的计划工时和产品工时与达额率相乘,得到的数据设置给达额工时记录相对应的各字段;
19)将工作时长与各工序单元的工位数相乘得到能力工时,得到的数据设置给达额工时记录相对应的各字段。
(3)根据生产能力计算表中工位数安排的近似值填写工序单元工位表中工位数字段。
三、自动寻找具有不固定级数从属关系的产品的部件装配最佳路径
考虑产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间各工序单元工位数和加班时间各工序单元工位数十种因素的表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点,自动寻找具有不固定级数从属关系的产品的部件装配最佳路径。
(1)注释
1)本发明中在表示最佳路径的部件进度表前,为了减少生成过程中的难度,先生成工序时间表。
2)缺件补齐时间表包含序号、产品代号、部件代号、部件名称、批次号、数量、补齐日期和备注八个字段。缺件补齐时间表由文本文件导入;
3)加班表包含工序名称、加班种类、工位数、加班日期和备注五个字段;加班表由文本文件导入;
4)工序时间表包含次序号、顺序号、工序名称、起始时间、有效性六个字段
5)部件进度表包含批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、次序号、顺序号、列号、序号、优先级、开始时间、结束时间、作业时长、非作业时长、有效性、转向工序号、转向工序名、转向顺序号字段;
(2)由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达三种方法生成工序时间表,步骤如下:
1)清除工序时间表原来的数据;
2)用户输入截止日期em_2,今天的第二天与截止日期之间的日期称为显示区间,记作变量xx;
3)如果截止日期的年份等于今天today()的年份,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到截止日期月份的前一个月期间每个月最后一天的号数的累加和;
4)如果截止日期的年份等于今天today()的年份加1,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到今天today()当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数的累加和;
5)如果截止日期的年份大于今天today()的年份加1,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到今天today()当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数,加上从今天today()的次年一月到截止日期前一年十二月期间每个月最后一天的号数的累加和;
6)取每个月最后一天的方法为:月份设为变量li_month,如果li_month=12,那么最后一天的号数为31;如果li_month<12,那么下个月月份为本月加1,即li_month+1,每个月的最后一天就是下个月1号的前一天;
7)以显示区间的天数为第一层循环的次数,以工序单元工位表的工序名称字段为第二层循环的次数,以工位数字段为第三层循环次数进入循环,依次读数、赋值、设置直至完成三层循环,工序时间表完成设置;
8)在步骤7)的循环中,依次读数、赋值、设置直至完成三层循环的方法如下:
读取工序单元工位表中每条记录的工序名称,设置给工序时间表的工序名称字段;
读取工序单元工位表中每条记录的工位数,设置给工序时间表的顺序号字段;
工序时间表的次序号用两位数n-m表示,n表示今天today()后第几天数,n从1到xx;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()后的第n天日期,判断第n天是不是星期天或星期六;如果是,那么工序单元工位表中的工位数不参与循环;
工序时间表的有效性均设为0;
读取加班表中的记录;将工序时间表按顺序号字段降序排列;查找工序时间表中对应同时段并且同工序名称的记录的顺序号;如果查找到,则***新的相应记录,记录的顺序号从查找到的顺序号以后排;如果查找不到,则***新的相应记录,记录的顺序号从1开始排,直到循环结束;
9)工序时间表生成后,按工序名称、起始时间、次序号字段升序,顺序号字段降序排序。
(3)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号。
保留部件进度表有效性字段为表示已开工的值3、表示异常的值4、表示完工的值5的记录,清除其他记录。
部件进度表有效性为3、4或5且开始时间不小于今天today()的第二天的记录优先作绑定处理,绑定工序时间表对应的顺序号,步骤如下:
1)有效性0表示项目确定;有效性1表示开始时间确定;有效性2表示结束时间确定;有效性3表示已作开工“作业勾选”;4表示已填报作业异常;有效性5表示已作完成“作业勾选”;
2)保留有效性为3,或有效性为4或有效性为5的记录,清除部件进度表的其它数据;
3)整理保留的有效性为3、或4、或5的记录,将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段升序排序,设置批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录序号从1开始重新设置;将部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号相同,列号不相同的记录列号从1开始重新设置。
(4)对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段的内容如下:
1)生产计划表按批次号、产品代号、部件代号、开始时间字段升序排序;
2)生产计划表按完成情况不等于‘完成’条件进行过滤;
3)测试生产计划表记录数,记作li_row,如果li_row=0,退出本步骤;如果li_row>0,表示生产计划表有记录;
4)读取生产计划表第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、批次号cpph、数量ljsll、优先级yxji字段的数值;
5)以产品代号为cpdh、部件代号为ljdh过滤条件对装配流程表过滤,测试部件对应于装配流程表的记录数,记作g_rownumber;如果g_rownumber=0,表示装配流程表没有记录,转到下一节的内容;如果g_rownumber>0,表示装配流程表有记录,以g_rownumber为二层循环次数,以ljsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号都相同的记录,如果有,记作xx;那么***ljsll条记录,记录的列号从xx到(xx+ljsll),记录的序号和有效性的值为0,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号ljdh 、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,***ljsll条记录,记录的列号从1到ljsll、记录的序号和有效性的值为0,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号ljdh 、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束,这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号 、部件名称、工序号、工序名称、列号、序号、优先级、有效性相应字段;
6)将产品明细表按产品代号cpdh,部件代号ljdh字段过滤,得到产品明细表中的所有子部件;
7)设置变量循环层数i,数组string zcc[20],zcb[20] ,long lii_row[20],赋值i=1;
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、所属产品zcc[i]、所属部件zcb[i] 、所属数量ljsl,赋值ljsll=ljsl*ljsll;
9)以产品代号cpdh、部件代号ljdh为过滤条件对装配流程表过滤,测试装配流程表记录数,记作g_rownumber;如果g_rownumber=0,表示装配流程表没有记录,转到下一节;如果g_rownumber>0,表示装配流程表有记录,表示装配流程表有记录,以g_rownumber为二层循环次数,以ljsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录;如果有,记作xx,***ljsll条记录,记录的列号从xx到xx+ljsll,记录的序号和有效性的值为0,记录的批次号cpph 、所属产品、所属部件、产品代号cpdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,***ljsll条记录,记录的列号从1到ljsll,记录的序号和有效性的值为0,记录的批次号cpph 、所属产品、所属部件、产品代号cpdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束;这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号 、部件名称、工序号、工序名称、列号、优先级、有效性相应字段;
10)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件;
11)测试子部件的记录数,记作lii_row[i+1];
12)判断有没有子部件,如果lii_row[i+1]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录;读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i] 、所属数量ljsl,赋值ljsll=ljsl*ljsll;重复步骤9)、10)、11)、12);如果lii_row[i+1]>0,表示有子部件;赋值i=i+1;读取子部件每一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc,所属产品zcc[i],所属部件zcb[i] ,所属数量ljsl,赋值ljsll=ljsl*ljsll;
13) 重复步骤9)、10)、11)、12) ;
14) 当光标指向i级的结尾时,回到父项,设置i=i–1;判断光标是回到父项的从第1条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第1条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i–1,直至i=1;
15)部件进度表按批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号字段升序排序,删除批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号都相同的记录中有效性为0的记录。
(5)运用一个子部件对应多个父部件且一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序号。
优先确定有效性为3、4或5的记录的下道工序,由部件进度表有效性为3、4或5的记录的非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下:
1)测试部件进度表有效性为3、4或5的记录数,如果记录数为0,退出本步骤;如果记录数不为0,作以下处理;
2)将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号、序号字段升序排序,读取部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号与上一条记录相同,则跳过;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号不相同,则将上一条记录作如下处理;
3)赋值wcrq的分钟记为mw;小时数记为hw,非作业时长记为zysc;
4)设置记录的本班次上班时间,如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;如果m=3,那么hs1=17,ms1=0,设置n1=n;
5)如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hs1)*60+(mw-ms1)+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+1,读取记录的下班次数据;如果m=4,那么m=1,n=n+1;读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2;记录下班次的上班时间的小时数和分钟数分别为hs和ms;如果m=1,赋值hs=8,ms=0;如果m=2,赋值hs=12,ms=30;如果m=3,赋值hs=17,ms=0;如果读不到工序时间表的记录,那么回到本步骤8)开始处循环,直到读到记录,xx=(n-n1)*1440+(hs2-hs1)*60+(ms2-ms1),yy=(n-n1)*1440+(hs-hs1)*60+(ms-ms1)+210;
9)如果tysc>210且tysc<=xx,那么ksrq的小时数为hs2,分钟数为ms2;
如果tysc>xx且tysc<=yy,那么非作业时长zysc=zysc-((n-n1)*1440+(hs2-hw)*60+(ms2-mw));ksrq的小时数为hs2 +int((ms2 + zysc)/60), 分钟数为mod((ms2 + zysc),60);
如果tysc>yy,那么设置hs1=hs,ms1=ms,hw=hs2,mw=ms2,回到本步骤9)开始处循环,直到tysc>xx不成立;
10)判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
11)如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为ljsl,说明子部件与父部件的关系为ljsl条子部件对应1条父部件;读取工序号为1,序号为0的同批次号的父部件的所有子部件,其记录数记作xx1, 再读取工序号为1,序号为0的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;
12)如果该部件的工序号为1的父部件的记录的开始时间不为空,那么记作ksrq1,取ksrq与ksrq1的最大值为ksrq,那么该部件的父部件的工序号为1的记录的开始时间设置为ksrq;同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
13)如果父部件的子部件对应了xx3次父部件,则将该父部件的有效性改为1;
14) 循环处理每条记录,循环结束后按同样的方法处理最后一条记录;
15)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序;依此方法依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
(6)根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法,生成部件进度表开始时间、结束时间、顺序号、转向工序号、转向工序名、转向顺序的内容如下:
1)部件进度表按工序号为1且有效性为0条件过滤,确定部件进度表对应记录的有效性为1且初定部件进度表有效性为1的记录的开始时间,方法如下:
测试部件进度表记录数,记作g_rownumber,如果g_rownumber=0,表示部件进度表没有可操作的记录,程序结束;如果g_rownumber>0,表示部件进度表有可操作的记录,读取部件进度表第一条记录的产品代号记作变量cpdh、部件代号记作ljdh;
查找部件进度表中所属产品等于cpdh,所属部件等于ljdh,有效性为0的记录,如果查到,说明有子部件,跳出本节内容;如果查不到,表示没有子部件,将部件进度表有效性设置为1,设置部件进度表中该记录的开始时间的日期为今天today()后1天,时间为8点;
依次读取部件进度表的下一条记录的产品代号记作变量cpdh、部件代号记作ljdh,重复上述内容;……经过g_rownumber次循环,取值、过滤、判断,就确定了部件进度表中每条记录的有效性是否为1,并初步确定有效性字段为1的记录的开始时间;
2)初定缺件补齐时间表对应部件进度表中的记录的初始时间,方法如下:
测试缺件补齐时间表的记录数为g_rownumber,如果g_rownumber>0,表示缺件补齐时间表有记录;以g_rownumber为循环次数作循环,读取缺件补齐时间表中的第一条记录的补齐日期、产品代号、部件代号,在产品明细表中查找父部件,读取父部件的所属产品、所属部件、工序名称字段数据,将作为条件,查找部件进度表中的对应记录,读取部件进度表对应记录的开始时间;如果缺件补齐时间表中的补齐日期的第二天与时间08:00合成,生成的日期时间大于部件进度表对应记录的开始时间,那么将该缺件补齐时间表中的补齐日期的第二天与时间08:00合成生成的日期时间设置给该缺件所属部件在部件进度表中对应记录的开始时间;
3)工序时间表按有效性为0的过滤条件进行过滤,部件进度表按有效性1的过滤条件进行过滤;测试部件进度表的记录数记作g_rownumber,测试工序时间表的记录数记作g_rownumber1;如果都大于0,那么读取部件进度表的第一条记录;用DO…LOOP WHILE condition 循环语句做以下步骤4)、5)、6)、7)、8)的处理;
4) 运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法,确定有效性为1的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下:
部件进度表按开始时间、优先级、工序名称、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序;
工序时间表按次序号、起始时间、工序名称、顺序号字段升序排序;
确定有效性为1的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下:
读取部件进度表第一条记录的工序名称赋值给变量gxmc、开始时间赋值给ksrq;
计算ksrq为今天today()后的第几天,值赋给n,根据ksrq的小时数变量hk判断作业时间段,通过取最有利时间的方法来确定,即如果hk>=8且hk<12,那么是上午班,m=1,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)过滤条件进行过滤,测试工序时间表的记录数li_row;如果记录数li_row大于0,读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,取qsrq和ksrq最大值赋给 ksrq,设置部件进度表本条记录的开始时间为ksrq,次序号为(n-m),顺序号为yy;如果测试工序时间表的记录数li_row不大于0,那么m=m+1;如果m=4,那么m=1,n=n+1,回到本步骤4)开始处循环,直到记录数大于0,即找到空余时间段;
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、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc<210且mw>=60,那么结束时间wcrq的小时数为hw= hk +int((mk + zysc )/60), 分钟数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc=210,那么结束时间wcrq的小时数为hw= hk +int((mk +zysc )/60), 分钟数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1;
如果tysc>210,那么作以下处理:
6)设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m的该记录的有效性为1,同时需将部件进度表对应记录拆分成两部分记录;
部件进度表对应记录拆分成的第一部分记录的开始时间为原开始时间不变,hs1、ms1分别表示下班时间的小时数和分钟数;如果m=1,那么hs1=11,ms1=30;如果m=2,那么hs1=16,ms1=00;如果m=3,那么hs1=20,ms1=30;部件进度表对应记录拆分成的第一部分记录的结束时间的日期设置为今天today()后n天,时间的小时为hs1,时间的分钟为ms1;部件进度表对应记录拆分成的第一部分记录的有效性为2;部件进度表该记录第一部分记录的作业时长为(hs1-hk)*60+(ms1–mk),部件进度表该记录第一部分记录的时长为0.00,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1,zysc=zysc-(hs1-hk)*60-(ms1-mk);
m=m+1,如果m=4,那么m=1,n=n+1,工序时间表按工序名称为gxmc、有效性为0、次序号为(n-m)过滤条件进行过滤;测试工序时间表的记录数li_row,如果记录数li_row大于0,***新的记录行做为部件进度表对应记录第二部分记录,批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、优先级、列号、非作业时长与原记录保持不变,其有效性值为2,作业时长为zysc;读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,将qsrq设置给部件进度表的开始时间,设置其次序号为(n-m),顺序号为yy;如果工序时间表记录数li_row不大于0,那么回到本步骤6)开始处循环,直到记录数大于0,即找到空余时间段;
确定第二部分结束时间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、有效性为0、次序号为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、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc=210,那么其结束时间wcrq的分钟数为hw= hk +int((mk+ zysc )/60), 小时数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1;
如果tysc>210,回到步骤6)即本步骤开始处循环,直至tysc>=210不成立;这样就设置部件进度表记录的结束时间wcrq、有效性2;确定了新***记录的次序号、顺序号、序号三个字段;设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m、顺序号为yy的记录的起始时间wcrq或有效性1;
7)由部件进度表非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下:
赋值wcrq的分钟记为mw;小时数记为hw,非作业时长记为zysc;
设置记录的本班次上班时间,如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;如果m=3,那么hs1=17,ms1=0,设置n1=n;
如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hs1)*60+(mw-ms1)+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+1,读取记录的下班次数据;如果m=4,那么m=1,n=n+1,读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2;记录下班次的上班时间的小时数和分钟数分别为hs和ms;如果m=1,赋值hs=8,ms=0;如果m=2,赋值hs=12,ms=30;如果m=3,赋值hs=17,ms=0;如果读不到工序时间表的记录,那么回到本节开始处循环,至到读到记录,xx=(n-n1)*1440+(hs2-hs1)*60+(ms2-ms1),yy=(n-n1)*1440+(hs-hs1)*60+(ms-ms1)+210;
如果tysc>210且tysc<=xx,那么ksrq的小时数为hs2,分钟数为ms2;如果tysc>xx且tysc<=yy,那么非作业时长zysc=zysc-((n-n1)*1440+(hs2-hw)*60+(ms2-mw));ksrq的小时数为hs2 +int((ms2 + zysc )/60), 分钟数为mod((ms2 + zysc),60);如果tysc>yy,那么设置hs1=hs,ms1=ms,hw=hs2,mw=ms2,回到本步骤7)开始处循环,直到tysc>xx不成立;
8) 运用多对多关系的对应等方法找出部件进度表下道工序或父部件第一道装配工序,将开始时间和有效性赋值
判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为ljsl,说明子部件与父部件的关系为ljsl条子部件对应1条父部件;读取工序号为1,序号为0的同批次号的父部件的所有子部件,其记录数记作xx1, 再读取工序号为1,序号为0的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;
如果该部件的工序号为1的父部件的记录的开始时间不为空,那么记作ksrq1,取ksrq与ksrq1的最大值为ksrq,那么该部件的父部件的工序号为1的记录的开始时间设置为ksrq,同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
如果父部件的子部件对应了xx3次父部件,则将该父部件的有效性改为1;
9)用DO…LOOP WHILE condition 循环语句,进行步骤4)、5)、6)、7)、8);按这种方法一直下去,当部件进度表正在确定的所有部件均没有父部件,且其对应的所有装配工序的开始时间和结束时间都确定后,即部件进度表的开始时间、结束时间、顺序号都生成后,或者工序时间表的所有记录的有效性都为1后,循环结束;
10)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序,依此规则依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
四、显示最佳路径以甘特图方式显示。
(1)注释
1)显示最佳路径的甘特图表包含天数、班次、顺序号和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, 0, 0), 非空值为rgb( 0, 255, 0);
3)选择显示最佳路径的甘特图表显示的截止日期,考虑显示的甘特图表的清晰度要求,最佳路径的甘特图表显示的时间间隔选择十分钟,上午班、下午班、晚班的作业时长均按210分钟计算;
4)显示最佳路径的甘特图表按工序单元的工序名称分成八个;部件进度表分别按八个工序单元的工序名称字段过滤,分别得到甘特图表菜单钳装、装擦、电装、电调、总校、联调、装箱、装外八个子菜单,表示八个工序单元的甘特图表;
(2)以电装工序为例,由部件进度表显示最佳路径的甘特图表的步骤如下:
1)部件进度表按次序号、顺序号、开始时间、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序;
2)部件进度表按工序名称字段过滤条件进行过滤;
3)测试部件进度表的记录数,如果等于0,表示部件进度表按上述条件过滤后没有记录,退出本步骤;
4)如果部件进度表的记录数大于0,设置循环语句依次读取从部件进度表的每一条记录;
5)读取部件进度表的第一条记录的次序号,用函数找出‘-’在次序表中按从左到右的位置,记作l_i[5];取次序号从左第1个到第(l_i[5]-1)个字符串,转换成Integer类型值,赋值给甘特图表的天数字段,从第(l_i[5]+1)个到最左边字符串,转换成Integer类型值,赋值给甘特图表班次字段;设班次字段用变量m表示;则m的值为1、2或3;如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;m=3,那么hs1=17,ms1=0;
读取部件进度表第一条记录的顺序号赋值给甘特图表的顺序号字段;
读取部件进度表的第一条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq;
读取部件进度表的第一条记录的产品代号赋值给变量cpdh,部件代号赋值给变量ljdh;
判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是:
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<10,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>0则查找甘特图表本条记录S10字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S10字段;
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<20,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S20字段;
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<30,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S30字段;
……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<210,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>200则查找甘特图表本条记录S210字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S210字段;
6)读取部件进度表的第二条记录的次序号赋值给字符型变量zcc,用函数找出‘-’在zcc中按从左到右的位置,记作l_i;取zcc从左第1个到第(l_i[5]-1)个字符串,转换成Integer类型值赋值给数值型变量n;从第(l_i[5]+1)个到最左边字符串,转换成Integer类型值赋值给数值型变量m,读取部件进度表第二条记录的顺序号设置给数值型变量l_i;查找甘特图表中天数等于n,班次等于m,顺序号等于l_i的记录,如果查找到,表明甘特图表有符合条件的记录,记作li_row;如果查不到,表明甘特图表没有符合条件的记录,在甘特图表***新的记录,记录号为li_row,***的甘特图表的新记录的天数字段赋值为n,班次字段赋值为m,顺序号字段赋值为l_i;
m的值为1、2或3;如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;m=3,那么hs1=17,ms1=0;
读取部件进度表的第二条记录的开始时间赋给变量ksrq,结束时间赋值给变量wcrq;
读取部件进度表的第二条记录的产品代号赋值给变量cpdh,部件代号赋值给变量ljdh;
判断部件进度表记录的时间在甘特图表半天21个时间段的哪一段,过程是:
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<10,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>0则查找甘特图表本条记录S10字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S10字段;
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<20,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>10则查找甘特图表本条记录S20字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S20字段;
如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<30,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>20则查找甘特图表本条记录S30字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S30字段;
……用同样的方法一直到判断部件进度表记录的时间是否在甘特图表半天第21个时间段;如果不等式(hour(ksrq)-hs1)*60+(Minute(ksrq)-ms1)<210,同时(hour(wcrq)-hs1)*60+(Minute(wcrq)-ms1)>200则查找甘特图表本条记录S210字段是否有数据,如果没有,将变量string(cpdh+’-’+ljdh)赋值给S210字段;
7)依次读取部件进度表的第三条到最后一条记录,用步骤6)的方法完成甘特图表数据的赋值;
五、作业进程返馈过程如下。
(1)注释:
1)作业情况表包括序号、产品代号、部件代号、部件名称、批次号、工序号、工序名称、开始时间、结束时间、作业人员、作业时长、备注十二个字段。作业情况表在作业人员勾选时程序自动将不同时间获取的信息为相应字段赋值。
2)异常反馈表包含序号、产品代号、部件代号、部件名称、批次号、工序号、工序名称、异常现象、异常类别、解决措施、原因分析、填报人员、解决人员、填报日期、预完日期和备注字段。异常反馈表由技术人员填报。
3)作业指导书包含:产品代号、部件代号、部件名称、工序号、工序名称、作业号、作业内容、设备、工装、辅助材料和备注字段。作业指导书由技术人员填报。
(2)用today()和time()可以获取本机当时的日期和当时的时间;为了防止作业人员本人通过修改本机时间达到修改作业时长的目的,程序采用自动读取服务器时间做为***时间的方法,增加开始时间、结束时间两种时间数据的客观性;自动获取作业时间的具体步骤如下:
1)为读取服务器时间设置一个游标:declare get_date cursor for select getdate();
2)打开游标:open get_date;
3)设置给变量tt_d:fetch get_date into :tt_d ;
4)关闭游标:close get_date;
(3)作业“开工勾选”的步骤是:
1)当作业人员开始作业时,在显馈终端的一体机上,用本人设置的密码登录,显示甘特图窗口;
2) 在甘特图窗口,双击甘特图表,在上方部件进度表经过过滤的相关记录的记录行双击进行“开工勾选”;
3)程序自动获取勾选时服务器的时间,设置给部件进度表对应记录的开始时间字段;设置部件进度表该记录的有效性字段的值为3;
4)同时作业情况表***一条记录,将作业情况表***的记录的批次号、产品代号、部件代号、部件名称、工序号、工序名称、开始时间、作业人员字段赋值;
(4)作业完成后,作业人员需进行作业“完工勾选”;作业“完成勾选”的步骤是:
1)当作业人员完成作业后,在显馈终端一体机上在用本人设置的密码登录的作业指导书窗口,单击“完工勾选”按钮进行“完工勾选”,作业指导书窗口退出;
2)进行作业“完工勾选”时,读取服务器时间设置给部件进度表对应记录的结束时间。填报实际作业时长设置给部件进度表的作业时长字段;
3)设置部件进度表中该记录的有效性字段的值为5。
4)根据产品代号、部件代号、批次号、工序号、作业人员信息查找对应记录、找到后,将获取的服务器时间赋值给结束时间;
5)如果作业没有完成,不需要进行“完工勾选”,想退出作业指导书窗口,单击 “退出”按钮;
(5)作业发生异常时,作业人员需进行作业“异常反馈”;作业“异常反馈”的步骤是:
1)对已作 “开工勾选”的作业对象,在作业过程中,单击作业指导书窗口“异常反馈”按钮;
2)当作业发生异常时单击“异常反馈”按钮,进入“异常反馈”窗口;
3)部件进度表中该记录的有效性为4;作业人员填报作业发生的异常现象;同时填写因异常导致的作业时长延长的时间;
4)技术人员到现场解决异常后,填写异常原因和解决措施;
5)部件进度表数据刷新时,按新的作业时长调整数据;
实施例
一、在图1自动寻找具有从属关系产品的部件装配最佳路径的方法结构图;
录入或导入产品明细表、装配流程表、生产计划表、缺件补齐时间表数据;
调整产品优先级、正常上班时间各工序作业人员的人数和加班时间各工序作业人员的人数;
根据产品从属关系、产品装配流程、生产计划时间、产品配套时间、缺件补齐时间、异常推迟时间、实际完成时间、产品优先级、正常上班时间和各工序作业人员的人数和加班时间各工序作业人员的人数等因素,自动完成部件进度表的计算;
二、在图2自动寻找具有从属关系产品的部件装配最佳路径的方法硬件配置图所示的配置,组建局域网;一台服务器放在专门机房的机架上,通过一台48端***换机和网线与客户端相连;客户端设计7台采集终端、1台控制终端、38台显馈终端;7台采集终端和1台控制终端采用普通台式机,38台显馈终端采用一体机。
服务器和交换机一同放在中心机房的机架上;服务器存放客户端数据,交换机将服务器和采集终端、控制终端、显馈终端连接;采集终端采集产品明细表、装配流程表、作业指导书等技术数据和生产计划表、缺件补齐时间表、加班表等管理数据;控制终端用于通过密码类型控制各类工序作业***和生产计划表中产品的优先级;显馈终端显示甘特图、作业指导书和进行作业“开工勾选”、“完工勾选”和“异常反馈”。
在图2智能作业控制方法硬件配置图控制终端台式机上通过修改生产计划表的优先级字段的数值大小改变产品优先级,通过生产能力计算结果来改变作业***,通过改变密码表的密码类型来同步改变作业人员显示信息。
在图2智能作业控制方法硬件配置图采集终端台式机,管理人员录入和查询加班表、生产计划表、缺件补齐时间表;技术人员导入产品明细表、装配流程表和作业指导书等技术数据。
在图2自动寻找具有从属关系产品的部件装配最佳路径方法硬件配置图显馈终端的一体机显示最佳路径甘特图。显示最佳路径甘特图界面分两部分,下部分为最佳路径甘特图,它用21个字段表示间隔10分钟,时长半天210分钟的甘特图表,表示有作业的空间的背景色设置与表示没有作业的空间的背景色不同;上部分是部件进度表;通过双击甘特图表中记录的任意一行,部件进度表得到符合条件的相关记录;
在图2智能作业控制方法终端图上的显馈终端的一体机上,正常作业需要进行作业“开工勾选”和作业“完工勾选”。退出时程序自动填报作业情况表,并修改反馈部件进度表的开始时间等信息。同时调用数字装配工艺。发生异常作业时填报异常情况反馈表,同时修改部件进度表中的完成时间和作业时长信息。在图2自动寻找具有从属关系产品的部件装配最佳路径的方法终端图上的显馈终端的一体机上,显示作业内容。
Claims (6)
1.一种自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于将多品种小批量生产方式的离散型企业,按相似性分成八个生产单元,每个单元又安排可控制数量的工位,半天按210分钟计算,根据包含各种因素的信息的多种表,寻找控制具有从属关系产品的每一个部件在每一个工位上装配的最佳时间点;最佳时间点用包含开始时间、结束时间和表示每个单元工位顺序的顺序号三个字段的部件进度表来表达,具体步骤如下:
(1)由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达三种方法生成工序时间表;
(2)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号;
(3)对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段;
(4)运用一个子部件对应多个父部件且一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序号;
(5)根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法。
2.根据权利要求1所述的自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于步骤(1)中由加班表和工序单元工位表运用显示区间天数的确定,周末的判断,循环中日期和时间的表达三种方法生成工序时间表,步骤如下:
1)清除工序时间表原来的数据;
2)用户输入截止日期em_2,今天的第二天与截止日期之间的日期称为显示区间,记作变量xx;
3)如果截止日期的年份等于今天today()的年份,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到截止日期月份的前一个月期间每个月最后一天的号数的累加和;
4)如果截止日期的年份等于今天today()的年份加1,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到今天today()当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数的累加和;
5)如果截止日期的年份大于今天today()的年份加1,显示区间的天数xx为截止日期的号数,减去今天today()的号数,加上从今天today()的月份到今天today()当年十二月期间每个月最后一天的号数,加上截止日期当年一月到截止日期月份前一个月期间每个月最后一天的号数,加上从今天today()的次年一月到截止日期前一年十二月期间每个月最后一天的号数的累加和;
6)取每个月最后一天的方法为:月份设为变量li_month,如果li_month=12,那么最后一天的号数为31;如果li_month<12,那么下个月月份为本月加1,即li_month+1,每个月的最后一天就是下个月1号的前一天;
7)以显示区间的天数为第一层循环的次数,以工序单元工位表的工序名称字段为第二层循环的次数,以工序单元工位表的工位数字段为第三层循环次数进入循环,依次读数、赋值、设置直至完成三层循环,工序时间表完成设置;
8)在步骤7)的循环中,依次读数、赋值、设置直至完成三层循环的方法如下:
读取工序单元工位表中每条记录的工序名称,设置给工序时间表的工序名称字段;
读取工序单元工位表中每条记录的工位数,设置给工序时间表的顺序号字段;
工序时间表的次序号用两位数n-m表示,n表示今天today()后第几天数,n从1到xx;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()后的第n天日期,判断第n天是不是星期天或星期六;如果是,那么工序单元工位表中的工位数不参与循环;
工序时间表的有效性均设为0;
读取加班表中的记录;将工序时间表按顺序号字段降序排列;查找工序时间表中对应同时段并且同工序名称的记录的顺序号;如果查找到,则***新的相应记录,记录的顺序号从查找到的顺序号以后排;如果查找不到,则***新的相应记录,记录的顺序号从1开始排,直到循环结束;
9)工序时间表生成后,按工序名称、起始时间、次序号字段升序,顺序号字段降序排序。
3.根据权利要求1所述的自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于步骤(2)保留部件进度表表示已开工的、异常的、完工的记录,清除其他记录,并绑定部件进度表的保留记录与工序时间表对应的顺序号的内容如下:
1)有效性0表示项目确定;有效性1表示开始时间确定;有效性2表示结束时间确定;有效性3表示已作开工“作业勾选”;4表示已填报作业异常;有效性5表示已作完成“作业勾选”;
2)保留有效性为3,或有效性为4或有效性为5的记录,清除部件进度表的其它数据;
3)整理保留的有效性为3、或4、或5的记录,将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段升序排序,设置批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录序号从1开始重新设置;将部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号相同,列号不相同的记录列号从1开始重新设置。
4.根据权利要求1所述的自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于步骤(3):对多种具有不固定子部件级数和多道装配工序的产品采用不固定嵌套循环层数和数组的方法,根据产品从属关系、产品装配流程、生产计划、正常上班时间各单元工位数和加班时间各单元工位数五种因素,生成部件进度表所有记录项,生成所有记录项时赋值批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、列号、序号、优先级、作业时长、非作业时长、有效性字段的内容如下:
1)生产计划表按批次号、产品代号、部件代号、开始时间字段升序排序;
2)生产计划表按完成情况不等于‘完成’条件进行过滤;
3)测试生产计划表记录数,记作li_row,如果li_row=0,退出本步骤;如果li_row>0,表示生产计划表有记录;
4)读取生产计划表第一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、批次号cpph、数量ljsll、优先级yxji字段的数值;
5)以产品代号为cpdh、部件代号为ljdh过滤条件对装配流程表过滤,测试部件对应于装配流程表的记录数,记作g_rownumber;如果g_rownumber=0,表示装配流程表没有记录,转到下一节的内容;如果g_rownumber>0,表示装配流程表有记录,以g_rownumber为二层循环次数,以ljsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号都相同的记录,如果有,记作xx;那么***ljsll条记录,记录的列号从xx到(xx+ljsll),记录的序号和有效性的值为0,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号ljdh 、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,***ljsll条记录,记录的列号从1到ljsll、记录的序号和有效性的值为0,记录的批次号cpph、所属产品zccp、所属部件zcbj、产品代号cpdh、部件代号ljdh 、部件名称Ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束,这样就将对应的所有工序单元的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号 、部件名称、工序号、工序名称、列号、序号、优先级、有效性相应字段;
6)将产品明细表按产品代号cpdh,部件代号ljdh字段过滤,得到产品明细表中的所有子部件;
7)设置变量循环层数i,数组string zcc[20],zcb[20] ,long lii_row[20],赋值i=1;
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、所属产品zcc[i]、所属部件zcb[i] 、所属数量ljsl,赋值ljsll=ljsl*ljsll;
9)以产品代号cpdh、部件代号ljdh为过滤条件对装配流程表过滤,测试装配流程表记录数,记作g_rownumber;如果g_rownumber=0,表示装配流程表没有记录,转到下一节;如果g_rownumber>0,表示装配流程表有记录,表示装配流程表有记录,以g_rownumber为二层循环次数,以ljsll为三层循环次数;读取装配流程表第一条记录的工序号gxh和工序名称gxmc,在部件进度表中查找有没有批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号相同的记录;如果有,记作xx,***ljsll条记录,记录的列号从xx到xx+ljsll,记录的序号和有效性的值为0,记录的批次号cpph 、所属产品、所属部件、产品代号cpdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;如果没有,***ljsll条记录,记录的列号从1到ljsll,记录的序号和有效性的值为0,记录的批次号cpph 、所属产品、所属部件、产品代号cpdh、部件代号ljdh、部件名称ljmc、工序号gxh、工序名称gxmc、列号、序号、优先级yxji、有效性字段赋值;然后光标指向装配流程表下一条记录……直到二层循环结束;这样就将对应的所有工序的信息设置给部件进度表中的批次号、所属产品、所属部件、产品代号、部件代号 、部件名称、工序号、工序名称、列号、优先级、有效性相应字段;
10)将产品明细表按zcc[i],zcb[i]字段过滤,得到所有子部件;
11)测试子部件的记录数,记作lii_row[i+1];
12)判断有没有子部件,如果lii_row[i+1]=0,表示没有子部件,那么恢复父项过滤条件;光标指向下一条记录;读取下一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc、所属产品zcc[i]、所属部件zcb[i] 、所属数量ljsl,赋值ljsll=ljsl*ljsll;重复步骤9)、10)、11)、12);如果lii_row[i+1]>0,表示有子部件;赋值i=i+1;读取子部件每一条记录的产品代号cpdh、部件代号ljdh、部件名称ljmc,所属产品zcc[i],所属部件zcb[i],所属数量ljsl,赋值ljsll=ljsl*ljsll;
13) 重复步骤9)、10)、11)、12) ;
14) 当光标指向i级的结尾时,回到父项,设置i=i–1;判断光标是回到父项的从第1条到第li_row[i]条记录之间的一条记录还是父项的结尾记录;如果是回到父项的从第1条到第li_row[i]条记录之间的一条记录,则恢复父项的过滤条件,进行下一条记录的测试和判断;如果是回到父项的结尾记录,则进入上一层循环,再次设置i=i–1,直至i=1;
15)部件进度表按批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号字段升序排序,删除批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、列号都相同的记录中有效性为0的记录。
5.根据权利要求1所述的自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于步骤(4)中:运用一个子部件对应多个父部件,一个父部件对应多个子部件的多对多关系的对应方法,确定部件进度表保留记录的转向单元的工序号、转向工序名、转向顺序号的内容如下:
1)测试部件进度表有效性为3、4或5的记录数,如果记录数为0,退出本步骤;如果记录数不为0,作以下处理;
2)将部件进度表中按批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号、序号字段升序排序,读取部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号字段;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号与上一条记录相同,则跳过;如果读取的部件进度表中批次号、所属产品、所属部件、产品代号、部件代号、工序号、列号不相同,则将上一条记录作如下处理;
3)赋值wcrq的分钟记为mw;小时数记为hw,非作业时长记为zysc;
4)设置记录的本班次上班时间,如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;如果m=3,那么hs1=17,ms1=0,设置n1=n;
5)如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hs1)*60+(mw-ms1)+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+1,读取记录的下班次数据;如果m=4,那么m=1,n=n+1;读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2;记录下班次的上班时间的小时数和分钟数分别为hs和ms;如果m=1,赋值hs=8,ms=0;如果m=2,赋值hs=12,ms=30;如果m=3,赋值hs=17,ms=0;如果读不到工序时间表的记录,那么回到本步骤8)开始处循环,直到读到记录,xx=(n-n1)*1440+(hs2-hs1)*60+(ms2-ms1),yy=(n-n1)*1440+(hs-hs1)*60+(ms-ms1)+210;
9)如果tysc>210且tysc<=xx,那么ksrq的小时数为hs2,分钟数为ms2;
如果tysc>xx且tysc<=yy,那么非作业时长zysc=zysc-((n-n1)*1440+(hs2-hw)*60+(ms2-mw));ksrq的小时数为hs2 +int((ms2 + zysc)/60), 分钟数为mod((ms2 + zysc),60);
如果tysc>yy,那么设置hs1=hs,ms1=ms,hw=hs2,mw=ms2,回到本步骤9)开始处循环,直到tysc>xx不成立;
10)判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
11)如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为ljsl,说明子部件与父部件的关系为ljsl条子部件对应1条父部件;读取工序号为1,序号为0的同批次号的父部件的所有子部件,其记录数记作xx1, 再读取工序号为1,序号为0的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;
12)如果该部件的工序号为1的父部件的记录的开始时间不为空,那么记作ksrq1,取ksrq与ksrq1的最大值为ksrq,那么该部件的父部件的工序号为1的记录的开始时间设置为ksrq;同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
13)如果父部件的子部件对应了xx3次父部件,则将该父部件的有效性改为1;
14) 循环处理每条记录,循环结束后按同样的方法处理最后一条记录;
15)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序;依此方法依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
6.根据权利要求1所述的自动寻找具有从属关系产品的部件装配最佳路径的方法,其特征在于步骤(5):根据产品配套时间、缺件补齐时间、实际完成时间、作业异常推迟时间、优先级五种因素,运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法、间断时间相加的方法、连续时间相加的方法、多对多关系的对应方法四种方法,生成部件进度表开始时间、结束时间、顺序号、转向工序号、转向工序名、转向顺序号的内容如下:
1)部件进度表按工序号为1且有效性为0条件过滤,确定部件进度表对应记录的有效性为1且初定部件进度表有效性为1的记录的开始时间,方法如下:
测试部件进度表记录数,记作g_rownumber,如果g_rownumber=0,表示部件进度表没有可操作的记录,程序结束;如果g_rownumber>0,表示部件进度表有可操作的记录,读取部件进度表第一条记录的产品代号记作变量cpdh、部件代号记作ljdh;
查找部件进度表中所属产品等于cpdh,所属部件等于ljdh,有效性为0的记录,如果查到,说明有子部件,跳出本节内容;如果查不到,表示没有子部件,将部件进度表有效性设置为1,设置部件进度表中该记录的开始时间的日期为今天today()后1天,时间为8点;
依次读取部件进度表的下一条记录的产品代号记作变量cpdh、部件代号记作ljdh,重复上述内容;……经过g_rownumber次循环,取值、过滤、判断,就确定了部件进度表中每条记录的有效性是否为1,并初步确定有效性字段为1的记录的开始时间;
2)初定缺件补齐时间表对应部件进度表中的记录的初始时间,方法如下:
测试缺件补齐时间表的记录数为g_rownumber,如果g_rownumber>0,表示缺件补齐时间表有记录;以g_rownumber为循环次数作循环,读取缺件补齐时间表中的第一条记录的补齐日期、产品代号、部件代号,在产品明细表中查找父部件,读取父部件的所属产品、所属部件、工序名称字段数据,将作为条件,查找部件进度表中的对应记录,读取部件进度表对应记录的开始时间;如果缺件补齐时间表中的补齐日期的第二天与时间08:00合成,生成的日期时间大于部件进度表对应记录的开始时间,那么将该缺件补齐时间表中的补齐日期的第二天与时间08:00合成生成的日期时间设置给该缺件所属部件在部件进度表中对应记录的开始时间;
3)工序时间表按有效性为0的过滤条件进行过滤,部件进度表按有效性1的过滤条件进行过滤;测试部件进度表的记录数记作g_rownumber,测试工序时间表的记录数记作g_rownumber1;如果都大于0,那么读取部件进度表的第一条记录;用DO…LOOP WHILE condition 循环语句做以下步骤4)、5)、6)、7)、8)的处理;
4) 运用条件符合时参与排序、把表示工件的部件进度表的开始时间与表示工位的工序时间表的起始时间作比较取最有利时间的方法,确定有效性为1的部件进度表记录的开始时间datetime ksrq和顺序号的方法如下:
部件进度表按开始时间、优先级、工序名称、批次号、所属产品、所属部件、产品代号、部件代号、列号、序号字段升序排序;
工序时间表按次序号、起始时间、工序名称、顺序号字段升序排序;
读取部件进度表第一条记录的工序名称赋值给变量gxmc、开始时间赋值给ksrq;
计算ksrq为今天today()后的第几天,值赋给n,根据ksrq的小时数变量hk判断作业时间段,通过取最有利时间的方法来确定,即如果hk>=8且hk<12,那么是上午班,m=1,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)过滤条件进行过滤,测试工序时间表的记录数li_row;如果记录数li_row大于0,读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,取qsrq和ksrq最大值赋给 ksrq,设置部件进度表本条记录的开始时间为ksrq,次序号为(n-m),顺序号为yy;如果测试工序时间表的记录数li_row不大于0,那么m=m+1;如果m=4,那么m=1,n=n+1,回到本步骤4)开始处循环,直到记录数大于0,即找到空余时间段;
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、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc<210且mw>=60,那么结束时间wcrq的小时数为hw= hk +int((mk + zysc )/60), 分钟数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc=210,那么结束时间wcrq的小时数为hw= hk +int((mk +zysc )/60), 分钟数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1;
如果tysc>210,那么作以下处理:
6)设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m的该记录的有效性为1,同时需将部件进度表对应记录拆分成两部分记录;
部件进度表对应记录拆分成的第一部分记录的开始时间为原开始时间不变,hs1、ms1分别表示下班时间的小时数和分钟数;如果m=1,那么hs1=11,ms1=30;如果m=2,那么hs1=16,ms1=00;如果m=3,那么hs1=20,ms1=30;部件进度表对应记录拆分成的第一部分记录的结束时间的日期设置为今天today()后n天,时间的小时为hs1,时间的分钟为ms1;部件进度表对应记录拆分成的第一部分记录的有效性为2;部件进度表该记录第一部分记录的作业时长为(hs1-hk)*60+(ms1–mk),部件进度表该记录第一部分记录的时长为0.00,设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1,zysc=zysc-(hs1-hk)*60-(ms1-mk);
m=m+1,如果m=4,那么m=1,n=n+1,工序时间表按工序名称为gxmc、有效性为0、次序号为(n-m)过滤条件进行过滤;测试工序时间表的记录数li_row,如果记录数li_row大于0,***新的记录行做为部件进度表对应记录第二部分记录,批次号、所属产品、所属部件、产品代号、部件代号、部件名称、工序号、工序名称、优先级、列号、非作业时长与原记录保持不变,其有效性值为2,作业时长为zysc;读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的第一条记录的顺序号赋值给变量yy,起始时间给变量qsrq,将qsrq设置给部件进度表的开始时间,设置其次序号为(n-m),顺序号为yy;如果工序时间表记录数li_row不大于0,那么回到本步骤6)开始处循环,直到记录数大于0,即找到空余时间段;
确定第二部分结束时间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、有效性为0、次序号为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、有效性为0、次序号为n-m,顺序号为yy的记录的起始时间wcrq;
如果tysc=210,那么其结束时间wcrq的分钟数为hw= hk +int((mk+ zysc )/60), 小时数为mw=mod((mk + zysc),60),设置该记录的有效性为2,设置该记录的完成时间为wcrq,设置其序号为1,如果第二部分再拆分,则第三部件序号为2,依次类推;设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m,顺序号为yy的记录的有效性为1;
如果tysc>210,回到步骤6)即本步骤开始处循环,直至tysc>=210不成立;这样就设置部件进度表记录的结束时间wcrq、有效性2;确定了新***记录的次序号、顺序号、序号三个字段;设置工序时间表工序名称为gxmc、有效性为0、次序号为n-m、顺序号为yy的记录的起始时间wcrq或有效性1;
7)由部件进度表非作业时长zysc与结束时间wcrq,用连续时间相加的方法确定部件进度表下道工序或父部件第一道装配工序的开始时间的方法如下:
赋值wcrq的分钟记为mw;小时数记为hw,非作业时长记为zysc;
设置记录的本班次上班时间,如果m=1,那么hs1=8,ms1=0;如果m=2,那么hs1=12,ms1=30;如果m=3,那么hs1=17,ms1=0,设置n1=n;
如果设置部件进度表下道工序或父部件第一道装配工序的开始时间为ksrq,ksrq与当班次上班时间的时长为tysc,那么tysc=(hw-hs1)*60+(mw-ms1)+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+1,读取记录的下班次数据;如果m=4,那么m=1,n=n+1,读取工序时间表工序名称为gxmc、有效性为0、次序号为n-m的记录;如果读到记录,设工序时间表的起始时间为的小时数和分钟数分别为hs2和ms2;记录下班次的上班时间的小时数和分钟数分别为hs和ms;如果m=1,赋值hs=8,ms=0;如果m=2,赋值hs=12,ms=30;如果m=3,赋值hs=17,ms=0;如果读不到工序时间表的记录,那么回到本节开始处循环,至到读到记录,xx=(n-n1)*1440+(hs2-hs1)*60+(ms2-ms1),yy=(n-n1)*1440+(hs-hs1)*60+(ms-ms1)+210;
如果tysc>210且tysc<=xx,那么ksrq的小时数为hs2,分钟数为ms2;如果tysc>xx且tysc<=yy,那么非作业时长zysc=zysc-((n-n1)*1440+(hs2-hw)*60+(ms2-mw));ksrq的小时数为hs2 +int((ms2 + zysc)/60), 分钟数为mod((ms2 + zysc),60);如果tysc>yy,那么设置hs1=hs,ms1=ms,hw=hs2,mw=ms2,回到本步骤7)开始处循环,直到tysc>xx不成立;
8)运用多对多关系的对应等方法找出部件进度表下道工序或父部件第一道装配工序,将开始时间和有效性赋值的方法如下:
判断部件进度表记录工序有没有下道工序,如果部件进度表本条记录的工序有下道工序,设置它的开始时间为ksrq,同时设置本条记录的下道工序的有效性字段为1,同时读取本条记录的下道工序的工序号、工序名称,写入本条记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
如果部件进度表本条记录的工序没有下道工序,则到产品明细表中查找产品代号、部件代号、所属产品、所属部件均对应的记录的单台数记为ljsl,说明子部件与父部件的关系为ljsl条子部件对应1条父部件;读取工序号为1,序号为0的同批次号的父部件的所有子部件,其记录数记作xx1, 再读取工序号为1,序号为0的同批次号的父部件,其记录数记作xx2,两者相除的结果记作xx3,表明父部件被查找xx3次其有效性就可以改为1,这样就建立了对于多个父部件对应多个子部件的多对多关系的对应的唯一性;
如果该部件的工序号为1的父部件的记录的开始时间不为空,那么记作ksrq1,取ksrq与ksrq1的最大值为ksrq,那么该部件的父部件的工序号为1的记录的开始时间设置为ksrq,同时读取其父部件的工序号和工序名称,写入该子部件记录转向工序号、转向工序名字段,做为工件完工勾选后的流转方向;
如果父部件的子部件对应了xx3次父部件,则将该父部件的有效性改为1;
9)用DO…LOOP WHILE condition 循环语句,进行步骤4)、5)、6)、7)、8);按这种方法一直下去,当部件进度表正在确定的所有部件均没有父部件,且其对应的所有装配工序的开始时间和结束时间都确定后,即部件进度表的开始时间、结束时间、顺序号都生成后,或者工序时间表的所有记录的有效性都为1后,循环结束;
10)将部件进度表不设置条件过滤,如果转向工序号为1,说明转向父部件,转向工序号不为1,说明转向下道工序,依此规则依次查找每条记录转向工序号、转向工序名对应的顺序号,填入记录的转向顺序号字段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210433117.XA CN102982405B (zh) | 2012-11-01 | 2012-11-01 | 自动寻找具有从属关系产品的部件装配最佳路径的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210433117.XA CN102982405B (zh) | 2012-11-01 | 2012-11-01 | 自动寻找具有从属关系产品的部件装配最佳路径的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102982405A true CN102982405A (zh) | 2013-03-20 |
CN102982405B CN102982405B (zh) | 2016-03-30 |
Family
ID=47856373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210433117.XA Active CN102982405B (zh) | 2012-11-01 | 2012-11-01 | 自动寻找具有从属关系产品的部件装配最佳路径的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102982405B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107367680A (zh) * | 2017-07-28 | 2017-11-21 | 华南理工大学 | Led光源产品电特性参数多工位单参数智能并发测试装置及方法 |
CN109426898A (zh) * | 2017-08-24 | 2019-03-05 | 阿里巴巴集团控股有限公司 | 作业任务分配方法、装置及计算机*** |
CN113302568A (zh) * | 2019-01-17 | 2021-08-24 | 日本电气株式会社 | 工序改进支持设备、工序改进支持方法和存储工序改进支持程序的记录介质 |
CN116442249A (zh) * | 2023-06-19 | 2023-07-18 | 广东隆崎机器人有限公司 | 装配控制方法、装配设备及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102739730A (zh) * | 2011-10-31 | 2012-10-17 | 李宗诚 | 产业价值链市场配置智能一体化操作***技术基础 |
-
2012
- 2012-11-01 CN CN201210433117.XA patent/CN102982405B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102739730A (zh) * | 2011-10-31 | 2012-10-17 | 李宗诚 | 产业价值链市场配置智能一体化操作***技术基础 |
Non-Patent Citations (4)
Title |
---|
张云龙: "《基于多品种、小批量的BX集团信息化实证研究》", 《中国优秀硕士论文电子期刊网》 * |
张欣: "《多品种小批量模式下生产过程控制的研究》", 《中国优秀硕士论文电子期刊网》 * |
王四宝等: "《多品种少批量制造环境下一种改进的生产计划算法》", 《四川兵工学报》 * |
苏路声: "《面向多品种小批量生产计划与控制研究》", 《中国优秀硕士论文电子期刊网》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107367680A (zh) * | 2017-07-28 | 2017-11-21 | 华南理工大学 | Led光源产品电特性参数多工位单参数智能并发测试装置及方法 |
CN107367680B (zh) * | 2017-07-28 | 2019-09-06 | 华南理工大学 | Led光源产品电特性参数多工位单参数智能并发测试装置及方法 |
CN109426898A (zh) * | 2017-08-24 | 2019-03-05 | 阿里巴巴集团控股有限公司 | 作业任务分配方法、装置及计算机*** |
CN109426898B (zh) * | 2017-08-24 | 2022-04-12 | 阿里巴巴集团控股有限公司 | 作业任务分配方法、装置及计算机*** |
CN113302568A (zh) * | 2019-01-17 | 2021-08-24 | 日本电气株式会社 | 工序改进支持设备、工序改进支持方法和存储工序改进支持程序的记录介质 |
CN116442249A (zh) * | 2023-06-19 | 2023-07-18 | 广东隆崎机器人有限公司 | 装配控制方法、装配设备及计算机可读存储介质 |
CN116442249B (zh) * | 2023-06-19 | 2023-08-18 | 广东隆崎机器人有限公司 | 装配控制方法、装配设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102982405B (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113344338B (zh) | 生产排程方法、***、设备及介质、生产排程管理平台 | |
CN102930397B (zh) | 离散型企业智能作业控制方法 | |
Willis | Critical path analysis and resource constrained project scheduling—theory and practice | |
US6591153B2 (en) | System and methods for scheduling manufacturing resources | |
US5233533A (en) | Scheduling method and apparatus | |
Fox et al. | ISIS: a constraint-directed reasoning approach to job shop scheduling | |
CN107016449B (zh) | 一种基于跨企业动态计划排程的智能制造方法 | |
CN102982405B (zh) | 自动寻找具有从属关系产品的部件装配最佳路径的方法 | |
JPH01171059A (ja) | データ処理システム中に維持されている予定表情報を関係付ける方法 | |
WO2013122842A1 (en) | Aggregating availability status information on shared calendars | |
CN109522661A (zh) | 一种建筑信息模型构件与工作分解结构关联方法及*** | |
CN101976240A (zh) | 表单编号生成方法和*** | |
CN110163524A (zh) | 一种基于敏捷开发管理的工作协同管理平台 | |
CN103914026B (zh) | 生产状态监控***及生产状态监控方法 | |
CN111178566A (zh) | 一种预定会议室的方法和*** | |
US20060195350A1 (en) | Design review, progress check information transmission method and apparatus | |
CN102722784A (zh) | 一种快速套清单或定额的方法 | |
CN102096857B (zh) | 一种数据处理过程的协同方法和装置 | |
CN112506957A (zh) | 工作流依赖关系的确定方法及装置 | |
CN115983551A (zh) | 一种智能工业排产方法、装置、设备及应用 | |
US7310562B2 (en) | System and method for scheduling mold manufacturing | |
CN115358537A (zh) | 一种基于多机型多架次的生产能力平衡方法 | |
US20040054562A1 (en) | Multi-perspective enterprise management tool | |
Fox et al. | ISIS: a constraint-directed reasoning approach to job shop scheduling, a system summary | |
US20230368309A1 (en) | Creating a time entry based on automatically tracking user activity |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |