I thought I understood the General Status Variable bit values, but I am apparently still confused.
For purposes of discussion, I have 8 stepper motors, with 8 Tic controllers I am using a raspberry pi to issue serial commands to the tic controllers
I am trying to achieve two things:
Send a positioning command to one Tic controller, then when that positioning is complete, send a positioning command to to a second Tic controller, then the next and so on. If I just place the normal serial command for each controller in a for loop, all motors start moving at the same time (more or less) as the for loop is completed in a few ms. I’ve nominally solved this by checking that current position is equal to the set position: code snippet below:
for x in range(1,9):
device_number = x #None
# port = serial.Serial(port_name, baud_rate, timeout=0.1, write_timeout=0.1)
tic = TicSerial(port, device_number)
tic.energize()
tic.exit_safe_start()
# move axes and monitor position
tic.set_target_position(new_jaw[x])
# *** this while loop delays transmission of tic commands until each axis is done ***
while curr_pos != new_jaw[x]:
curr_pos = tic.get_current_position()
this nominally works, but I am not sure how to do the same with the homing operation. I have this code, but it seems the position_uncertain_flag(): can have different values, but I don’t know which to look out for and what the value would be.
for x in range(1,9):
device_number = x #None
tic = TicSerial(port, device_number)
tic.energize()
tic.exit_safe_start()
# *** HOME ALL AXES ***
tic.go_home()
errFlag = tic.get_position_uncertain_flag()
while errFlag == "19":
errFlag = tic.get_position_uncertain_flag()
I modified that function as such:
def get_position_uncertain_flag(self):
b = self.get_variables(0x01, 1)
lstb = list(b)
error_flag = str(lstb[0])
return error_flag
The second issue is to power-off the tic controller, power it back up, and “tell it” where it is supposed to be (set_current_position() ), (command 0xEC )since I had prior to powering it off, recorded it’s position. Which other commands need to precede or follow that command? ie: tic.energize() tic.exit_safe_start()
def set_current_position(self, target):
self.send_command(0xEC,
((target >> 7) & 1) | ((target >> 14) & 2) |
((target >> 21) & 4) | ((target >> 28) & 8),
target >> 0 & 0x7F,
target >> 8 & 0x7F,
target >> 16 & 0x7F,
target >> 24 & 0x7F)