Re: print gcode files to miniMaker
Did you try running the enumser program from naughter. That will try every known way to enumerate the serial ports on windows. Just let me know what method works for you and I will switch to it.
You are not logged in. Please login or register.
SoliForum - 3D Printing Community → XYZ Printing Hacks & Mods → print gcode files to miniMaker
Did you try running the enumser program from naughter. That will try every known way to enumerate the serial ports on windows. Just let me know what method works for you and I will switch to it.
Not yet, I give it a try today. I was printing large model whole night :-D
For now, It will be enough to add posibility to pass device COM port through command line also for minimoverUI.exe.
I will also try to run/rebuild newest version (6.10.2018) from github this evening.
CreateFile method reports
COM3
QueryDosDevice method reports
COM3
GetDefaultCommConfig method reports
COM3
Device Manager (SetupAPI - GUID_DEVINTERFACE_COMPORT) reports
Device Manager (SetupAPI - Ports Device information set) reports
COM3 <XYZprinting, 3D Printer da Vinci 1.0 Pro 3in1>
EnumPorts method reports
COM1 <Local Port>
COM4 <Local Port>
COM3 <Local Port>
COM7 <Local Port>
COM5 <Local Port>
COM6 <Local Port>
COM8 <Local Port>
COM9 <Local Port>
COM10 <Local Port>
COM12 <Local Port>
COM13 <Local Port>
COM11 <Local Port>
COM15 <Local Port>
COM17 <Local Port>
COM18 <Local Port>
COM30 <Local Port>
WMI method reports
COM3 <XYZprinting, 3D Printer da Vinci 1.0 Pro 3in1 (COM3)>
ComDB method reports
COM3
COM4
COM5
Registry method reports
COM3
UsingGetCommPorts method reports
CEnumerateSerial::UsingGetCommPorts failed, Error:126
Perfect, that is a big help. I checked in a fix to the serial port code that should work for you. Let me know if it does.
So it is becoming clear to me that the only way to get WiFi to be remotely stable is to carefully control how often you send a message to the machine. And the only way to control that is to have everything run through a state machine so the calling program is not tied up in knots worrying about timing. So to that end I'm moving the rest of the commands over to my state machine. This will clean up the interface a bit, and eliminate the need for sleeps in the command line or variable timer intervals in the UI making the whole thing a lot more user friendly.
Anyway it will take some time to get this carefully moved over, but hopefully it will lay the ground work for me adding in logic to hold off on communicating too fast.
There are a few tricky elements, like managing the updating of the status, however my hope is that with some thought I can make updating status something that just happens rather than something you have to poll for.
I really wish this was a more logical api, it has elements that make it appear logical, but in practice it is very fragile and inconsistent.
New version of minimover is now working on my PC with Win7 x64.
New version is of minimover is now working on my PC with Win7 x64.
Great news!
Note to self, work up app to test reliability at different polling rates
I made a little test app that just polls the status at whatever rate you request and then logs it’s successes and failures. On a usb connection I can let that run with no delay, updating the status about once every 50 ms or so.
On WiFi however it is a whole other ballgame. There anything faster than once a second causes serious issues and even a 5 second delay is unreliable. On average only 2 out of 3 messages make it thorough. The odd thing is it is super unpredictable, sometimes 10 messages make it without error and other times 10 in a row will fail.
I’m thinking of cleaning this up and asking others to run it just to see if it is my WiFi that is flakey or all xyz machines.
I cleaned up my test code, now I log the min/max/avg run time and keep better track of failures and successes. Again communicating over usb is super reliable and fast with a 14 ms average for returning status.
Communicating over WiFi was a mess till I bumped up the delay to 5 seconds between commands. I was able to run that way for over a half hour without an error. I’m letting it run overnight to see how well it holds up.
Anyway that seems crazy to me, there is no good reason for the network to run that slow. I’m getting responses back in 150 ms or so, why do we need to wait so long between messages? I’m wondering if it is not a power issue. Maybe the WiFi dongle is using too much power if you push it hard.
So I left my test running over night and managed to get over 6,000 status updates with only 15 failures. I'll let it run the rest of the day to see if we can keep this up even longer.
I need to work out what the minimum delay is between messages to be reliable, 5 seconds is a long time to wait, I already tested out 1.5 seconds and that was not reliable. I can live with that for status updates, but for most other interactions I would rather they trigger more immediately. The one I'm really worried about is file upload, that requires a lot of messages get sent to the printer, if I need 5 seconds between messages it will take hours to upload a print reliably.
I have a tiny scope, I think I will toss it onto the power pins of the wifi module and see if the power is stable. I suspect the module is either overheating (although it is quite warm now but working fine), or that it is unstable because of too much power draw. It is also possible that it is struggling to offload a message from the wifi module to the main control board in a reasonable time, but 5 seconds should be an excessive amount of time for even the slowest of communication methods.
Let it run all day, over 11,000 messages and less than 20 failures with an average of 800 ms to send and receive each message. I still don’t see why we need 5 seconds between attempts but at least it is finally stable
So I tested this with a 2 second delay between messages and got 60% failure, however moving up to 2.5 seconds drops the failure rate to only 3%. I'm testing it now but it looks like 3 seconds is the magic value. I will run it over night again and see what the long term success rate is.
Thanks for all the time you're investing in developing this!
I came across your GitHub miniMover whilst searching for Firmware mods etc... for my 1.1 Plus (unfortunately nothing found there), but your program could serve as a very useful interface nevertheless. Can I ask: you say the 1.x and 2.x series printers use an outdated comm protocol that you have not implemented yet - does that mean that you're looking to implement this in future?
kind regards
Brendan
I would love to implement the v2 protocol that the older machines use but I would need to get my hands on a machine to test against. I have a rough idea of what the protocol looks like now but it is not enough to finish the job.
If anyone in Arizona has a printer there willing to lend me, even for just a day I can probably work out how to print at least.
PM'ed
I just checked in code that moves the rest of the commands into the state system. However I still need to clean up the file and print commands so they don't block.
One side effect of this is that I have temporarily removed all the delays I was using to keep commands from bunching up together. That has no major impact on usb but probably breaks wifi. The next step is to put in waits internally so that wifi does not talk to fast to the printer.
I could swear I had seen every printer xyz made, but I just stumbled onto a new one, a 3D food printer. I found a manual for the machine but can't see any evidence that one actually made it past the prototype stage.
The member arhodiewithsoul was kind enough to send me a stripped down da Vinci 1.1 Plus, basically just the electronics and enough sensors to get the machine to boot.
I can't quite get my head around this machine. It is clearly a one off that was suppose to be there flagship product, before they went with the 1.0 Pro machine that is. It sort of communicates via the v3 protocol, but it does not work well with it. Over wifi the connection is closed after every command is sent, and on usb the connection occasionally just locks up. I need to investigate more but that does not seem to be the case with the older v2 protocol.
Also the latest XYZWare clients don't seem to support it well. With XYZWare 2.1.32.3 I can't get it to communicate over usb, however it seems to work on wifi just fine. With the newer XYZMakerSuite I can't get it to recognize the printer at all, and the printer model is not even listed as supported. I'm thinking of rolling back to a much older version of XYZWare to see how that changes things.
Anyway I was able to fix up a few bugs in my code to better support this machine, and I am now able to test out some of the v2 commands so hopefully I can at least add in limited support for that protocol. I still have a lot of pocking around to do so hopefully I will have some exiting news soon.
Thanks again to arhodiewithsoul for the generous offer of the hardware, this is a big help.
The member arhodiewithsoul was kind enough to send me a stripped down da Vinci 1.1 Plus, basically just the electronics and enough sensors to get the machine to boot.
I can't quite get my head around this machine. It is clearly a one off that was suppose to be there flagship product, before they went with the 1.0 Pro machine that is. It sort of communicates via the v3 protocol, but it does not work well with it. Over wifi the connection is closed after every command is sent, and on usb the connection occasionally just locks up. I need to investigate more but that does not seem to be the case with the older v2 protocol.
Also the latest XYZWare clients don't seem to support it well. With XYZWare 2.1.32.3 I can't get it to communicate over usb, however it seems to work on wifi just fine. With the newer XYZMakerSuite I can't get it to recognize the printer at all, and the printer model is not even listed as supported. I'm thinking of rolling back to a much older version of XYZWare to see how that changes things.
Anyway I was able to fix up a few bugs in my code to better support this machine, and I am now able to test out some of the v2 commands so hopefully I can at least add in limited support for that protocol. I still have a lot of pocking around to do so hopefully I will have some exiting news soon.
Thanks again to arhodiewithsoul for the generous offer of the hardware, this is a big help.
PM'd
the latest XYZWare clients don't seem to support it well. With XYZWare 2.1.32.3 I can't get it to communicate over usb, however it seems to work on wifi just fine.
I encountered problems with USB and daVinci using two particular cables. Only with the printer and no other device? I had a similar problem with some microUSB cables and my R3 Uno - apparently they were 'charge only' and not 'data' cables, but I don't see how that relates to the USB 'B' type cables... ?
As long as I have owned the printer, every so often it fails to receive the .3w file for printing and throws up an error in the software.
Have tried installing XYZMakerSuite and XYZware Pro but the printer model is not supported.
PM'd
I encountered problems with USB and daVinci using two particular cables. Only with the printer and no other device? I had a similar problem with some microUSB cables and my R3 Uno - apparently they were 'charge only' and not 'data' cables, but I don't see how that relates to the USB 'B' type cables... ?
As long as I have owned the printer, every so often it fails to receive the .3w file for printing and throws up an error in the software.
Have tried installing XYZMakerSuite and XYZware Pro but the printer model is not supported.
What happens to the camera view when using the USB cable. Part of what was throwing me off was that over USB you can't see the camera, but it looks like that is how things were written. Maybe they assume you don't need the camera if you are wired to the printer.
Also on usb the printer name is short, and lacks the model number. That could be because the default name has spaces in it, I don't think other printers use spaces in there name.
So while investigating how to read the camera on the 1.1 plus I stumbled onto a 4th communications protocol. This is basically a JSON object that is serialized then pushed out to the machine. Here is the sequence to retrieve a JFIF image from the printer. JFIF is a modified jpeg file.
Anyway this appears to be a complete protocol, with the ability to query for machine state and everything. I will try to document it.
//-----------
// Image capture
=> printer
{"command":3}
<=
{"result":0,"command":3,"message":"START_SEND","length":136811}
=> printer
{"ack":"START_RECEIVE"}
<=
[JFIF blob]{"result":0,"command":3,"message":"SEND_FINISH","length":136811}What happens to the camera view when using the USB cable. Part of what was throwing me off was that over USB you can't see the camera, but it looks like that is how things were written. Maybe they assume you don't need the camera if you are wired to the printer.
Also on usb the printer name is short, and lacks the model number. That could be because the default name has spaces in it, I don't think other printers use spaces in there name.
I had never noticed before, but you're correct - no camera view that I can find when on USB connection.
In Windows 10, my Monoprice Select Mini V2 shows under printers as a 3D printer. The daVinci 1.1 Plus shows as an unspecified, named device - 'XYZprinting da Vinci 1.1 Plus (COM4)'
Properties details:
General:
Location Port_#0008.Hub_#0003
Port Settings:
Bits per second 9600
Data bits 8
Parity None
Stop bits 1
Flow control None
Advanced - FIFO buffers selected
Receive and Transmit buffers both set to High (Maxmimum)
Driver:
Version 21.53.47.745
Driver details
C:\WINDOWS\system32\3dMon.dll
C:\WINDOWS\system32\3DPrintService.exe
C:\WINDOWS\system32\DRIVERS\MS3dPrintUSB.sys
C:\WINDOWS\system32\DRIVERS\usbser.sys
C:\WINDOWS\system32\MS3DPrint\SupportDevices.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriver.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverJr.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverJrP.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverMini.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverNano.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverPro.XML
C:\WINDOWS\system32\MS3DPrint\XYZSerialDriverSuper.XML
C:\WINDOWS\system32\XYZSerialDriver.dll
Events:
Driver Management has concluded the process to add Service MS3dPrintUSB for Device Instance ID USB\VID_11F1&PID_2506\3F11X(myserial)
Driver Management has concluded the process to add Service usbser for Device Instance ID USB\VID_11F1&PID_2506\3F11X(myserial)
Driver Management concluded the process to install driver xyzusb.inf_amd64_d1849d60b4a9bee0 for Device Instance ID USB\VID_11F1&PID_2506\3F11X(myserial)
SupportDevices.XML
<Device>
<VIDPID>VID_11F1&PID_2506</VIDPID>
<Manufacturer>XYZ Printing, Inc.</Manufacturer>
<Model>da Vinci 1.1</Model>
<HardwareID>XYZdaVinci11</HardwareID>
<MachineType>daVinciF11</MachineType>
<isEncoding>false</isEncoding>
<isProfessional>false</isProfessional>
<isPlusSeries>true</isPlusSeries>
<isSuper>false</isSuper>
<PrimeLine1>G1 X0 Y180 Z0.35 F2000</PrimeLine1>
<PrimeLine2>G1 X200 Y180 Z0.35 E24 F540</PrimeLine2>
<BedAreaWidth>200</BedAreaWidth>
</Device>
So it looks like this printer uses a different communications protocol over wifi than over usb. More interesting the usb protocol does not seem to have a command to grab an image from the camera. I would have assumed they would mirror each other but they don't appear to share much of anything.
SoliForum - 3D Printing Community → XYZ Printing Hacks & Mods → print gcode files to miniMaker
Powered by PunBB, supported by Informer Technologies, Inc.