我正试图建立一个生产工厂的虚拟模型。为此,我创建了以下结构:
首先,必须有一个部件文件,该文件显示所有已处理的部件。对于每个部件,都有一个生产周期的各个阶段的列表,这些阶段发生在不同的机器或同一类型的instruments
的信息来设置每个车间对象的自动化级别。
我的问题是,我创建的用相应部分填充每个车间的set_part方法似乎不起作用。
我在这里和那里放置了一些print语句,以检查发生了什么,并且似乎在加载器类中正确地创建了对象,但是它们没有从那里离开。
这是代码:
class Phase:
def __init__(self, seq, workshop, placings):
self.seq = seq
self.workshop = workshop
self.placings = placings
class Part:
def __init__(self, name, phases, workshop):
self.name = name
self.phases = phases
self.workshop = workshop
class Workshop:
def __init__(self, name, shifts, shift_dur):
self.name = name
self.shifts = shifts
self.shift_dur = shift_dur
self.parts = []
self.automation = []
print('parts inside workshop ', self.name, ':', self.parts)
#this should assign the level of automation to the workshop
automation = []
for part in self.parts:
for phase in part.phases:
if phase.placings > 0:
automation.append('auto')
else:
automation.append('manual')
self.automation = automation
def set_part(self, part):
self.parts.append(part)
类装载机:
def __init__(self, cycles_file, workshops_file):
self.cycles_file = cycles_file
self.workshops_file = workshops_file
self.workshops = []
# those are some nested cycles that I use to create part objects with the same workshops
parts = []
for sheet in self.cycles_file:
name = sheet
phases = []
workshops_set = set()
for phase in self.cycles_file[sheet]:
seq = phase['seq']
workshop = phase['workshop']
placings = phase['placings']
workshops_set.add(workshop)
phase = Phase(seq, workshop, placings)
phases.append(phase)
for workshop in workshops_set:
same_workshops_phases = []
for phase in phases:
if workshop == phase.workshop:
same_workshops_phases.append(phase)
part = Part(name, same_workshops_phases, workshop)
parts.append(part)
# creates workshop obj
for workshop in self.workshops_file:
name = workshop
shifts = self.workshops_file[workshop]['Shifts']
shift_dur = self.workshops_file[workshop]['Shift duration']
workshop = Workshop(name, shifts, shift_dur)
self.workshops.append(workshop)
# setting parts for workshops
for part in parts:
for workshop in self.workshops:
if workshop.name == part.workshop:
workshop.set_part(part)
for workshop in self.workshops:
print('workshop: ', workshop.name)
print('level of automation: ', workshop.automation)
print('parts processed by workshop:')
for part in workshop.parts:
print(part.name)
print('with phases:')
for phase in part.phases:
print(phase.seq)
类Loader的第一行中有一个缩进错误,但这只是一个复制/粘贴问题。然后我创建对象:
cycles_file = {'p1': [{'seq': 10, 'workshop': 'ws1', 'placings': 2},
{'seq': 20, 'workshop': 'ws2', 'placings': 0}],
'p2': [{'seq': 10, 'workshop': 'ws3', 'placings': 0}],
'p3': [{'seq': 10, 'workshop': 'ws2', 'placings': 0},
{'seq': 20, 'workshop': 'ws1', 'placings': 3},
{'seq': 30, 'workshop': 'ws3', 'placings': 0}]}
workshops_file = {'ws1': {'Shifts': 3, 'Shift duration': 8},
'ws2': {'Shifts': 2, 'Shift duration': 7.5},
'ws3': {'Shifts': 2, 'Shift duration': 7.5}}
loader = Loader(cycles_file, workshops_file)
我得到的结果是:
车间内的零件ws1:[]
车间内的零件ws2:[]
车间内的零件ws3:[]
研讨会: ws1
自动化水平:[]
车间加工的零件:
相位为10的p1
相位为20的p3
研讨会: ws2
自动化水平:[]
车间加工的零件:
相位为20的p1
相位为10的p3
研讨会: ws3
自动化水平:[]
车间加工的零件:
相位为10的p2
相位为30的p3
正如你所看到的,车间内部的零件是空的,所以自动化水平不能设置.
有人能帮我吗?我是一个自学成才的人,我真的感到迷茫!
发布于 2021-05-28 18:18:51
你的代码很好,打印是误导你。
在课堂上,请注意:
class Workshop:
def __init__(self, name, shifts, shift_dur):
self.parts = []
self.automation = []
print('parts inside workshop ', self.name, ':', self.parts)
在运行set_part
方法之前,您要在车间中打印部件。
正如我在前面提到的,您的代码很好,车间中的部分并不是空的,只需用以下方法进行测试:
for workshop in loader.workshops:
print('parts inside workshop ', workshop.name, ':', workshop.parts)
https://stackoverflow.com/questions/67743655
复制相似问题