排程算法具体逻辑
2022-11-03 17:04:23 2 举报
我写的APS生产排程详细代码逻辑图
作者其他创作
大纲/内容
检查工序开始时间是否在第一个冲突时间段范围内
取出零件
取出零件对应工序
否
发消息通知前端
循环检查每个工序
进入按产能排配
不修改任何数据
数据库查询所有设备
计算当前工序开始时间
结束检查
是否已存在冲突list
根据工序创建时间段
是
计算当前班别的非工作时间段的结束时间
实例化排配类型
开始时间加到第二天8点
取出工序
取上道工序计划结束时间
更新前置工序数据到数据库
取上道工序
计算工序有效时间
加入集合
1.设备必需可使用,产能>02.查询设备上正加工工序3.查询设备上锁定工序4.查询设备上锁定2天工序5.以上工序都会预先占用产能6.查询出设备对应班别
按无产能排配
是否调整了时间
进入算法
取第二天第一个班别的开始时间
将工序排到每台设备
此处工序3个判断是否委外是否按设备产能是否需要设备加工
检查当前工序与设备已排工序是否冲突并进行调整
当前工序开始时间与当前时间比较取最大
时间段调整
如:钢件顺排
返回运行结果
根据非工作时间计算有效工序时间段
计算开始时间
更新工序数据到数据库
计算前置工序时间
算法运行
与当前工序进行冲突检查
将最小时间段赋给当前工序时间段
进入无产能排配
按设备上配置的工序类型按紧急度
是否无干涉
返回设备和对应工序
批号开始时间和当前时间取最大值
前置工序逆排计算:结束时间=当前工序开始时间开始时间=结束时间-工时-工序预留时间
进入单个零件批号算法
获取工序对应非工作时间
非工作日为周未或节假日根据行事历配置
加工时间早于计划时间
加入总集合,和本次检查集合
循环每一个班别
钢材电极模拟可行性
进入获取待排零件
移动工序开始时间点到冲突时间的结束时间点位置
进行时间段干涉检查
循环每一天
如果加工开始时间早于计划开始,会把计划开始时间拉回加工开始时间
循环非工作时间段
返回零件工序
循环每个零件批号
运行结束
合并所有工序并按开始时间排序
取上道工序加工开始+工时
上道工序是否加工
返回运算后零件工序
进入排程数据初始化
有效时间=除去非工作时间
将当前时间段移动到最后一个工序的结束时间上(如果有实际时间取实际时间)注意移动后时间长度变回原长度(原预估工时长度,因为在非工作时间检查时可能会调长)
将排配工序加入设备工序list
是否第一个工序
检查冲突集合是否为空
进入获取设备信息
移动开始时间
之前有冲突的时间段都存放在冲突总的list中,下次冲突检查就不能检查
runFlag=1
如果调整时间需要再检查一次
更新排程参数
是否有前置工序
获取设备信息
创建时间段
开始时间=当前班别的结束时间
单个零件批号计算结束
顺排逆排
称动工序开始时间点到冲突时间的结束时间点位置
检查工序时间段是否与非工作时间段冲突
开始时间不能在冲突时间段内
干涉时间段添加到干涉列表
当前班别是否非工作日
得到上道工序结束时间
计划时间拉回到加工时间
对设备工序list排序
循环每台设备进行排配
结束时间加到第二天
加入非工作时间段集合
数据库查询待排零件
优先急排序
排程数据初始化
取当前工序的时间的开始时间前一天和结束时间后一天当做计算范围
传入参数:1.批号开始时间2.入库时间3.紧急度4.工序list5.所有设备list
按开始时间对非工作时间段集合排序
工序如果有完成时间取完成时间进行比较
转成算法零件工序对象
是否入库
计算时间范围
为了计算方便转换成timeField
获取排程参数配置
注入排配方式
进入设备工序冲突检查
单个零件算法运行
取上道工序加工结束时间
如果工序时间段和非工作时间段有冲突,就会调整时间,调整后必需重新检查与后面时间是否有冲突
开始时间=下个班别的开始时间
更新运行标记runFlag=0更新最后运行时间
与批号计划开始比较取最大
1、 交期剩余时间(交期-当前时间)2、 紧急程度3、 主工件
时间调整需重新检查
获取排配方式
批号工序按seqno排序
如果加工开始时间早于计划开始,会把计划开始时间拉回加工开始时间,如果只开始没结束,计划开始=实际开始+预估工时
退出本次循环
取排配到设备上的工序的最小开始时间段
当前工序开始时间=上道工序结束时间+工序物流时间
是否找到设备
统计总的冲突时间
是否按产能
排配方式注入排程参数
是否最后一个班别
按设备产能排配
获取排配类型
进入单台设备排配
移动结束时间
计算当前班别的非工作时间段的开始时间
1、 工序没有实际开始时间2、 是批号分批的工序3、 零件没有取消4、 批号没有终止、作废、锁定5、不查出两天锁定工序
进入创建非工作时间段
获取待排零件
是否加工
检查冲突
得到运算后工序
查找加工设备
将时间段移到开始时间
排配方式注入行事历
当天班别转换
将工序结束时间向工序结束时间点移动总冲突时数时长
如果有交集表示冲突,交集检查:op1.startPoint<op2.endPointop1.endPoint>op2.startPoint
返回是否调整过时间标记
获取行事历
更新工序修改时间
将查查出的班别转换成时间段方便后面计算一天会有多个班别时间段,所以转换后是个list注意:每转换一个班别,班别总时数都要跟产能做比较,如果总时数大于总产能,此班别要切割到最大产能处
上道工序是否加工完成
0 条评论
回复 删除
下一页