diff --git a/software/testing/modbus/mining/mining_tester.py b/software/testing/modbus/mining/mining_tester.py index 7b38ccc..56f40ee 100644 --- a/software/testing/modbus/mining/mining_tester.py +++ b/software/testing/modbus/mining/mining_tester.py @@ -28,44 +28,26 @@ DEFAULT_PAN_TILT_CONTROL_TOPIC = "chassis/pan_tilt/control" PAN_TILT_NODE_ID = 1 -COMMUNICATIONS_TIMEOUT = 0.01 # Seconds +COMMUNICATIONS_TIMEOUT = 0.15 +# Seconds RX_DELAY = 0.01 TX_DELAY = 0.01 DEFAULT_HERTZ = 20 -PAN_TILT_MODBUS_REGISTERS = { - "CENTER_ALL": 0, +MINING_MODBUS_REGISTERS = { + "LIFT_SET": 0, + "TILT_SET": 1, + "TARE": 2, + "CAL_FACTOR": 3, - "PAN_ADJUST_POSITIVE": 1, - "PAN_ADJUST_NEGATIVE": 2, - "TILT_ADJUST_POSITIVE": 3, - "TILT_ADJUST_NEGATIVE": 4 + "LIFT_POSITION": 4, + "TILT_POSITION": 5, + "MEASURED_WEIGHT": 6 } -PAN_TILT_CONTROL_DEFAULT_MESSAGE = [ - 0, # No centering - 0, # No pan positive adjustment - 0, # No pan negative adjustment - 0, # No tilt positive adjustment - 0 # No tilt negative adjustement -] - -self.mining_node.serial = serial.rs485.RS485(self.port, baudrate=self.baud, timeout=COMMUNICATIONS_TIMEOUT) -self.mining_node.serial.rs485_mode = serial.rs485.RS485Settings(rts_level_for_rx=1, rts_level_for_tx=0, - delay_before_rx=RX_DELAY, - delay_before_tx=TX_DELAY) - - -def run(self): - print(self.mining_node.read_registers(0, 7)) - - -def connect_to_pan_tilt_and_tower(self): - self.mining_node = minimalmodbus.Instrument(self.port, int(2)) - self.__setup_minimalmodbus_for_485() - +POSITIONAL_THRESHOLD = 20 NODE_LAST_SEEN_TIMEOUT = 2 # seconds @@ -75,7 +57,7 @@ NODE_LAST_SEEN_TIMEOUT = 2 # seconds ##################################### class MiningControl(object): def __init__(self): - self.port = "COM22" + self.port = "/dev/ttyUSB0" self.baud = 115200 self.mining_node = None @@ -88,8 +70,61 @@ class MiningControl(object): self.modbus_nodes_seen_time = time() + self.mining_registers = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + self.run() def __setup_minimalmodbus_for_485(self): + self.mining_node.serial = serial.rs485.RS485(self.port, baudrate=self.baud, timeout=COMMUNICATIONS_TIMEOUT) + self.mining_node.serial.rs485_mode = serial.rs485.RS485Settings(rts_level_for_rx=1, rts_level_for_tx=0, + delay_before_rx=RX_DELAY, + delay_before_tx=TX_DELAY) + + def run(self): + self.initialize_mining_system() + while True: + try: + print self.mining_node.read_registers(0, 7) + # self.mining_registers[MINING_MODBUS_REGISTERS["CAL_FACTOR"]] = int(input("Enter new cal value:")) + # self.mining_node.write_registers(0, self.mining_registers) + + except Exception, e: + print e + + def connect_to_pan_tilt_and_tower(self): + self.mining_node = minimalmodbus.Instrument(self.port, int(2)) + self.__setup_minimalmodbus_for_485() + + def initialize_mining_system(self): + self.mining_registers[MINING_MODBUS_REGISTERS["LIFT_SET"]] = 1023 + self.mining_registers[MINING_MODBUS_REGISTERS["TILT_SET"]] = 350 + self.mining_registers[MINING_MODBUS_REGISTERS["CAL_FACTOR"]] = 114 + + lift_current = 0 + tilt_current = 0 + + while abs(self.mining_registers[MINING_MODBUS_REGISTERS["LIFT_POSITION"]] - self.mining_registers[MINING_MODBUS_REGISTERS["LIFT_SET"]]) > POSITIONAL_THRESHOLD or abs(self.mining_registers[MINING_MODBUS_REGISTERS["TILT_POSITION"]] - self.mining_registers[MINING_MODBUS_REGISTERS["TILT_SET"]]) > POSITIONAL_THRESHOLD: + try: + self.mining_node.write_registers(0, self.mining_registers) + self.mining_registers = self.mining_node.read_registers(0, 7) + except Exception, e: + print "Had trouble communicating:", e + + try: + self.mining_registers[MINING_MODBUS_REGISTERS["TARE"]] = 1 + self.mining_node.write_registers(0, self.mining_registers) + self.mining_registers[MINING_MODBUS_REGISTERS["TARE"]] = 0 + except: + print "Had trouble communicating: no tare: ", e + + if __name__ == "__main__": MiningControl()