Mitsub_vfd - back to back speed commands causes error

More
2 years 4 months ago #303444 by jimwhiting
Hi,

I've switched my lathe to use the Mitsub_vfd rs485 driver. All working great, except when fusion puts two m3 commands almost back to back... one G97 one G96, the second command causes the VFD to error out and stop on the second command.

The issue goes away of I pop an M1 in between the two. So I guess it is a timing issue and the interface needs to be told to wait for the previous command to complete?

Has anyone else experienced anything similar?

Thanks!

Please Log in to join the conversation.

More
2 years 4 months ago #303450 by PCW
Rather than an error at the modbus level, is it possible that
the back to back G96/G97 commands are causing a step in
the commanded RPM that generates a drive fault  of some kind
say from lack  of a braking resistor during decell?

Please Log in to join the conversation.

More
2 years 4 months ago #303455 by cmorley
Can you post any error messages?

Please Log in to join the conversation.

More
2 years 4 months ago #303713 by jimwhiting
I'm not seeing any error messages. (Not made easy by the gladevcp errors I get on the console all the time).

G code:
Code:
N10 G7 N11 G18 N12 G90 N13 G64  P0.001 N14 G21 N15 G53 G0 X200. N16 G53 G0 Z200. (FACE1 2) N17 M0 (CHANGE TO T10 ON REAR TOOL POST) N18 T10 M6 G43 N20 G54 N21 G97 S700 M3 N22 G95 N23 G90 G0 X55. Z5. N24 G96 D700 S200 M3 N25 G0 Z1.414 N26 X35. N27 G1 X27.828 F0.2 N28 X25. Z0. N29 X-0.8 F0.1 N30 X2.028 Z1.414 F0.2 N31 G0 X55. N32 Z5. N33 G97 S700 M3 (PROFILE ROUGHING1 2) N34 M5 N35 M1 N36 G97 S700 M3 N37 G95 N38 G0 X45. Z5. N39 G96 D700 S200 M3 N40 G0 Z0.375 N41 X23.5 N42 G1 Z-24.9 F0.1 N43 X25.

Looking at the sequence being printed for debug it appears the commands are not making it to the python code...

Faulting case: (M1 disabled)
Code:
DEBUG: PREPPEDDATA:  01FA1027B SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01ED11704E7 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01FA10079 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31 


working case: (With M1 enabled)
Code:
DEBUG: PREPPEDDATA:  01FA1027B SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01ED11704E7 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01ED10000DB SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01FA10079 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01FA1027B SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01ED11704E7 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01FA10079 SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31  DEBUG: PREPPEDDATA:  01ED10000DB SLAVE: 01 ackg DEBUG:  ,0,1, 0x6 0x30 0x31 
 

Please Log in to join the conversation.

More
2 years 4 months ago #303714 by jimwhiting
Sorry, should have added that the commands are:

xxFA102xx  Sets forward rotation.
xxFA100xx  Stops.
xxED1ssssxx Sets Hz. (ssss is Hz in .1Hz increments)

Please Log in to join the conversation.

More
2 years 4 months ago #303727 by cmorley
can you also post the HAL code that you use to setup mitsub?

Please Log in to join the conversation.

More
2 years 4 months ago #303738 by jimwhiting
# Module loaded in main hal.
loadusr mitsub_vfd --baud 19200 --port /dev/ttyUSB0 mitsub=01

# custom_postgui.hal Connections for mitsub as it is a user module.
net estop-out mitsub.estop
net spindle-vel-cmd-rpm-abs => mitsub.motor-cmd
net spindle-enable          => mitsub.run
net spindle-cw             => mitsub.fwd
setp mitsub.scale-cmd .084175
 

Please Log in to join the conversation.

More
2 years 4 months ago #303748 by jimwhiting
Just to add, I've been hovering over the lathe and unpausing it very quickly while the motor is still running. This works fine, so I think that rules out the VFD sensing any issue.

I've not jumped into the code to check this yet... but what flow control is the on the HAL -> user module signals? It appears to me that you could end up sending multiple commands to the user module, but are they buffered in any way? What happens if the user module is already dealing with a previous command?

Please Log in to join the conversation.

More
2 years 4 months ago #303930 by jimwhiting
Hi,
I've managed to get it to work on my machine now.

It appears there is a race condition in the run/fwd signal handling. My machine shows run == false, and fwd == true at the top of the code below, but run == true, fwd == true at the end where the transfer to last_fwd and last_run takes place. Moving the assignment to just after the comparison solves the issue.

I've included the butchered code to show what I mean. I'll revert and just test my single change next.
Code:
                # SET RUN AND DIRECTION                 # address FA sets the start and direction                 # it expects a 2 character hex representing a 8 bit (b0 - b7) binary number                 # bit 1 sets forward, 4 sets reverse, 0 stop                 # depending on the inverter and options other bits are possible,                 # but these three are consistent                 if not self['last_run%d'%index] == self.h[index]['run'] or not self['last_fwd%d'%index] == self.h[index]['fwd']:                     print('MITSUB_VFD: Run: ', self.h[index]['run'], ' FWD: ', self.h[index]['fwd'])                     print('MITSUB_VFD: LastRun: ', self['last_run%d'%index], ' LastFWD: ', self['last_fwd%d'%index])                     self['last_run%d'%index] = self.h[index]['run']                     self['last_fwd%d'%index] = self.h[index]['fwd']                     if self.h[index]['run']:                         if self.h[index]['fwd']:                             cmd = "FA";data ="02"                         else:                             cmd = "FA";data ="04"                     else:                         cmd = "FA";data ="00"                     word = self.prepare_data(cmd,data)                     self.ser.write(word)                     time.sleep(.05) #                    self['last_run%d'%index] = self.h[index]['run'] #                    self['last_fwd%d'%index] = self.h[index]['fwd'] #                    if self.h[index]['debug']:                     string,chr_list,chr_hex = self.poll_output() #                        print('DEBUG: ',chr_list,chr_hex)
 

Please Log in to join the conversation.

Time to create page: 0.140 seconds
Powered by Kunena Forum