synthetos / TinyG

Affordable Industrial Grade Motion Control
https://github.com/synthetos/TinyG/wiki
892 stars 293 forks source link

Communication loss between TinyG and Coolterm #143

Closed troisiemetype closed 3 years ago

troisiemetype commented 8 years ago

I'm experiencing a strange thing with TinyG and coolterm: while running a program (Gcode file), the connection is sudenly lost. At first it happenned at an end of line, after a gcode instruction (that is: I suppose so beacause it happens at the end of a move), but once it hapened right in the middle of a straight line (move G1 from Y105 to Y-5, stopping at about Y40). Closing and reopening connection make the move start back, as if it was just paused, sometimes with a move in G0 instead of G1. Sometimes this G0 instead of G1 move happens immediately, sometimes after several moves, sometimes not. At first I tought it was a problem with the flow control, as the setting was $ex==1 and XON marked on Coolterm. But having set back $ex to 2 and CTS to on, the problem persists. I had the problem several times, and then had another one that I think is linked, even if I don't understand how: doing an homing (G28.2X0Y0Z0) X- switch has not been detecting, and motor forcing. I tried to fire the other switch, but without any result. But once the tinyG shut down and ligted again, the homing happend whitout problem.

here are the settings of my card:

$$
[fb]  firmware build            440.14
[fv]  firmware version            0.97
[hp]  hardware platform           1.00
[hv]  hardware version            8.00
[id]  TinyG ID                    2X2660-FVT
[ja]  junction acceleration 2000000 mm
[ct]  chordal tolerance           0.0010 mm
[sl]  soft limit enable           0
[st]  switch type                 1 [0=NO,1=NC]
[mt]  motor idle timeout         60.00 Sec
[ej]  enable json mode            0 [0=text,1=JSON]
[jv]  json verbosity              2 [0=silent,1=footer,2=messages,3=configs,4=linenum,5=verbose]
[js]  json serialize style        1 [0=relaxed,1=strict]
[tv]  text verbosity              1 [0=silent,1=verbose]
[qv]  queue report verbosity      0 [0=off,1=single,2=triple]
[sv]  status report verbosity     1 [0=off,1=filtered,2=verbose]
[si]  status interval           250 ms
[ec]  expand LF to CRLF on TX     0 [0=off,1=on]
[ee]  enable echo                 0 [0=off,1=on]
[ex]  enable flow control         2 [0=off,1=XON/XOFF, 2=RTS/CTS]
[baud] USB baud rate              5 [1=9600,2=19200,3=38400,4=57600,5=115200,6=230400]
[net] network mode                0 [0=master]
[gpl] default gcode plane         0 [0=G17,1=G18,2=G19]
[gun] default gcode units mode    1 [0=G20,1=G21]
[gco] default gcode coord system  1 [1-6 (G54-G59)]
[gpa] default gcode path control  2 [0=G61,1=G61.1,2=G64]
[gdi] default gcode distance mode 0 [0=G90,1=G91]
[1ma] m1 map to axis              0 [0=X,1=Y,2=Z...]
[1sa] m1 step angle               1.800 deg
[1tr] m1 travel per revolution   60.0000 mm
[1mi] m1 microsteps               8 [1,2,4,8]
[1po] m1 polarity                 0 [0=normal,1=reverse]
[1pm] m1 power management         2 [0=disabled,1=always on,2=in cycle,3=when moving]
[2ma] m2 map to axis              0 [0=X,1=Y,2=Z...]
[2sa] m2 step angle               1.800 deg
[2tr] m2 travel per revolution   60.0000 mm
[2mi] m2 microsteps               8 [1,2,4,8]
[2po] m2 polarity                 1 [0=normal,1=reverse]
[2pm] m2 power management         2 [0=disabled,1=always on,2=in cycle,3=when moving]
[3ma] m3 map to axis              1 [0=X,1=Y,2=Z...]
[3sa] m3 step angle               1.800 deg
[3tr] m3 travel per revolution   60.0000 mm
[3mi] m3 microsteps               8 [1,2,4,8]
[3po] m3 polarity                 0 [0=normal,1=reverse]
[3pm] m3 power management         2 [0=disabled,1=always on,2=in cycle,3=when moving]
[4ma] m4 map to axis              2 [0=X,1=Y,2=Z...]
[4sa] m4 step angle               1.800 deg
[4tr] m4 travel per revolution    8.0000 mm
[4mi] m4 microsteps               8 [1,2,4,8]
[4po] m4 polarity                 1 [0=normal,1=reverse]
[4pm] m4 power management         2 [0=disabled,1=always on,2=in cycle,3=when moving]
[xam] x axis mode                 1 [standard]
[xvm] x velocity maximum       6000 mm/min
[xfr] x feedrate maximum       2400 mm/min
[xtn] x travel minimum            0.000 mm
[xtm] x travel maximum          510.000 mm
[xjm] x jerk maximum            500 mm/min^3 * 1 million
[xjh] x jerk homing            1000 mm/min^3 * 1 million
[xjd] x junction deviation        0.0500 mm (larger is faster)
[xsn] x switch min                3 [0=off,1=homing,2=limit,3=limit+homing]
[xsx] x switch max                2 [0=off,1=homing,2=limit,3=limit+homing]
[xsv] x search velocity        1000 mm/min
[xlv] x latch velocity          100 mm/min
[xlb] x latch backoff            15.000 mm
[xzb] x zero backoff              1.500 mm
[yam] y axis mode                 1 [standard]
[yvm] y velocity maximum       6000 mm/min
[yfr] y feedrate maximum       2400 mm/min
[ytn] y travel minimum            0.000 mm
[ytm] y travel maximum          450.000 mm
[yjm] y jerk maximum            500 mm/min^3 * 1 million
[yjh] y jerk homing            1000 mm/min^3 * 1 million
[yjd] y junction deviation        0.0500 mm (larger is faster)
[ysn] y switch min                3 [0=off,1=homing,2=limit,3=limit+homing]
[ysx] y switch max                2 [0=off,1=homing,2=limit,3=limit+homing]
[ysv] y search velocity        1000 mm/min
[ylv] y latch velocity          100 mm/min
[ylb] y latch backoff            15.000 mm
[yzb] y zero backoff              1.500 mm
[zam] z axis mode                 1 [standard]
[zvm] z velocity maximum       1200 mm/min
[zfr] z feedrate maximum        800 mm/min
[ztn] z travel minimum         -120.000 mm
[ztm] z travel maximum            0.000 mm
[zjm] z jerk maximum            250 mm/min^3 * 1 million
[zjh] z jerk homing             250 mm/min^3 * 1 million
[zjd] z junction deviation        0.0500 mm (larger is faster)
[zsn] z switch min                0 [0=off,1=homing,2=limit,3=limit+homing]
[zsx] z switch max                3 [0=off,1=homing,2=limit,3=limit+homing]
[zsv] z search velocity         800 mm/min
[zlv] z latch velocity          100 mm/min
[zlb] z latch backoff            15.000 mm
[zzb] z zero backoff              1.000 mm
[aam] a axis mode                 0 [disabled]
[avm] a velocity maximum     230400 deg/min
[afr] a feedrate maximum     230400 deg/min
[atn] a travel minimum           -1.000 deg
[atm] a travel maximum           -1.000 deg
[ajm] a jerk maximum           5760 deg/min^3 * 1 million
[ajh] a jerk homing           11520 deg/min^3 * 1 million
[ajd] a junction deviation        0.0500 deg (larger is faster)
[ara] a radius value              0.1989 deg
[asn] a switch min                0 [0=off,1=homing,2=limit,3=limit+homing]
[asx] a switch max                0 [0=off,1=homing,2=limit,3=limit+homing]
[asv] a search velocity         600 deg/min
[alv] a latch velocity          100 deg/min
[alb] a latch backoff             5.000 deg
[azb] a zero backoff              2.000 deg
[bam] b axis mode                 0 [disabled]
[bvm] b velocity maximum       3600 deg/min
[bfr] b feedrate maximum       3600 deg/min
[btn] b travel minimum           -1.000 deg
[btm] b travel maximum           -1.000 deg
[bjm] b jerk maximum             20 deg/min^3 * 1 million
[bjd] b junction deviation        0.0500 deg (larger is faster)
[bra] b radius value              1.0000 deg
[cam] c axis mode                 0 [disabled]
[cvm] c velocity maximum       3600 deg/min
[cfr] c feedrate maximum       3600 deg/min
[ctn] c travel minimum           -1.000 deg
[ctm] c travel maximum           -1.000 deg
[cjm] c jerk maximum             20 deg/min^3 * 1 million
[cjd] c junction deviation        0.0500 deg (larger is faster)
[cra] c radius value              1.0000 deg
[p1frq] pwm frequency               100 Hz
[p1csl] pwm cw speed lo            1000 RPM
[p1csh] pwm cw speed hi            2000 RPM
[p1cpl] pwm cw phase lo           0.125 [0..1]
[p1cph] pwm cw phase hi           0.200 [0..1]
[p1wsl] pwm ccw speed lo           1000 RPM
[p1wsh] pwm ccw speed hi           2000 RPM
[p1wpl] pwm ccw phase lo          0.125 [0..1]
[p1wph] pwm ccw phase hi          0.200 [0..1]
[p1pof] pwm phase off             0.100 [0..1]
[g54x] g54 x offset               0.000 mm
[g54y] g54 y offset               0.000 mm
[g54z] g54 z offset               0.000 mm
[g54a] g54 a offset               0.000 deg
[g54b] g54 b offset               0.000 deg
[g54c] g54 c offset               0.000 deg
[g55x] g55 x offset              75.000 mm
[g55y] g55 y offset              75.000 mm
[g55z] g55 z offset               0.000 mm
[g55a] g55 a offset               0.000 deg
[g55b] g55 b offset               0.000 deg
[g55c] g55 c offset               0.000 deg
[g56x] g56 x offset               0.000 mm
[g56y] g56 y offset               0.000 mm
[g56z] g56 z offset               0.000 mm
[g56a] g56 a offset               0.000 deg
[g56b] g56 b offset               0.000 deg
[g56c] g56 c offset               0.000 deg
[g57x] g57 x offset               0.000 mm
[g57y] g57 y offset               0.000 mm
[g57z] g57 z offset               0.000 mm
[g57a] g57 a offset               0.000 deg
[g57b] g57 b offset               0.000 deg
[g57c] g57 c offset               0.000 deg
[g58x] g58 x offset               0.000 mm
[g58y] g58 y offset               0.000 mm
[g58z] g58 z offset               0.000 mm
[g58a] g58 a offset               0.000 deg
[g58b] g58 b offset               0.000 deg
[g58c] g58 c offset               0.000 deg
[g59x] g59 x offset               0.000 mm
[g59y] g59 y offset               0.000 mm
[g59z] g59 z offset               0.000 mm
[g59a] g59 a offset               0.000 deg
[g59b] g59 b offset               0.000 deg
[g59c] g59 c offset               0.000 deg
[g92x] g92 x offset               0.000 mm
[g92y] g92 y offset               0.000 mm
[g92z] g92 z offset               0.000 mm
[g92a] g92 a offset               0.000 deg
[g92b] g92 b offset               0.000 deg
[g92c] g92 c offset               0.000 deg
[g28x] g28 x position             0.000 mm
[g28y] g28 y position             0.000 mm
[g28z] g28 z position             0.000 mm
[g28a] g28 a position             0.000 deg
[g28b] g28 b position             0.000 deg
[g28c] g28 c position             0.000 deg
[g30x] g30 x position             0.000 mm
[g30y] g30 y position             0.000 mm
[g30z] g30 z position             0.000 mm
[g30a] g30 a position             0.000 deg
[g30b] g30 b position             0.000 deg
[g30c] g30 c position             0.000 deg
tinyg [mm] ok> 
stg commented 8 years ago

I've had this issue a lot and there were two distinct reasons.

1) According to the author, serial-port-json-server has this issue on Windows with the latest version. If memory serves me, 1.80 is recommended for Windows for now. A new version seems to be drawing near.

The next one only applies to subtractive cnc machines such as mills, routers, lathes or anything that otherwise involves plenty of rubbing between different materials.

2) ESD. Seriously. A CNC mill can build up some pretty mind boggling levels static electricity. When cutting PU-foam (model board) I got zapped several times with enough juice to scare the living daylight out of me. Getting zapped by my 25kV/25mA laser cutter power supply was nasty, but not that scary, which should tell you something about just how bad it can get. Static electricity can creep along wires and discharge at the controller. While the discharge, due to high surface impedance of the plastic cable housing, is typically not strong enough to fry the electronics it is more than enough to screw up the processor in all the strangest ways. I've had memory changes, g-code misinterpretations, wonky motion, crashes, etc. but most frequently by far - communication losses!

By grounding the spindle and the control board ghetto style with crocodile clip lab wires my problems nearly went away completely. The proper solution of course would be to encase the controller in a grounded metal box with ESD cable inserts (slightly conductive plastic) which will catch any ESD discharges before they can reach the internal electronics.

It's easy enough to try if you have ground available at your power outlets, so perhaps give it a shot?

johnlauer commented 8 years ago

The new version 1.86 of SPJS is out so please use that. BTW, there has never been a disconnect problem on SPJS. The only problem on Windows was the serial library in 1.83 having packet loss. That library is no longer used.

From: D Taylor [mailto:notifications@github.com] Sent: Saturday, October 17, 2015 11:06 AM To: synthetos/TinyG TinyG@noreply.github.com Subject: Re: [TinyG] Communication loss between TinyG and Coolterm (#143)

I've had this issue a lot and there were two distinct reasons.

1) According to the author, serial-port-json-server has this issue on Windows with the latest version. If memory serves me, 1.80 is recommended for Windows for now. A new version seems to be drawing near.

The next one only applies to subtractive cnc machines such as mills, routers, lathes or anything that otherwise involves plenty of rubbing between different materials.

2) ESD. Seriously. A CNC mill can build up some pretty mind boggling levels static electricity. When cutting PU-foam (model board) I got zapped several times with enough juice to scare the living daylight out of me. Getting zapped by my 25kV/25mA laser cutter power supply was nasty, but not that scary, which should tell you something about just how bad it can get. Static electricity can creep along wires and discharge at the controller. While the discharge, due to high surface impedance of the plastic cable housing, is typically not strong enough to fry the electronics it is more than enough to screw up the processor in all the strangest ways. I've had memory changes, g-code misinterpretations, wonky motion, crashes, etc. but most frequently by far - communication losses!

By grounding the spindle and the control board ghetto style with crocodile clip lab wires my problems nearly went away completely. The proper solution of course would be to encase the controller in a grounded metal box with ESD cable inserts (slightly conductive plastic) which will catch any ESD discharges before they can reach the internal electronics.

It's easy enough to try if you have ground available at your power outlets, so perhaps give it a shot?

— Reply to this email directly or view it on GitHubhttps://github.com/synthetos/TinyG/issues/143#issuecomment-148938442.

stg commented 8 years ago

Then forget completely about my first point, this must have been a misunderstanding between me and John on the SPJS issues forum.

Nice to hear 1.86 is out, very much looking forward to trying that, as feedhold and flush queue started working for me in version 1.82 and hasn't before. It's a pretty useful function for sure ;)

troisiemetype commented 8 years ago

Hello,

As I use a very old macbook pro, I think the first point isn't o f concern for me. More, it wouldn't explain why I've never had this problem before last week, given that I've not changed anything in my set up for a few month. It really come out of nowhere!

The second point make more sense to me: for the first time since I use my router, i've seen sparkles made by the smindle motor brushes. I've been wondering about static electricity. I'm gonna try to ground the aluminium structure and the spindle. But where to connect it? Do you connect it to ground plug in the wall? The power supply for the TinyG and the steppers is grounded, but the spindle is not. And where to connect ths ground on the TinyG board itself?

stg commented 8 years ago

Even if you think it is grounded, sometimes it is not. For example, my laptop has an isolating transformer that does not provide actual ground - so no ground via USB. The power supply for my G2 controller does not even have ground pins, only line and neutral. While neutral is at ground, in Sweden there is no keying for polarity meaning devices are completely ignorant as to which pin is ground unless they have the third protective earth connection.

Anyways, what I did was run a wire from ground on the controller to two crocodile clips attaching one to ground pins in the nearest outlet and the other to the spindle motor assembly. I still get the problem when manually vacuuming and standing too close to the controller, as chips are heavily charged, transfer to the vacuum, to me and to the controller. As this is reproducible, I see it as the final confirmation of having had ESD issues. Again, a proper Au or conductive plastic casing for the device is the proper method. I'll be doing just that once I feel I can fully rely on the loaded firmware.

aldenhart commented 8 years ago

Is it OK to close this issue?

troisiemetype commented 8 years ago

I think it can be: I didn't have the problem again. I've tried to ground the spindle, and as I wasn't able to do so (it's a Kress, with the body made of plastic), I've instead ground the Z gantry the spindle is mounted on. Then it was better, but the communication loss happend again. So I simply change my USB cord: the one I used was a cheap one, more than two meters long, and without a self (I don't know if it is the right word for it: I mean a tore) on it. More, as it was really long, I've walked on it several times. So I now use a new, shorter one, with tores. And it goes right! Thank you.

ril3y commented 3 years ago

Closed due to inactivity