Team 254 Open-Source Release: Cheesy Parts

Cheesy Parts is an open-source web-based system for tracking parts through the design and manufacture cycle. During some of the past seasons, we have had problems losing track of the progress of various parts, or whether we had the raw materials for them. To fix this, we wrote this web-based system during the offseason. It assigns part numbers with which CAD files can be saved to version control and stores information about parts’ current manufacturing status.

Features include:

  • Tracking of part and assembly hierarchy
  • Part status tracking
  • Part metadata (notes, source material, cut length, quantity, priority, etc.)
  • Dashboard of all part statuses

The code is available at https://github.com/Team254/cheesy-parts. There is also a working demo available at http://parts-demo.team254.com (username "demo@team254.com", password “chezypofs”).

Feedback and suggestions for improvement are welcome.







Thanks a ton for publishing this, guys. I know many of us asked about this a few months ago, and I’m eager to check it out.

Thank you!

This looks very neat and a great resource for teams!

Just a word of warning:

Our team tried to implement something like this with a physical “PARTS” (Parts and Resources Tracking System) board a few seasons ago. The theory was that the CAD team designs the part then deposits the drawing in a bin. A small tag on the corner of the drawing was generated from the part name based on a naming scheme (ie, shooter was CRR_SHO_001 or something like that). Implementing a naming scheme was a great idea because before that, we had a great deal of parts named “twistything.ipt”. Anyways, the tag got cut out and pinned to a board with various tasks listed on it. All parts started in rough cutting and moved down towards finishing, with the person who did the work moving the tag to the next task. A corresponding tag was taped to the part.

In theory, the board worked great. There would always be work to do and people could see easily what needed to be done and the progress and congestion of our machining system. Unfortunately, it required an immense amount of babysitting and fell apart within the first week of heavy machining. People didn’t move tags around and people relied on the system instead of the leaders to tell them what to do. When the system didn’t work, things got stuck.

  1. This can be solved by strong leadership and making sure everyone knows the ins, outs, and benefits of using a system like this. Industry uses stuff like this (we actually pulled our flowchart from one of our sponsors, which we saw when giving a demo there) but in industry, there are actually professional engineers and managers. It’s difficult to get this kind of expertise and knowledge on an FRC team (though it certainly is possible in the culture of many teams - 254 is one of them and I respect them immensely for it).

  2. It can also be solved by eliminating excess complication in the process: for us, that was removing the board from the system.

We replaced it with a shelf that drawings were placed on, and machinists could just pick up at their leisure to do. As the part got closer to completion it moved down the shelf. Top level was rough cutting, the next facing, the next drilling and so forth. There was no meta tracking system and it worked out better for us.

I guess the lessons we learned from our experiment was to eliminate steps that were unnecessary for our team and secondly, if we are implementing a new system, make sure the leaders remain just as strong and don’t rely on it as a crutch.

Again, this looks like a really cool tool and I might prod my team to try another part management system, but I think it will be good to go into it with some prior knowledge.

Thank you immensely for posting this. I there any chance that there could be some integration with SolidWorks as you’ve done in years past?

That would be PDM, which is from Solidworks and natively integrated. Purely for revision control.

We want to see if there’s a way to automatically pull completed drawings from the PDM vault once they’re checked in, so that you have one less step to go from the part management system to making parts, but we haven’t done that yet.

Yeah, we’ve already implemented PDM fairly successfully. I was more thinking in terms of the system I believe you used to have, where new part numbers were natively assigned in SW. Doing that with drawings would be awesome too.

I agree with what others have said, these types of systems are great if everyone uses them correctly and buys into them. Usually, the easiest way to do this is to make everything is as easy as possible to do correctly.

We’ve never used SW to assign part numbers. It’s been similar to the current system where the web app assigns you the next available number.

I have some code that extracts the images from solidworks drawings. I’ve been working on a PDM system inspired by 254 as well. Don’t kill my computer (innovators.mooo.com). Click on Samples.

Basically, solidworks files are OLE files, so you need a library to deal with OLE files. With my PDM I’m setting up for next year, it directly interfaces with the Solidworks PDM. I’ve hardcoded it in my case (because…well…I just did). The only issue I’m having is that I have to rewrite my database every page load. This is because the Solidworks PDM stores data in a flat text file. When a part is updated, removed, or added, it’s reflected in the flat file. I need a better way of "diff"ing the database and my flat file. If you have any ideas, that would be great. I could possibly copy the flat file and run some process in the background and look to see if something’s been updated then update the database, but oh well.

Also, the PDM I’m working on will also pull out PDFs of drawings that are saved automagically.


import OleFileIO_PL

def getpng(request, project_id, partid):
	project = Project.objects.get(id = project_id)
	part = Part.objects.get(id = partid)
	filename = 'D:/VaultData/projects/'+project.name+'/'+part.fileName.replace('.','_')+'/'+part.revision+'/_'+part.fileName-6:]
	
	try:
		with open(filename1): pass
	except:
		a=1
	
	if (filename):
		assert OleFileIO_PL.isOleFile(filename)
		ole = OleFileIO_PL.OleFileIO(filename)
		png = ole.openstream('PreviewPNG')
		data = png.read()
		return HttpResponse(data, mimetype="image/png")

Cory,

Once again I am floored by the professionalism of the poofs. Thank you for posting this, what a great way to keep things organized.

Very cool.

Maybe it’s just the mobile version (only thing I have to test at the moment), but every time I click I have to login again. Is this the intent, logging on at every mouse click?

Feedback and suggestions for improvement are welcome.

[/ATTACH]

You guys are awesome. This would make a great cloud based app. Using a varbin type you could save binary file attachments(pdf, edrw, etc) and use the web browser as the viewer. Also being able to collapse an assembly to the parent part number is a desired feature. Also being able to attach a date with a widget when you edit the part status would be cool. Start and completion dates are always something that needs to be watched.

We’re interested in running CP, but on a Windows Server (the same one we use for PDM). Do you have any tips? How do you run CP for yourselves?

Yeah, PDM integration is something I’d like to add if possible. One issue we have is Cheesy Parts getting out of sync with the CAD because some people are too lazy to create entries in it before saving their parts to PDM (cough EJ cough), so being able to query PDM and automagically create Cheesy Parts entries in that case would be nice. It’s not going to be a walk in the cake, though, since the only way I’ve heard of to integrate with PDM is through some .NET DLL.

We’re using a t1.micro EC2 instance running Ubuntu 12.04. It would probably be fairly trivial to deploy Cheesy Parts instead as a Heroku or AppFog app, though – I just like the extra control that a virtual private server provides.

Just curious - has anyone tried setting this up locally yet?

In my defense, I was supposed to have an assistant for that…

You never gave me your login info…

Yes, although unsuccessfully so far. I’m trying to set it up in windows 7.

is the PDM software part of the package?

I don’t think so. I’m fairly confident the PDM software they use id available from SolidWorks. As of now, there is no direct integration between Cheesy Parts and the PDM. They are not linked.