Files
mastermacs/utils/decodeError.py

82 lines
2.7 KiB
Python
Executable File

#!/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
"""
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
]
if __name__ == "__main__":
from sys import argv
if len(argv) == 1:
# Start interactive mode
interactive()
else:
number = None
try:
number = int(float(argv[1]))
except:
print("""
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
------------------
Usage: decodeError.py
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 number is not None:
print("Motor error")
print("============")
(bit_list, interpreted) = decode(number, interpretation)
print_decoded(bit_list, interpreted)