#!/usr/bin/env python3 """ The R11 error read command returns an integer, which needs to be interpreted bitwise for various error flags. This script prints out these status flags in human-readable formatting. To read the manual, simply run this script without any arguments. Stefan Mathis, January 2025 """ import platform from decodeCommon import interactive, decode, print_decoded # List of tuples which encodes the states given in the file description. # Index first with the bit index, then with the bit value interpretation = [ ("Not specified", "Not specified"), # Bit 0 ("Ok", "Short circuit"), # Bit 1 ("Ok", "Encoder error"), # Bit 2 ("Ok", "Following error"), # Bit 3 ("Ok", "Communication error"), # Bit 4 ("Ok", "Feedback error"), # Bit 5 ("Ok", "Positive limit switch hit"), # Bit 6 ("Ok", "Negative limit switch hit"), # Bit 7 ("Ok", "Positive software limit hit"), # Bit 8 ("Ok", "Negative software limit hit"), # Bit 9 ("Ok", "Over-current"), # Bit 10 ("Ok", "Over-temperature drive"), # Bit 11 ("Ok", "Over-voltage"), # Bit 12 ("Ok", "Under-voltage"), # Bit 13 ("Not specified", "Not specified"), # Bit 14 ("Ok", "STO fault (STO input is on disable state)"), # Bit 15 ] help = """ Decode R11 message of MasterMACs ------------------ MasterMACs returns its error message (R11) as a floating-point number. The bits of this float encode different states. These states are stored in the interpretation variable. This script can be used in two different ways: Option 1: Single Command ------------------------ Usage: decodeError.py value 'value' is the return value of a R11 command. This value is interpreted bit-wise and the result is printed out. Option 2: CLI Mode (Linux-only) ------------------------------- Usage: decodeError.py ONLY AVAILABLE ON LINUX! A prompt will be opened. Type in the return value of a R11 command, hit enter and the interpretation will be printed in the prompt. After that, the next value can be typed in. Type 'quit' to close the prompt. """ if __name__ == "__main__": from sys import argv if "-h" or "--help" in argv: print(help) if len(argv) == 1: # Start interactive mode if platform.system() == "Linux": interactive() else: print(help) else: number = None try: number = int(float(argv[1])) except: print(help) if number is not None: print("Motor error") print("===========") (bit_list, interpreted) = decode(number, interpretation) print_decoded(bit_list, interpreted)