-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Dremel Digilab 3D45 support #9
base: master
Are you sure you want to change the base?
Conversation
Do not pull yet, there is a issue with connection timing out. |
Thanks for your help! Where are the timeouts happening - connecting, while idle or while printing from SD? If you are doing this from the desktop and your computer goes to sleep I think that might kill the connection. On the last rev I made some changes to the default settings to try and make it connect more reliably out the gate. But I think you need to have the two settings for "Temperature interval" be set to 2 or 3 (under "serial Connection">"Intervals & timeouts") I am also working on a change to support direct printing (directly from OctoPrint instead only via upload to SD card and kicking off a print). While doing that I noticed that on long operations the printer needs to be polled even when the print queue is full or it drops the connection. |
Tried to reconnect, and I got a Kernel Panic. Whoops. Upgrading the pi.... |
I do have the settings set to 2. |
Which pi are you using? You may need to turn on debugging for the plugin and take a look at the log if you are not seeing anything useful in the Terminal tab |
Yeah got another kernel panic. Pi 3. Sorry but I won't be able to debug it until Monday. |
Maybe a damaged card? Try wiping and doing a clean install? |
Kernel panic. Switched pis and sd cards. Something about Linux being unable to page memory? It does this every time I connect. Very strange error. |
Are you using OctoPi or OctoPrint installed on top of something like Raspbian? |
Using the octopi image with no other peripherals and nothing other than your plugin. Debugging disabled. |
And no camera? |
No camera. |
Is it possible it is a corrupted/incomplete octopi download? |
No, I used the same image on 2 other Pi's with regular Marlin printers attached |
OK. Im a bit mystified. I just:
For you is it failing right when you tell it to connect to the printer? |
I am using all default settings, with your suggestions. It fails after communicating with the printer. It will be giving me the timeout message, and then a kernel oops happens. Debugging hasn't been tried in depth, will be tried tomorrow. |
Heres the logs. Also I checked the md5 hash on the zip, and everything was ok. |
Upload to SD worked, and then it crashed the pi. The printer stopped shortly after. |
Is there anything I could do to help debug? |
Sorry for the delay and thanks for posting the logs. I'm taking a look at them and have a couple of ideas. Give me a day or two - I think I might make a special version for you to test with if that is ok with you. |
A couple of things off the bat that may not be helping:
I almost have a solution for 2 but I am still in the process of testing/bug fixing. |
Ah ok. How long does it usually take to connect? Because with your settings the pi times out when connecting. I'm ok with using a custom build and/or custom src. |
Just to connect is typically instantaneous, but I think there is an issue right at that point for your printer where it fetches the status as part of completing the connection, returns something mangled to Octoprint which leads to Octoprint thinking it is still waiting for a response from the printer, triggering the timeout, etc. |
Yeah I do remember it being very delayed when fetching temperatures. |
After looking more closely at the libusb docs, it looks like I needed a bigger read buffer. Just pushed a new release to master with that fix and I think that may be causing at least some of your troubles. Please do an update on the plugin and let me know how it goes. |
You will need to add your Dremel USB ID since I did not merge that yet |
Gotcha. Will do that tomorrow as I don't have access to the printer right now. |
IMO, seeing how they have deprecated USB support for the 3D45 (meaning, China isn't going to release any firmware/drivers to fix it), we only have one option: Try to install an older version of Windows/Dremel software that WAS supported previously. Like, Windows 7, and an old version of Dremel Slicer? And then sniff those prints to get a full suite of USB commands that are supported. If you call Dremel support, they are more than happy to send older versions of Dremel Slicer via email. I'd done some USB debugging in the past and recreated some software to open source. However, I don't have capacity at this time to invest. Hopefully someone else out there can take the time to flush it out. To me, it looks like control of the printer is now limited to web-based protocols only. Meaning, if we want to keep this PR open, it will have to be changed to issue TCP commands over a network connection. And who knows what level of monitoring/controls we'll have through their embedded (java?) servlets. If a web-based approach isn't going to work for this FlashForce plugin for OctoPrint, then it may be time to close this PR. Unless... Someone wants to try installing Win7 in a VM, and try to find an older version of Dremel slicer to install that DID support USB communications with the 3D45. Hell, maybe even the most recent version of the Dremel Slicer works fine on Win 7 - and someone just needs to install it. For me, Dremel Slicers (windows editions) do NOT install and work within VirtualBox - there is a bug with their old version of Cura and VirtualBox (all displays are in garbage/different language, build plate upside down, gcode produced is REVERSED, etc). Wow... This is looking pretty bad for Dremel/FlashForge in general. |
@eduncan911 re USB debugging - what I was able to do on the Mac (prior to the last major OS update) was to use WireShark with the OS's built in virtual USB port to capture packets between the Finder (and PowerSpec Ultra) and FlashPrint, which was quite helpful once I figured out how to do it. I believe it can still be done on Mac OS but you have to disable system security and reboot to allow access to the virtual USB. btw I reached out to you via your website - maybe we can discuss in private. sorry I got your name wrong :-( |
Yeah, you and like 500 spammers every day... :( I'll go see if I can find it in the weeds. I am in the middle of revamping it to add some spam protection, or just remove the form all together. It's a static site so I am unable to write any spam protections in code. |
lol - you don't want their seo services then? |
I haven't connected OctoPrint to an 3D45 yet. I was able to get in VMware installed on Linux for an old Win 7 install. However, the current version of DigiLab does not have a USB option it seems - only a "network printer" setup procedure. |
Looks like the Dremel employee has posted the supported GCODE commands for the 3D45: https://docs.google.com/document/d/1Of4ZUU13UWfF1-2vZIfyzsz1yCOvCj9v9FT0aroKhuU/ M29 is initially listed; however, there's no details on it. |
Why don't 3d printer manufacturers and sellers officially publish the full g-G-code list and instructions as in the CNC lathe and machining center instructions? Is that such a secret? Why do printer owners have to reverse-engineer the printer? |
Then they would have to train all support personal, and perhaps there are codes not very well supported that they have blacklisted. Specifically this is out of Dremel's hands... The makers of the FlashForge boards and firmware (which is inside of the Dremel printers) are located in Zhejiang, China. I've had a few email exchanges/translations and straight-up they have out-right refused to release any pin-outs, source code, and most of all g-code lists (I asked separately about g-code, they refused) for anything FlashForge, nor Dremel. Now, they did admit that Dremel is given a copy for their IP. It's murky, but I believe Dremel relies on FlashForge for all firmware releases / packaging. What's funny is they copy the Westerns in everything, especially in things we've published in open source like gcode commands for Marlin, RepRap, etc. But to get them to open their IP: out of the question. |
It's not totally clear to me whether the 3D45 is using a FF made board since my FF branded printers are older and are using a less powerful architecture. But chatting with the Dremel employee on the Dremel Facebook page, it seems like they are building their own firmware (at least for the 3D45) so they should be able to document the command set, which is what they have started in the google doc you linked above. However as you note, it is not complete. Other printers that are based on open source firmware have g-code that is well documented, however I think Dremel and FlashForge are aiming at a mainstream user base that doesn't want to tinker and "just wants it to work" so they may not see documenting the commands as important and they may have limited resources to provide that support. That being said, it does make it a lot harder to integrate the printers with widely used 3D tools like Cura, Prusa slicer, etc. Presumably Simplify3D also reverse engineered the communication or they managed to get some help. I feel your frustration too - personally I would be thrilled that someone wanted to help get my hardware to work with commonly used tools because it seems like it would broaden the user base and allow the printer to grow with the ability/technical competence of the user. I think engaging on the official Dremel Facebook page may be productive. |
My Dremel 3D20 boards: The 3D20 boards above seem to be a stripped down version from the FlashForge Creator series if I remember. For example, there's no heated bed transistors and the bed's thermistor connector is missing. Also, the wifi area is missing which exists on the FlashForge branded versions. And this 3D45 was just "Upgraded to latest mainboard revision", as per the tech notes when I got it back: You can't see it in the pics, but the 3D45 has hidden under the plastic area (used as a handle to carry it) "Dremel CoreBoard". I think that's the smoking gun that it's still got FlashForge roots in there. I tried searching and found a couple similar size FlashForge boards; however, they were a bit differently laid out. |
@Mrnt so what are the next steps here for 3D45 support? here's where we currently stand:
And last I recall reading above: The M29 may be hanging the printer? If we want to move forward, I can connect an SBC to it and start debugging if you like. |
All thumbs up for people who bother to mess with it. That being said. Fanuc is also a closed system as we understand it, but the user guide is still public to the user with all the commands. As I have done Macros and programs there in terms of the test, according to the teachings of Fanuci's book, and I learned a lot. And I've tested a lot from the book Dreamer NX. 90% of the commands work As the MRNT WIKI page writes and are the same as Dremel 3d45. |
The 3D20 has the exact same board as the FF Dreamer. From what I understand the STM chip on the driver board is relegated to driving the motors, heaters and the 3D45 has a more powerful TI processor providing IO, user interface via the LCD that serializes commands to the STM chip. Not sure how that compares with the newer FF machines. Can you use the 3D45 on the Mac with Octoprint plus the plugin? I guess I could add network support, kind of a pain. |
There is no expert though when Octopi is running on a LAN and I tested the "Spaghetti detective" plugin. Works so far tested with a Logitech webcam. |
Yes - its basically two boards joined with traces from the embedded controller to the motor drivers forming the connection.
:-) I think it depends on your prior experience - you have related industry experience, so FlashPrint will no doubt be a frustrating experience but for a newbie to 3D printing / CNC it is probably about right. FlashPrint does have an "advanced" mode where you can tweak a whole lot more settings which you may want to look at if you have not already done so, but yes I can how Prusa would be preferable. But I think your point also speaks to what I was saying that a user might start out as a novice (at least in 3D printing) and with experience want to have more control, so lack of documentation is very frustrating and counterproductive. |
I am able to use a FF printer on a Mac by running OctoPrint on the Mac with the plugin and then have a custom printer profile set up in Cura with OctoPrint configured to go to 0.0.0.0:5000 (ie localhost) and it should print directly or upload to SD depending on the Cura settings. A bit clunky but it is how I test/debug Cura support. |
That's basically what I do with full blown Ubuntu 20.04 on my SBC of choice (UP Board). I setup the virtualenvs, install octoprint, and away it goes. I even run 4 octoprint installs there, all sharing the same code and plugin base - just different config files. Works flawlessly, even with 3 USB cameras. (the UP Board's Atom chip is about 25x faster, per core, than an Pi 3B+ per my benchmarking - and, it's full Intel 64-bit)
My point earlier about connecting the 3D45 to macOS was that the Dremel DigiLab Cura-branded software did not install any drivers, nor attempted to communicate over USB - which is what I would have sniffed out for you. The macOS version of DigiLab continued to just want the Network IP for the printer - not at all about USB communications. Yes, I could load up a virtualenv and octoprint. But don't need to - I have SBCs for that. ;) |
At this point, I'll find an extra port on the USB hub to connect the 3D45 to the SBC and will try this plugin. Though, I tend to be printing face shields constantly and would rather not disrupt the rest of the system for testing. I may try to find a Pi somewhere around here... |
Sweet!
Yes of course. Sorry, not quite on the ball today :-( It would still be useful to test with the plugin if you have a chance since it is apparent there are some differences between the 3D45 firmware and the FF that I have access to. But no rush - PPE is definitely more important! |
I own a 3D45, how may I help? Anything specific I should test? |
I do own a 3D40 and that seems to have the same control board as the 3D45 shown in the pictures. I would like to contribute as well. |
Not sure what the status on this is, but I can test these changes on a 3D45 and see where I end up in a couple hours :) I had a fun time with the printer's API yesterday. I was trying the |
So I gave it a shot... It did connect but I can't upload prints to the printer (I get "printer is busy" shown in the UI), and printing from OctoPrint seems to start executing GCode without adjusting the z height and preheating, resulting in some... fun noises. Will try to upload OctoPrint logs in a second but I didn't see anything bad right off the bat, and next time I can get to the printer I'll try sending some adhoc GCode commands and see how that goes. Edit: Logs here - https://gist.github.com/jasonappah/746cbac7bf5b3542585d4878b0eb2915 |
Did a little more testing today by sending GCode through the terminal. I'm able to jog the printhead/bed, but I did notice that there are some commands that seem not to work at all, most notably I'll probably try some more commands from this list and document which ones do/don't work on the 3D45, but at this point, I'm inclined to think that this plugin is working as it should be and that the current issues are with the printer and/or the GCode docs we have from Dremel. |
@jasonappah Sorry for the delay in responding. I have not had a lot of time to work on this lately and have been spending what time I have on trying to track down seemingly random disconnects in the OctoPrint/printer communication. WRT your observations: The homing command is supposed to be
However, some FF printers seem to not accept this so you may want to try homing one axis at a time, ie:
I also noticed commands like M84, M83, M82 in your log and was wondering what those were for? re the inability to use some of the other functionality, I think one problem might be that the plugin cannot detect the printing status of the printer. The plugin uses the response from the M119 command:
and is expecting to see something like:
Notice the If the plugin detects the printer is ready then you should be able to control the printer with OctoPrint. It would be helpful if: While you have OctoPrint connected to the printer so that you are able to see commands in the terminal, etc can you go to the printer and manually start it printing something that you already have on the printer's SD card or a USB drive. You do not need to print the whole item, and could cancel once it actually starts printing. Then upload the log file generated during the print. What we are interested in seeing is the printer's response to the M119 command when it is:
|
I'll be able to do that soon, will update with my findings this week. |
All, Which is it? |
Dremel Digilab 3D45 has a different printer ID than the "Dremel IdeaBuilder," add it in.